00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __Fl_Query_H__
00019 #define __Fl_Query_H__
00020
00021 #include <efltk/db/Fl_Params.h>
00022 #include <efltk/Fl_Data_Source.h>
00023
00024 class Fl_Database;
00025
00026 class Fl_Query : public Fl_Data_Source {
00027 friend class Fl_Database;
00028
00029 protected:
00030 bool m_prepared;
00031 bool m_active;
00032 bool m_eof;
00033 Fl_Params m_params;
00034
00035 void checkDatabaseState();
00036
00037 Fl_Database * m_database;
00038 void * m_stmt;
00039 Fl_Data_Fields m_fields;
00040
00041 protected:
00042 Fl_String m_sql;
00043
00044 void alloc_stmt();
00045 void free_stmt();
00046
00047 void connect(Fl_Database *db);
00048 void disconnect();
00049
00050
00051 Fl_Query(const Fl_Query& ) : Fl_Data_Source(0L) {};
00052
00053 public:
00054
00055 Fl_Query(Fl_Database *db,const Fl_String& sql);
00056 Fl_Query(Fl_Database *db=0L,const char *sql="");
00057 ~Fl_Query();
00058
00059 public:
00060 void prepare();
00061 bool open();
00062 void exec();
00063 void fetch();
00064 bool close();
00065 const Fl_String& sql() { return m_sql; }
00066 Fl_Params& params() { return m_params; }
00067
00068 bool next() { fetch(); return true; }
00069
00070 public:
00071 bool eof() const { return m_eof; }
00072 bool prepared() const { return m_prepared; }
00073 unsigned param_count() const { return m_params.count(); }
00074 Fl_Param& param(const char *paramName) const { return m_params[paramName]; }
00075 Fl_Param& param(const Fl_String& paramName) const { return m_params[paramName]; }
00076 Fl_Param& param(unsigned paramIndex) const { return m_params[paramIndex]; }
00077
00078 Fl_String sql() const { return m_sql; }
00079 void sql(const Fl_String& _sql);
00080 void sql(const char * _sql);
00081
00082 Fl_Database *database() const { return m_database; }
00083 void database(Fl_Database *db);
00084
00085 bool active() const { return m_active; }
00086
00087 public:
00088 virtual const Fl_Variant& operator [] (const char *field_name) const { return m_fields[field_name]; }
00089 virtual Fl_Variant& operator [] (const char *field_name) { return m_fields[field_name]; }
00090
00091 virtual unsigned field_count() const { return m_fields.count(); }
00092 virtual int field_index(const char *fname) const { return m_fields.field_index(fname); }
00093 virtual void *user_data() const { return m_fields.user_data(); }
00094
00095
00096 virtual const Fl_Variant& operator [] (int fnum) const { return m_fields[fnum]; }
00097 virtual Fl_Variant& operator [] (int fnum) { return m_fields[fnum]; }
00098
00099
00100 virtual const Fl_Data_Field& field (int field_index) const { return m_fields.field(field_index); }
00101 virtual Fl_Data_Field& field (int field_index) { return m_fields.field(field_index); }
00102
00103
00104 virtual const Fl_Data_Field& field (const char *field_name) const { return m_fields.field(field_name); }
00105 virtual Fl_Data_Field& field (const char *field_name) { return m_fields.field(field_name); }
00106
00107
00108 virtual unsigned record_count() const;
00109 virtual bool read_field(const char *,Fl_Variant&) { return false; }
00110 virtual bool write_field(const char *,const Fl_Variant&){ return false; }
00111 virtual bool load_data() { return false; }
00112 virtual bool save_data() { return false; }
00113 };
00114
00115 #endif