Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Fl_Query.h

00001 /***************************************************************************
00002                           Fl_Query.h  -  description
00003                              -------------------
00004     begin                : Sat Dec 28 2002
00005     copyright            : (C) 2002 by Alexey Parshin
00006     email                : alexeyp@m7.tts-sf.com
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
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;    // Parent database
00038     void *            m_stmt;        // Statement handle
00039     Fl_Data_Fields    m_fields;      // Data 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     // Copy constructor isn't supported
00051     Fl_Query(const Fl_Query& ) : Fl_Data_Source(0L) {};
00052 
00053 public:
00054     // ctor, dtor
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: // acting as a Data Source
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     // access to the field value by field number, 0..field_count()-1
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     // access to the field by field number, 0..field_count()-1
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     // access to the field by field name
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     // Not supported yet:
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

Generated on Thu Jul 31 15:33:44 2003 for eFLTK by doxygen1.2.15