25 #include <csutil/scf.h>    26 #include <csutil/scf_implementation.h>    27 #include <csutil/threading/thread.h>    29 #include "iutil/comp.h"    35 #include <csutil/csstring.h>    41 struct iObjectRegistry;
    45     #ifdef USE_DELAY_QUERY    46     #define THREADED_BUFFER_SIZE 300    47     class DelayedQueryManager : 
public CS::Threading::Runnable
    50         DelayedQueryManager(
const char *host, 
unsigned int port, 
const char *database,
    51                                   const char *user, 
const char *pwd);
    54         void Push(csString query);
    58         csString arr[THREADED_BUFFER_SIZE];
    60         CS::Threading::Mutex mutex;
    61         CS::Threading::RecursiveMutex mutexArray;
    62         CS::Threading::Condition datacondition;
    73     class psMysqlConnection : 
public scfImplementation2<psMysqlConnection, iComponent, iDataConnection>
    78         iObjectRegistry *objectReg;
    84         psMysqlConnection(
iBase *iParent);
    85         virtual ~psMysqlConnection();
    88         bool Initialize(
const char *host, 
unsigned int port, 
const char *database, 
    89                         const char *user, 
const char *pwd, 
LogCSV* logcsv);
    98         void Escape(csString& to, 
const char *from);
   100         iResultSet *Select(
const char *sql,...);
   101         int SelectSingleNumber(
const char *sql, ...);
   102         unsigned long Command(
const char *sql,...);
   103         unsigned long CommandPump(
const char *sql,...);
   105         uint64 GenericInsertWithID(
const char *table,
const char **fieldnames,
psStringArray& fieldvalues);
   106         bool GenericUpdateWithID(
const char *table,
const char *idfield,
const char *
id,
const char **fieldnames,
psStringArray& fieldvalues);
   107         bool GenericUpdateWithID(
const char *table,
const char *idfield,
const char *
id,
psStringArray& fields);
   109         const char *GetLastError(
void);
   110         const char *GetLastQuery(
void)
   114         uint64 GetLastInsertID();
   116         const char *uint64tostring(uint64 value,csString& recv);
   118         virtual const char* DumpProfile();
   119         virtual void ResetProfile();
   121         iRecord* NewUpdatePreparedStatement(
const char* table, 
const char* idfield, 
unsigned int count, 
const char* file, 
unsigned int line);
   122         iRecord* NewInsertPreparedStatement(
const char* table, 
unsigned int count, 
const char* file, 
unsigned int line);
   124     #ifdef USE_DELAY_QUERY       125         csRef<DelayedQueryManager> dqm;
   126         csRef<Thread> dqmThread;
   131     class psResultRow : 
public iResultRow
   145         void SetMaxFields(
int fields)  {    max = fields;   };
   146         void SetResultSet(
void* resultsettoken);
   150         const char *operator[](
int whichfield);
   151         const char *operator[](
const char *fieldname);
   153         const char* GetString(
int whichfield);
   154         const char* GetString(
const char *fieldname);
   156         int GetInt(
int whichfield);
   157         int GetInt(
const char *fieldname);
   159         unsigned long GetUInt32(
int whichfield);
   160         unsigned long GetUInt32(
const char *fieldname);
   162         float GetFloat(
int whichfield);
   163         float GetFloat(
const char *fieldname);
   165         uint64 GetUInt64(
int whichfield);
   166         uint64 GetUInt64(
const char *fieldname);
   168         uint64 stringtouint64(
const char *stringbuf);
   169         const char *uint64tostring(uint64 value,
char *stringbuf,
int buflen);
   172     class psResultSet : 
public iResultSet
   176         unsigned long rows, fields, current;
   180         psResultSet(
char **result, 
int rows, 
int columns);
   181         virtual ~psResultSet();
   183         void Release(
void) { 
delete this; };
   185         iResultRow& operator[](
unsigned long whichrow);
   187         unsigned long Count(
void) { 
return rows; };
   190     class dbRecord : 
public iRecord
   193         enum FIELDTYPE { SQL_TYPE_FLOAT, SQL_TYPE_INT, SQL_TYPE_STRING, SQL_TYPE_NULL };
   222         virtual void AddToStatement(
const char* fname) = 0;
   224         virtual void SetID(uint32 uid) = 0;
   227         dbRecord(sqlite3* 
db, 
const char* Table, 
const char* Idfield, 
unsigned int count, 
LogCSV* logcsv, 
const char* file, 
unsigned int line)
   232             temp = 
new StatField[count];
   235             this->logcsv = logcsv;
   245             sqlite3_finalize(stmt);
   258         void AddField(
const char* fname, 
float fValue);
   260         void AddField(
const char* fname, 
int iValue);
   262         void AddField(
const char* fname, 
unsigned int uiValue);
   264         void AddField(
const char* fname, 
unsigned short usValue);
   266         void AddField(
const char* fname, 
const char* sValue);
   268         void AddFieldNull(
const char* fname);
   270         virtual bool Prepare() = 0;
   272         virtual bool Execute(uint32 uid);
   275     class dbInsert : 
public dbRecord
   277         virtual void AddToStatement(
const char* fname)
   283         virtual void SetID(uint32 )  {  };
   286         dbInsert(sqlite3* 
db, 
const char* Table, 
unsigned int count, 
LogCSV* logcsv, 
const char* file, 
unsigned int line)
   287         : dbRecord(db, Table, 
"", count, logcsv, file, line) { }
   289         virtual bool Prepare();
   292     class dbUpdate : 
public dbRecord
   294         virtual void AddToStatement(
const char* fname)
   297                 command.FormatPush(
"%s = ?", fname);
   300         virtual void SetID(uint32 uid) 
   302             temp[index].iValue = uid;
   303             temp[index].type = SQL_TYPE_INT;
   307         dbUpdate(sqlite3* 
db, 
const char* Table, 
const char* Idfield, 
unsigned int count, 
LogCSV* logcsv, 
const char* file, 
unsigned int line)
   308         : dbRecord(db, Table, Idfield, count, logcsv, file, line) { }
   309         virtual bool Prepare();
   312 } CS_PLUGIN_NAMESPACE_END(dbsqlite3)   
 
iDataConnection * db
Global connection to the Database. Set from the psDatabase class. 
 
CS_PLUGIN_NAMESPACE_BEGIN(dbmysql)
 
Statistics of time consumed by SQL statements. 
 
void void Initialize(iObjectRegistry *object_reg)
 
A slightly improved version of csStringArray, sporting the handy FormatPush method.