From: <wel...@us...> - 2010-11-18 09:30:12
|
Revision: 6402 http://planeshift.svn.sourceforge.net/planeshift/?rev=6402&view=rev Author: weltall2 Date: 2010-11-18 09:30:05 +0000 (Thu, 18 Nov 2010) Log Message: ----------- identation fixes Modified Paths: -------------- trunk/src/server/database/postgresql/dal.cpp trunk/src/server/database/postgresql/dal.h trunk/src/server/database/sqlite3/dal.h Modified: trunk/src/server/database/postgresql/dal.cpp =================================================================== --- trunk/src/server/database/postgresql/dal.cpp 2010-11-18 09:27:41 UTC (rev 6401) +++ trunk/src/server/database/postgresql/dal.cpp 2010-11-18 09:30:05 UTC (rev 6402) @@ -37,820 +37,819 @@ { SCF_IMPLEMENT_FACTORY(psMysqlConnection) -/** - * Actual class which does all the work now. - */ + /** + * Actual class which does all the work now. + */ -psMysqlConnection::psMysqlConnection(iBase *iParent) : scfImplementationType(this, iParent) -{ - conn = NULL; - stmtNum = 0; -} + psMysqlConnection::psMysqlConnection(iBase *iParent) : scfImplementationType(this, iParent) + { + conn = NULL; + stmtNum = 0; + } -psMysqlConnection::~psMysqlConnection() -{ - Close(); -} + psMysqlConnection::~psMysqlConnection() + { + Close(); + } -bool psMysqlConnection::Initialize (iObjectRegistry *objectreg) -{ - objectReg = objectreg; + bool psMysqlConnection::Initialize (iObjectRegistry *objectreg) + { + objectReg = objectreg; - pslog::Initialize (objectreg); + pslog::Initialize (objectreg); - return true; -} + return true; + } -bool psMysqlConnection::Initialize(const char *host, unsigned int port, const char *database, - const char *user, const char *pwd, LogCSV* logcsv) -{ - this->logcsv = logcsv; - // Create a mydb - csString dbConnectString; - dbConnectString.Format("host=%s dbname=%s user=%s password=%s", host, database, user, pwd); - if(port) + bool psMysqlConnection::Initialize(const char *host, unsigned int port, const char *database, + const char *user, const char *pwd, LogCSV* logcsv) { - dbConnectString.Append("port="); - dbConnectString += port; - } + this->logcsv = logcsv; + // Create a mydb + csString dbConnectString; + dbConnectString.Format("host=%s dbname=%s user=%s password=%s", host, database, user, pwd); + if(port) + { + dbConnectString.Append("port="); + dbConnectString += port; + } - conn = PQconnectdb(dbConnectString); - if(!conn || (PQstatus(conn) == CONNECTION_BAD)) - return false; + conn = PQconnectdb(dbConnectString); + if(!conn || (PQstatus(conn) == CONNECTION_BAD)) + return false; - stmtNum = 0; -#ifdef USE_DELAY_QUERY - dqm.AttachNew(new DelayedQueryManager(host, port, database, user, pwd)); - dqmThread.AttachNew(new Thread(dqm)); - dqmThread->Start(); - dqmThread->SetPriority(THREAD_PRIO_HIGH); -#endif + stmtNum = 0; + #ifdef USE_DELAY_QUERY + dqm.AttachNew(new DelayedQueryManager(host, port, database, user, pwd)); + dqmThread.AttachNew(new Thread(dqm)); + dqmThread->Start(); + dqmThread->SetPriority(THREAD_PRIO_HIGH); + #endif - return true; -} + return true; + } -bool psMysqlConnection::Close() -{ - //waits for postgresql to complete and close. - if(conn) + bool psMysqlConnection::Close() { - PQfinish(conn); - conn = NULL; - stmtNum = 0; + //waits for postgresql to complete and close. + if(conn) + { + PQfinish(conn); + conn = NULL; + stmtNum = 0; + } } -} -int psMysqlConnection::IsValid() -{ - return (conn) ? 1 : 0; -} + int psMysqlConnection::IsValid() + { + return (conn) ? 1 : 0; + } -const char *psMysqlConnection::GetLastError() -{ - return PQerrorMessage(conn); -} + const char *psMysqlConnection::GetLastError() + { + return PQerrorMessage(conn); + } -// Sets *to to the escaped value -void psMysqlConnection::Escape(csString& to, const char *from) -{ - size_t len = strlen(from); - char* buff = new char[len*2+1]; + // Sets *to to the escaped value + void psMysqlConnection::Escape(csString& to, const char *from) + { + size_t len = strlen(from); + char* buff = new char[len*2+1]; - if(conn) - PQescapeStringConn(conn, buff, from, len, NULL); - else - PQescapeString(buff, from, len); - to = buff; - delete[] buff; -} + if(conn) + PQescapeStringConn(conn, buff, from, len, NULL); + else + PQescapeString(buff, from, len); + to = buff; + delete[] buff; + } -unsigned long psMysqlConnection::CommandPump(const char *sql,...) -{ - -#ifdef USE_DELAY_QUERY - csString querystr; - va_list args; + unsigned long psMysqlConnection::CommandPump(const char *sql,...) + { + + #ifdef USE_DELAY_QUERY + csString querystr; + va_list args; - va_start(args, sql); - querystr.FormatV(sql, args); - va_end(args); - dqm->Push(querystr); + va_start(args, sql); + querystr.FormatV(sql, args); + va_end(args); + dqm->Push(querystr); - return 1; -#else - psStopWatch timer; - csString querystr; - va_list args; + return 1; + #else + psStopWatch timer; + csString querystr; + va_list args; - va_start(args, sql); - querystr.FormatV(sql, args); - va_end(args); + va_start(args, sql); + querystr.FormatV(sql, args); + va_end(args); - lastquery = querystr; + lastquery = querystr; + timer.Start(); - timer.Start(); - - PGresult *res = PQexec(conn, querystr.GetData()); - - if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) - { - if(timer.Stop() > 1000) + PGresult *res = PQexec(conn, querystr.GetData()); + + if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) { - csString status; - status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); - if(logcsv) - logcsv->Write(CSV_STATUS, status); + if(timer.Stop() > 1000) + { + csString status; + status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); + if(logcsv) + logcsv->Write(CSV_STATUS, status); + } + //csString status; + //status.Format("%s, %d", querystr.GetData(), timer.Stop()); + //logcsv->Write(CSV_SQL, status); + profs.AddSQLTime(querystr, timer.Stop()); + lastRow = PQoidValue(res); + const char *const RowsStr = PQcmdTuples(res); + return (unsigned long) (RowsStr[0] ? atoi(RowsStr) : 0); } - //csString status; - //status.Format("%s, %d", querystr.GetData(), timer.Stop()); - //logcsv->Write(CSV_SQL, status); - profs.AddSQLTime(querystr, timer.Stop()); - lastRow = PQoidValue(res); - const char *const RowsStr = PQcmdTuples(res); - return (unsigned long) (RowsStr[0] ? atoi(RowsStr) : 0); + else + { + PQclear(res); + return QUERY_FAILED; + } + + #endif } - else + + unsigned long psMysqlConnection::Command(const char *sql,...) { - PQclear(res); - return QUERY_FAILED; - } + psStopWatch timer; + csString querystr; + va_list args; -#endif -} + va_start(args, sql); + querystr.FormatV(sql, args); + va_end(args); -unsigned long psMysqlConnection::Command(const char *sql,...) -{ - psStopWatch timer; - csString querystr; - va_list args; + lastquery = querystr; - va_start(args, sql); - querystr.FormatV(sql, args); - va_end(args); - - lastquery = querystr; - - timer.Start(); - PGresult *res = PQexec(conn, querystr.GetData()); - - if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) - { - if(timer.Stop() > 1000) + timer.Start(); + PGresult *res = PQexec(conn, querystr.GetData()); + + if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) { - csString status; - status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); - if(logcsv) - logcsv->Write(CSV_STATUS, status); + if(timer.Stop() > 1000) + { + csString status; + status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); + if(logcsv) + logcsv->Write(CSV_STATUS, status); + } + profs.AddSQLTime(querystr, timer.Stop()); + lastRow = PQoidValue(res); + const char *const RowsStr = PQcmdTuples(res); + return (unsigned long) (RowsStr[0] ? atoi(RowsStr) : 0); } - profs.AddSQLTime(querystr, timer.Stop()); - lastRow = PQoidValue(res); - const char *const RowsStr = PQcmdTuples(res); - return (unsigned long) (RowsStr[0] ? atoi(RowsStr) : 0); + else + { + PQclear(res); + return QUERY_FAILED; + } } - else + + iResultSet *psMysqlConnection::Select(const char *sql, ...) { - PQclear(res); - return QUERY_FAILED; - } -} + psStopWatch timer; + csString querystr; + va_list args; -iResultSet *psMysqlConnection::Select(const char *sql, ...) -{ - psStopWatch timer; - csString querystr; - va_list args; + va_start(args, sql); + querystr.FormatV(sql, args); + va_end(args); - va_start(args, sql); - querystr.FormatV(sql, args); - va_end(args); + lastquery = querystr; - lastquery = querystr; + timer.Start(); - timer.Start(); - - PGresult *res = PQexec(conn, querystr.GetData()); - - if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) - { - if(timer.Stop() > 1000) + PGresult *res = PQexec(conn, querystr.GetData()); + + if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) { - csString status; - status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); - if(logcsv) - logcsv->Write(CSV_STATUS, status); + if(timer.Stop() > 1000) + { + csString status; + status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); + if(logcsv) + logcsv->Write(CSV_STATUS, status); + } + profs.AddSQLTime(querystr, timer.Stop()); + iResultSet *rs = new psResultSet(res); + return rs; } - profs.AddSQLTime(querystr, timer.Stop()); - iResultSet *rs = new psResultSet(res); - return rs; + else + { + PQclear(res); + return NULL; + } } - else + + int psMysqlConnection::SelectSingleNumber(const char *sql, ...) { - PQclear(res); - return NULL; - } -} + psStopWatch timer; + csString querystr; + va_list args; -int psMysqlConnection::SelectSingleNumber(const char *sql, ...) -{ - psStopWatch timer; - csString querystr; - va_list args; + va_start(args, sql); + querystr.FormatV(sql, args); + va_end(args); - va_start(args, sql); - querystr.FormatV(sql, args); - va_end(args); + lastquery = querystr; - lastquery = querystr; + timer.Start(); - timer.Start(); - - PGresult *res = PQexec(conn, querystr.GetData()); - - if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) - { - if(timer.Stop() > 1000) + PGresult *res = PQexec(conn, querystr.GetData()); + + if(res && PQresultStatus(res) != PGRES_FATAL_ERROR) { - csString status; - status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); - if(logcsv) - logcsv->Write(CSV_STATUS, status); - } - profs.AddSQLTime(querystr, timer.Stop()); - iResultSet *rs = new psResultSet(res); + if(timer.Stop() > 1000) + { + csString status; + status.Format("SQL query %s, has taken %u time to process.\n", querystr.GetData(), timer.Stop()); + if(logcsv) + logcsv->Write(CSV_STATUS, status); + } + profs.AddSQLTime(querystr, timer.Stop()); + iResultSet *rs = new psResultSet(res); - if (rs->Count()) - { - const char *value = (*rs)[0][0]; - int result = atoi( value?value:"0" ); - delete rs; - return result; + if (rs->Count()) + { + const char *value = (*rs)[0][0]; + int result = atoi( value?value:"0" ); + delete rs; + return result; + } + else + { + delete rs; // return err code below + } } else { - delete rs; // return err code below + PQclear(res); + return QUERY_FAILED; } } - else - { - PQclear(res); - return QUERY_FAILED; - } -} -uint64 psMysqlConnection::GetLastInsertID() -{ - return lastRow; -} - -uint64 psMysqlConnection::GenericInsertWithID(const char *table,const char **fieldnames,psStringArray& fieldvalues) -{ - csString command; - const size_t count = fieldvalues.GetSize(); - uint i; - command = "INSERT INTO "; - command.Append(table); - command.Append(" ("); - for (i=0;i<count;i++) + uint64 psMysqlConnection::GetLastInsertID() { - if (i>0) - command.Append(","); - command.Append(fieldnames[i]); + return lastRow; } - command.Append(") VALUES ("); - for (i=0;i<count;i++) + uint64 psMysqlConnection::GenericInsertWithID(const char *table,const char **fieldnames,psStringArray& fieldvalues) { - if (i>0) - command.Append(","); - if (fieldvalues[i]!=NULL) + csString command; + const size_t count = fieldvalues.GetSize(); + uint i; + command = "INSERT INTO "; + command.Append(table); + command.Append(" ("); + for (i=0;i<count;i++) { - command.Append("'"); - csString escape; - Escape( escape, fieldvalues[i] ); - command.Append(escape); - command.Append("'"); + if (i>0) + command.Append(","); + command.Append(fieldnames[i]); } - else + + command.Append(") VALUES ("); + for (i=0;i<count;i++) { - command.Append("NULL"); + if (i>0) + command.Append(","); + if (fieldvalues[i]!=NULL) + { + command.Append("'"); + csString escape; + Escape( escape, fieldvalues[i] ); + command.Append(escape); + command.Append("'"); + } + else + { + command.Append("NULL"); + } } + command.Append(")"); + + if (Command("%s", command.GetDataSafe())!=1) + return 0; + + return GetLastInsertID(); } - command.Append(")"); - if (Command("%s", command.GetDataSafe())!=1) - return 0; + bool psMysqlConnection::GenericUpdateWithID(const char *table,const char *idfield,const char *id,psStringArray& fields) + { + uint i; + const size_t count = fields.GetSize(); + csString command; - return GetLastInsertID(); -} + command.Append("UPDATE "); + command.Append(table); + command.Append(" SET "); -bool psMysqlConnection::GenericUpdateWithID(const char *table,const char *idfield,const char *id,psStringArray& fields) -{ - uint i; - const size_t count = fields.GetSize(); - csString command; + for (i=0;i<count;i++) + { + if (i>0) + command.Append(","); + command.Append(fields[i]); + } - command.Append("UPDATE "); - command.Append(table); - command.Append(" SET "); + command.Append(" where "); + command.Append(idfield); + command.Append("='"); + csString escape; + Escape( escape, id ); + command.Append(escape); + command.Append("'"); - for (i=0;i<count;i++) - { - if (i>0) - command.Append(","); - command.Append(fields[i]); + if (CommandPump("%s", command.GetDataSafe())==QUERY_FAILED) + { + return false; + } + + return true; } - command.Append(" where "); - command.Append(idfield); - command.Append("='"); - csString escape; - Escape( escape, id ); - command.Append(escape); - command.Append("'"); - - if (CommandPump("%s", command.GetDataSafe())==QUERY_FAILED) + bool psMysqlConnection::GenericUpdateWithID(const char *table,const char *idfield,const char *id,const char **fieldnames,psStringArray& fieldvalues) { - return false; - } + uint i; + const size_t count = fieldvalues.GetSize(); + csString command; - return true; -} + command.Append("UPDATE "); + command.Append(table); + command.Append(" SET "); -bool psMysqlConnection::GenericUpdateWithID(const char *table,const char *idfield,const char *id,const char **fieldnames,psStringArray& fieldvalues) -{ - uint i; - const size_t count = fieldvalues.GetSize(); - csString command; + for (i=0;i<count;i++) + { + if (i>0) + command.Append(","); + command.Append(fieldnames[i]); + if (fieldvalues[i]!=NULL) + { + command.Append("='"); + csString escape; + Escape(escape, fieldvalues[i]); + command.Append(escape); + command.Append("'"); + } + else + { + command.Append("=NULL"); + } - command.Append("UPDATE "); - command.Append(table); - command.Append(" SET "); + } - for (i=0;i<count;i++) - { - if (i>0) - command.Append(","); - command.Append(fieldnames[i]); - if (fieldvalues[i]!=NULL) + command.Append(" where "); + command.Append(idfield); + command.Append("='"); + csString escape; + Escape( escape, id ); + command.Append(escape); + command.Append("'"); + + if (CommandPump("%s", command.GetDataSafe())==QUERY_FAILED) { - command.Append("='"); - csString escape; - Escape(escape, fieldvalues[i]); - command.Append(escape); - command.Append("'"); + return false; } - else + + return true; + } + + const char *psMysqlConnection::uint64tostring(uint64 value,csString& recv) + { + recv.Clear(); + + while (value>0) { - command.Append("=NULL"); + recv.Insert(0,(char)'0'+(value % 10) ); + value/=10; } + return recv; + } + const char* psMysqlConnection::DumpProfile() + { + profileDump = profs.Dump(); + return profileDump; } - command.Append(" where "); - command.Append(idfield); - command.Append("='"); - csString escape; - Escape( escape, id ); - command.Append(escape); - command.Append("'"); + void psMysqlConnection::ResetProfile() + { + profs.Reset(); + profileDump.Empty(); + } - if (CommandPump("%s", command.GetDataSafe())==QUERY_FAILED) + iRecord* psMysqlConnection::NewUpdatePreparedStatement(const char* table, const char* idfield, unsigned int count, const char* file, unsigned int line) { - return false; + return new dbUpdate(conn, &stmtNum, table, idfield, count, logcsv, file, line); } - return true; -} - -const char *psMysqlConnection::uint64tostring(uint64 value,csString& recv) -{ - recv.Clear(); - - while (value>0) + iRecord* psMysqlConnection::NewInsertPreparedStatement(const char* table, unsigned int count, const char* file, unsigned int line) { - recv.Insert(0,(char)'0'+(value % 10) ); - value/=10; + return new dbInsert(conn, &stmtNum, table, count, logcsv, file, line); } - return recv; -} -const char* psMysqlConnection::DumpProfile() -{ - profileDump = profs.Dump(); - return profileDump; -} + psResultSet::psResultSet(PGresult *res) + { + rs = res; + rows = PQntuples(res); + fields = PQnfields(res); + row.SetMaxFields(fields); + row.SetResultSet(rs); -void psMysqlConnection::ResetProfile() -{ - profs.Reset(); - profileDump.Empty(); -} + current = (unsigned long) -1; -iRecord* psMysqlConnection::NewUpdatePreparedStatement(const char* table, const char* idfield, unsigned int count, const char* file, unsigned int line) -{ - return new dbUpdate(conn, &stmtNum, table, idfield, count, logcsv, file, line); -} + } -iRecord* psMysqlConnection::NewInsertPreparedStatement(const char* table, unsigned int count, const char* file, unsigned int line) -{ - return new dbInsert(conn, &stmtNum, table, count, logcsv, file, line); -} + psResultSet::~psResultSet() + { + PQclear(rs); + } -psResultSet::psResultSet(PGresult *res) -{ - rs = res; - rows = PQntuples(res); - fields = PQnfields(res); - row.SetMaxFields(fields); - row.SetResultSet(rs); + iResultRow& psResultSet::operator[](unsigned long whichrow) + { + if (whichrow != current) + { + if(whichrow <= rows) + { + row.Fetch(whichrow); + current = whichrow; + row.SetMaxFields(fields); + } + else + row.SetMaxFields(0); // no fields will make operator[]'s safe + } + + return row; + } - current = (unsigned long) -1; + void psResultRow::SetResultSet(void * resultsettoken) + { + rs = (PGresult*)resultsettoken; + } -} + int psResultRow::Fetch(int row) + { + rowNum = row; + } -psResultSet::~psResultSet() -{ - PQclear(rs); -} + const char *psResultRow::operator[](int whichfield) + { + if (whichfield >= 0 && whichfield < max) + return PQgetvalue(rs, rowNum, whichfield); + else + return ""; + } -iResultRow& psResultSet::operator[](unsigned long whichrow) -{ - if (whichrow != current) + const char *psResultRow::operator[](const char *fieldname) { - if(whichrow <= rows) + CS_ASSERT(fieldname); + CS_ASSERT(max); // trying to access when no fields returned in row! probably empty resultset. + + for (int i=0; i < max; i++) { - row.Fetch(whichrow); - current = whichrow; - row.SetMaxFields(fields); + if (!strcasecmp(PQfname(rs,i),fieldname)) + { + return PQgetvalue(rs, rowNum, i); + } } - else - row.SetMaxFields(0); // no fields will make operator[]'s safe - } - - return row; -} -void psResultRow::SetResultSet(void * resultsettoken) -{ - rs = (PGresult*)resultsettoken; -} + //looks like this is bugged in pq library. trips in things like numColumns. + /*int column = PQfnumber(rs, fieldname); + printf("%s\n", PQgetvalue(rs, rowNum, column)); + if(column != -1) + return PQgetvalue(rs, rowNum, column);*/ -int psResultRow::Fetch(int row) -{ - rowNum = row; -} + CPrintf(CON_BUG, "Could not find field %s!. Exiting.\n",fieldname); + CS_ASSERT(false); + return ""; // Illegal name. + } -const char *psResultRow::operator[](int whichfield) -{ - if (whichfield >= 0 && whichfield < max) - return PQgetvalue(rs, rowNum, whichfield); - else - return ""; -} + int psResultRow::GetInt(int whichfield) + { + const char *ptr = this->operator [](whichfield); + return (ptr)?atoi(ptr):0; + } -const char *psResultRow::operator[](const char *fieldname) -{ - CS_ASSERT(fieldname); - CS_ASSERT(max); // trying to access when no fields returned in row! probably empty resultset. - - for (int i=0; i < max; i++) - { - if (!strcasecmp(PQfname(rs,i),fieldname)) + int psResultRow::GetInt(const char *fieldname) { - return PQgetvalue(rs, rowNum, i); + const char *ptr = this->operator [](fieldname); + return (ptr)?atoi(ptr):0; } - } - //looks like this is bugged in pq library. trips in things like numColumns. - /*int column = PQfnumber(rs, fieldname); - printf("%s\n", PQgetvalue(rs, rowNum, column)); - if(column != -1) - return PQgetvalue(rs, rowNum, column);*/ + unsigned long psResultRow::GetUInt32(int whichfield) + { + const char *ptr = this->operator [](whichfield); + return (ptr)?strtoul(ptr,NULL,10):0; + } - CPrintf(CON_BUG, "Could not find field %s!. Exiting.\n",fieldname); - CS_ASSERT(false); - return ""; // Illegal name. -} + unsigned long psResultRow::GetUInt32(const char *fieldname) + { + const char *ptr = this->operator [](fieldname); + return (ptr)?strtoul(ptr,NULL,10):0; + } -int psResultRow::GetInt(int whichfield) -{ - const char *ptr = this->operator [](whichfield); - return (ptr)?atoi(ptr):0; -} + float psResultRow::GetFloat(int whichfield) + { + const char *ptr = this->operator [](whichfield); + return (ptr)?atof(ptr):0; + } -int psResultRow::GetInt(const char *fieldname) -{ - const char *ptr = this->operator [](fieldname); - return (ptr)?atoi(ptr):0; -} + float psResultRow::GetFloat(const char *fieldname) + { + const char *ptr = this->operator [](fieldname); + return (ptr)?atof(ptr):0; + } -unsigned long psResultRow::GetUInt32(int whichfield) -{ - const char *ptr = this->operator [](whichfield); - return (ptr)?strtoul(ptr,NULL,10):0; -} + uint64 psResultRow::GetUInt64(int whichfield) + { + const char *ptr = this->operator [](whichfield); + return (ptr)?stringtouint64(ptr):0; + } -unsigned long psResultRow::GetUInt32(const char *fieldname) -{ - const char *ptr = this->operator [](fieldname); - return (ptr)?strtoul(ptr,NULL,10):0; -} + uint64 psResultRow::GetUInt64(const char *fieldname) + { + const char *ptr = this->operator [](fieldname); + return (ptr)?stringtouint64(ptr):0; + } -float psResultRow::GetFloat(int whichfield) -{ - const char *ptr = this->operator [](whichfield); - return (ptr)?atof(ptr):0; -} + uint64 psResultRow::stringtouint64(const char *stringbuf) + { + /* Our goal is to handle a conversion from a string of base-10 digits into most any numeric format. + * This has very specific use and so we presume a few things here: + * + * The value in the string can actually fit into the type being used + * This function can be slow compared to the smaller ato* and strto* counterparts. + */ + uint64 result=0; + CS_ASSERT(stringbuf!=NULL); + while (*stringbuf!=0x00) + { + CS_ASSERT(*stringbuf >='0' && *stringbuf<='9'); + result=result * 10; + result = result + (uint64)(*stringbuf - (char)'0'); + stringbuf++; + } -float psResultRow::GetFloat(const char *fieldname) -{ - const char *ptr = this->operator [](fieldname); - return (ptr)?atof(ptr):0; -} + return result; + } -uint64 psResultRow::GetUInt64(int whichfield) -{ - const char *ptr = this->operator [](whichfield); - return (ptr)?stringtouint64(ptr):0; -} + void dbRecord::AddField(const char* fname, float fValue) + { + AddToStatement(fname); + temp[index].fValue = fValue; + temp[index].type = SQL_TYPE_FLOAT; + index++; + } -uint64 psResultRow::GetUInt64(const char *fieldname) -{ - const char *ptr = this->operator [](fieldname); - return (ptr)?stringtouint64(ptr):0; -} + void dbRecord::AddField(const char* fname, int iValue) + { + AddToStatement(fname); + temp[index].iValue = iValue; + temp[index].type = SQL_TYPE_INT; + index++; + } -uint64 psResultRow::stringtouint64(const char *stringbuf) -{ - /* Our goal is to handle a conversion from a string of base-10 digits into most any numeric format. - * This has very specific use and so we presume a few things here: - * - * The value in the string can actually fit into the type being used - * This function can be slow compared to the smaller ato* and strto* counterparts. - */ - uint64 result=0; - CS_ASSERT(stringbuf!=NULL); - while (*stringbuf!=0x00) + void dbRecord::AddField(const char* fname, unsigned int uiValue) { - CS_ASSERT(*stringbuf >='0' && *stringbuf<='9'); - result=result * 10; - result = result + (uint64)(*stringbuf - (char)'0'); - stringbuf++; + AddToStatement(fname); + temp[index].iValue = uiValue; + temp[index].type = SQL_TYPE_INT; + index++; } - return result; -} + void dbRecord::AddField(const char* fname, unsigned short usValue) + { + AddToStatement(fname); + temp[index].iValue = usValue; + temp[index].type = SQL_TYPE_INT; + index++; + } -void dbRecord::AddField(const char* fname, float fValue) -{ - AddToStatement(fname); - temp[index].fValue = fValue; - temp[index].type = SQL_TYPE_FLOAT; - index++; -} + void dbRecord::AddField(const char* fname, const char* sValue) + { + AddToStatement(fname); + temp[index].sValue = sValue; //conn->esc(sValue).c_str(); + temp[index].type = SQL_TYPE_STRING; + index++; + } -void dbRecord::AddField(const char* fname, int iValue) -{ - AddToStatement(fname); - temp[index].iValue = iValue; - temp[index].type = SQL_TYPE_INT; - index++; -} + void dbRecord::AddFieldNull(const char* fname) + { + AddToStatement(fname); + temp[index].type = SQL_TYPE_NULL; + index++; + } -void dbRecord::AddField(const char* fname, unsigned int uiValue) -{ - AddToStatement(fname); - temp[index].iValue = uiValue; - temp[index].type = SQL_TYPE_INT; - index++; -} + bool dbRecord::Execute(uint32 uid) + { + SetID(uid); + CS_ASSERT_MSG("Error: wrong number of expected fields", index == count); -void dbRecord::AddField(const char* fname, unsigned short usValue) -{ - AddToStatement(fname); - temp[index].iValue = usValue; - temp[index].type = SQL_TYPE_INT; - index++; -} + if(!prepared) + Prepare(); -void dbRecord::AddField(const char* fname, const char* sValue) -{ - AddToStatement(fname); - temp[index].sValue = sValue; //conn->esc(sValue).c_str(); - temp[index].type = SQL_TYPE_STRING; - index++; -} + psStopWatch timer; + timer.Start(); -void dbRecord::AddFieldNull(const char* fname) -{ - AddToStatement(fname); - temp[index].type = SQL_TYPE_NULL; - index++; -} + CS_ASSERT(count != index); -bool dbRecord::Execute(uint32 uid) -{ - SetID(uid); - CS_ASSERT_MSG("Error: wrong number of expected fields", index == count); + csStringArray paramStrings; + const char *paramValues[index]; + for(int i = 0; i < index; i++) + { + csString value; + switch(temp[i].type) + { + case SQL_TYPE_FLOAT: + value.Format("%f", temp[i].fValue); + break; + case SQL_TYPE_INT: + value.Format("%i", temp[i].iValue); + break; + case SQL_TYPE_STRING: + value = temp[i].sValue; + break; + case SQL_TYPE_NULL: + break; + } + paramStrings.Push(value); + paramValues[i] = paramStrings.Get(i); + } - if(!prepared) - Prepare(); + PGresult *res = PQexecPrepared(conn, stmt.GetData(), index, paramValues, NULL, NULL,0); + bool result = (res && PQresultStatus(res) != PGRES_FATAL_ERROR); + if(result && timer.Stop() > 1000) + { + csString status; + status.Format("SQL query in file %s line %d, has taken %u time to process.\n", file, line, timer.Stop()); + if(logcsv) + logcsv->Write(CSV_STATUS, status); + } + return result; + } - psStopWatch timer; - timer.Start(); + bool dbInsert::Prepare() + { + csString statement; - CS_ASSERT(count != index); + // count fields to update + statement.Format("INSERT INTO %s (", table); + for (unsigned int i=0;i<count;i++) + { + if (i>0) + statement.Append(", "); + statement.Append(command[i]); + } - csStringArray paramStrings; - const char *paramValues[index]; - for(int i = 0; i < index; i++) - { - csString value; - switch(temp[i].type) + statement.Append(") VALUES ("); + for (unsigned int i=0;i<count;i++) { - case SQL_TYPE_FLOAT: - value.Format("%f", temp[i].fValue); - break; - case SQL_TYPE_INT: - value.Format("%i", temp[i].iValue); - break; - case SQL_TYPE_STRING: - value = temp[i].sValue; - break; - case SQL_TYPE_NULL: - break; + if (i>0) + statement.Append(", "); + statement.Append("$"); + statement += (i+1); } - paramStrings.Push(value); - paramValues[i] = paramStrings.Get(i); - } - PGresult *res = PQexecPrepared(conn, stmt.GetData(), index, paramValues, NULL, NULL,0); - bool result = (res && PQresultStatus(res) != PGRES_FATAL_ERROR); - if(result && timer.Stop() > 1000) - { - csString status; - status.Format("SQL query in file %s line %d, has taken %u time to process.\n", file, line, timer.Stop()); - if(logcsv) - logcsv->Write(CSV_STATUS, status); - } - return result; -} + statement.Append(")"); -bool dbInsert::Prepare() -{ - csString statement; + csString preparedName = ""; + preparedName += *stmtNum; - // count fields to update - statement.Format("INSERT INTO %s (", table); - for (unsigned int i=0;i<count;i++) - { - if (i>0) - statement.Append(", "); - statement.Append(command[i]); + PGresult *res = PQprepare(conn, preparedName.GetData(), statement.GetData(), 0,0); + + prepared = (res && PQresultStatus(res) != PGRES_FATAL_ERROR); + + if(prepared) + { + stmt = preparedName; + (*stmtNum)++; + } + + return prepared; } - statement.Append(") VALUES ("); - for (unsigned int i=0;i<count;i++) + bool dbUpdate::Prepare() { - if (i>0) - statement.Append(", "); - statement.Append("$"); + csString statement; + + // count - 1 fields to update + statement.Format("UPDATE %s SET ", table); + unsigned int i; + for (i=0;i<(count-1);i++) + { + if (i>0) + statement.Append(","); + statement.Append(command[i]); + statement += (i+1); + } + statement.Append(" where "); + statement.Append(idfield); + // field count is the idfield + statement.Append(" = $"); statement += (i+1); - } - statement.Append(")"); + csString preparedName = ""; + preparedName += *stmtNum; - csString preparedName = ""; - preparedName += *stmtNum; + PGresult *res = PQprepare(conn, preparedName.GetData(), statement.GetData(), 0,0); - PGresult *res = PQprepare(conn, preparedName.GetData(), statement.GetData(), 0,0); + prepared = (res && PQresultStatus(res) != PGRES_FATAL_ERROR); + + if(prepared) + { + stmt = preparedName; + (*stmtNum)++; + } - prepared = (res && PQresultStatus(res) != PGRES_FATAL_ERROR); - - if(prepared) - { - stmt = preparedName; - (*stmtNum)++; + return prepared; } - return prepared; -} + //NOT IMPLEMENTED + #ifdef USE_DELAY_QUERY -bool dbUpdate::Prepare() -{ - csString statement; - - // count - 1 fields to update - statement.Format("UPDATE %s SET ", table); - unsigned int i; - for (i=0;i<(count-1);i++) + DelayedQueryManager::DelayedQueryManager(const char *host, unsigned int port, const char *database, + const char *user, const char *pwd) { - if (i>0) - statement.Append(","); - statement.Append(command[i]); - statement += (i+1); + /*start=end=0; + m_Close = false; + m_host = csString(host); + m_port = port; + m_db = csString(database); + m_user = csString(user); + m_pwd = csString(pwd);*/ } - statement.Append(" where "); - statement.Append(idfield); - // field count is the idfield - statement.Append(" = $"); - statement += (i+1); - csString preparedName = ""; - preparedName += *stmtNum; - - PGresult *res = PQprepare(conn, preparedName.GetData(), statement.GetData(), 0,0); - - prepared = (res && PQresultStatus(res) != PGRES_FATAL_ERROR); - - if(prepared) + void DelayedQueryManager::Stop() { - stmt = preparedName; - (*stmtNum)++; + /*m_Close = true; + datacondition.NotifyOne(); + CS::Threading::Thread::Yield();*/ } - return prepared; -} - -//NOT IMPLEMENTED -#ifdef USE_DELAY_QUERY - -DelayedQueryManager::DelayedQueryManager(const char *host, unsigned int port, const char *database, - const char *user, const char *pwd) -{ - /*start=end=0; - m_Close = false; - m_host = csString(host); - m_port = port; - m_db = csString(database); - m_user = csString(user); - m_pwd = csString(pwd);*/ -} - -void DelayedQueryManager::Stop() -{ - /*m_Close = true; - datacondition.NotifyOne(); - CS::Threading::Thread::Yield();*/ -} - -void DelayedQueryManager::Run() -{ - /*mysql_thread_init(); - MYSQL *conn=mysql_init(NULL); - printf("Starting secondary connection with params: %s %s %s %d", m_host.GetData(), m_user.GetData(), m_db.GetData(), m_port); - m_conn = mysql_real_connect(conn,m_host,m_user,m_pwd,m_db,m_port,NULL,CLIENT_FOUND_ROWS); - if (!m_conn) + void DelayedQueryManager::Run() { - printf("Failed to connect to database: Error: %s\n", mysql_error(conn)); - return; - } + /*mysql_thread_init(); + MYSQL *conn=mysql_init(NULL); + printf("Starting secondary connection with params: %s %s %s %d", m_host.GetData(), m_user.GetData(), m_db.GetData(), m_port); + m_conn = mysql_real_connect(conn,m_host,m_user,m_pwd,m_db,m_port,NULL,CLIENT_FOUND_ROWS); + if (!m_conn) + { + printf("Failed to connect to database: Error: %s\n", mysql_error(conn)); + return; + } - my_bool my_true = true; + my_bool my_true = true; -#if MYSQL_VERSION_ID >= 50000 - mysql_options(m_conn, MYSQL_OPT_RECONNECT, &my_true); -#endif + #if MYSQL_VERSION_ID >= 50000 + mysql_options(m_conn, MYSQL_OPT_RECONNECT, &my_true); + #endif - psStopWatch timer; - while(!m_Close) - { - CS::Threading::MutexScopedLock lock(mutex); - datacondition.Wait(mutex); - while (start != end) + psStopWatch timer; + while(!m_Close) { - csString currQuery; + CS::Threading::MutexScopedLock lock(mutex); + datacondition.Wait(mutex); + while (start != end) { - CS::Threading::RecursiveMutexScopedLock lock(mutexArray); - currQuery = arr[end]; - end = (end+1) % THREADED_BUFFER_SIZE; + csString currQuery; + { + CS::Threading::RecursiveMutexScopedLock lock(mutexArray); + currQuery = arr[end]; + end = (end+1) % THREADED_BUFFER_SIZE; + } + timer.Start(); + if (!mysql_query(m_conn, currQuery)) + profs.AddSQLTime(currQuery, timer.Stop()); } - timer.Start(); - if (!mysql_query(m_conn, currQuery)) - profs.AddSQLTime(currQuery, timer.Stop()); } + mysql_close(m_conn); + mysql_thread_end();*/ } - mysql_close(m_conn); - mysql_thread_end();*/ -} -void DelayedQueryManager::Push(csString query) -{/* - { - CS::Threading::RecursiveMutexScopedLock lock(mutexArray); - size_t tstart = (start+1) % THREADED_BUFFER_SIZE; - if (tstart == end) + void DelayedQueryManager::Push(csString query) + {/* { - return; + CS::Threading::RecursiveMutexScopedLock lock(mutexArray); + size_t tstart = (start+1) % THREADED_BUFFER_SIZE; + if (tstart == end) + { + return; + } + arr[start] = query; + start = tstart; } - arr[start] = query; - start = tstart; + datacondition.NotifyOne();*/ } - datacondition.NotifyOne();*/ + #endif } -#endif -} CS_PLUGIN_NAMESPACE_END(dbpostgresql) Modified: trunk/src/server/database/postgresql/dal.h =================================================================== --- trunk/src/server/database/postgresql/dal.h 2010-11-18 09:27:41 UTC (rev 6401) +++ trunk/src/server/database/postgresql/dal.h 2010-11-18 09:30:05 UTC (rev 6402) @@ -29,275 +29,267 @@ CS_PLUGIN_NAMESPACE_BEGIN(dbpostgresql) { -#ifdef USE_DELAY_QUERY -#define THREADED_BUFFER_SIZE 300 -class DelayedQueryManager : public CS::Threading::Runnable -{ -public: - DelayedQueryManager(const char *host, unsigned int port, const char *database, - const char *user, const char *pwd); + #ifdef USE_DELAY_QUERY + #define THREADED_BUFFER_SIZE 300 + class DelayedQueryManager : public CS::Threading::Runnable + { + public: + DelayedQueryManager(const char *host, unsigned int port, const char *database, + const char *user, const char *pwd); - virtual void Run (); - void Push(csString query); - void Stop(); -private: - //pqxx::connection* m_conn; - csString arr[THREADED_BUFFER_SIZE]; - size_t start, end; - CS::Threading::Mutex mutex; - CS::Threading::RecursiveMutex mutexArray; - CS::Threading::Condition datacondition; - bool m_Close; - psDBProfiles profs; - csString m_host; - unsigned int m_port; - csString m_db; - csString m_user; - csString m_pwd; -}; -#endif + virtual void Run (); + void Push(csString query); + void Stop(); + private: + csString arr[THREADED_BUFFER_SIZE]; + size_t start, end; + CS::Threading::Mutex mutex; + CS::Threading::RecursiveMutex mutexArray; + CS::Threading::Condition datacondition; + bool m_Close; + psDBProfiles profs; + csString m_host; + unsigned int m_port; + csString m_db; + csString m_user; + csString m_pwd; + }; + #endif -class psMysqlConnection : public scfImplementation2<psMysqlConnection, iComponent, iDataConnection> -{ -protected: - PGconn* conn; //Points to mydb after a successfull connection to the db - uint64 lastRow; - csString lastquery; - int stmtNum; - iObjectRegistry *objectReg; - psDBProfiles profs; - csString profileDump; - LogCSV* logcsv; + class psMysqlConnection : public scfImplementation2<psMysqlConnection, iComponent, iDataConnection> + { + protected: + PGconn* conn; //Points to mydb after a successfull connection to the db + uint64 lastRow; + csString lastquery; + int stmtNum; + iObjectRegistry *objectReg; + psDBProfiles profs; + csString profileDump; + LogCSV* logcsv; -public: - psMysqlConnection(iBase *iParent); - virtual ~psMysqlConnection(); + public: + psMysqlConnection(iBase *iParent); + virtual ~psMysqlConnection(); - bool Initialize (iObjectRegistry *objectreg); - bool Initialize(const char *host, unsigned int port, const char *database, - const char *user, const char *pwd, LogCSV* logcsv); - virtual bool Close(); + bool Initialize (iObjectRegistry *objectreg); + bool Initialize(const char *host, unsigned int port, const char *database, + const char *user, const char *pwd, LogCSV* logcsv); + virtual bool Close(); - int IsValid(void); + int IsValid(void); - /** Escapes a string to safely insert it into the database. - * @param to Where the resulting escaped string will be placed. - * @param from The string that we want to escape. - */ - void Escape(csString& to, const char *from); - - iResultSet *Select(const char *sql,...); - int SelectSingleNumber(const char *sql, ...); - unsigned long Command(const char *sql,...); - unsigned long CommandPump(const char *sql,...); + /** Escapes a string to safely insert it into the database. + * @param to Where the resulting escaped string will be placed. + * @param from The string that we want to escape. + */ + void Escape(csString& to, const char *from); + + iResultSet *Select(const char *sql,...); + int SelectSingleNumber(const char *sql, ...); + unsigned long Command(const char *sql,...); + unsigned long CommandPump(const char *sql,...); - uint64 GenericInsertWithID(const char *table,const char **fieldnames,psStringArray& fieldvalues); - bool GenericUpdateWithID(const char *table,const char *idfield,const char *id,const char **fieldnames,psStringArray& fieldvalues); - bool GenericUpdateWithID(const char *table,const char *idfield,const char *id,psStringArray& fields); + uint64 GenericInsertWithID(const char *table,const char **fieldnames,psStringArray& fieldvalues); + bool GenericUpdateWithID(const char *table,const char *idfield,const char *id,const char **fieldnames,psStringArray& fieldvalues); + bool GenericUpdateWithID(const char *table,const char *idfield,const char *id,psStringArray& fields); - const char *GetLastError(void); - const char *GetLastQuery(void) - { - return lastquery; - }; - uint64 GetLastInsertID(); - - const char *uint64tostring(uint64 value,csString& recv); + const char *GetLastError(void); + const char *GetLastQuery(void) + { + return lastquery; + }; + uint64 GetLastInsertID(); + + const char *uint64tostring(uint64 value,csString& recv); - virtual const char* DumpProfile(); - virtual void ResetProfile(); - - iRecord* NewUpdatePreparedStatement(const char* table, const char* idfield, unsigned int count, const char* file, unsigned int line); - iRecord* NewInsertPreparedStatement(const char* table, unsigned int count, const char* file, unsigned int line); + virtual const char* DumpProfile(); + virtual void ResetProfile(); + + iRecord* NewUpdatePreparedStatement(const char* table, const char* idfield, unsigned int count, const char* file, unsigned int line); + iRecord* NewInsertPreparedStatement(const char* table, unsigned int count, const char* file, unsigned int line); -#ifdef USE_DELAY_QUERY - csRef<DelayedQueryManager> dqm; - csRef<Thread> dqmThread; -#endif -}; + #ifdef USE_DELAY_QUERY + csRef<DelayedQueryManager> dqm; + csRef<Thread> dqmThread; + #endif + }; -class psResultRow : public iResultRow -{ -protected: - int rowNum; - PGresult *rs; - int max; - -public: - psResultRow() + class psResultRow : public iResultRow { - rowNum = 0; - rs = NULL; - }; + protected: + int rowNum; + PGresult *rs; + int max; - void SetMaxFields(int fields) { max = fields; }; - void SetResultSet(void* resultsettoken); + public: + psResultRow() + { + rowNum = 0; + rs = NULL; + }; - int Fetch(int row); + void SetMaxFields(int fields) { max = fields; }; + void SetResultSet(void* resultsettoken); - const char *operator[](int whichfield); - const char *operator[](const char *fieldname); + int Fetch(int row); - int GetInt(int whichfield); - int GetInt(const char *fieldname); + const char *operator[](int whichfield); + const char *operator[](const char *fieldname); - unsigned long GetUInt32(int whichfield); - unsigned long GetUInt32(const char *fieldname); + int GetInt(int whichfield); + int GetInt(const char *fieldname); - float GetFloat(int whichfield); - float GetFloat(const char *fieldname); + unsigned long GetUInt32(int whichfield); + unsigned long GetUInt32(const char *fieldname); - uint64 GetUInt64(int whichfield); - uint64 GetUInt64(const char *fieldname); + float GetFloat(int whichfield); + float GetFloat(const char *fieldname); - uint64 stringtouint64(const char *stringbuf); - const char *uint64tostring(uint64 value,char *stringbuf,int buflen); -}; + uint64 GetUInt64(int whichfield); + uint64 GetUInt64(const char *fieldname); -class psResultSet : public iResultSet -{ -protected: - PGresult *rs; - unsigned long rows, fields, current; - psResultRow row; + uint64 stringtouint64(const char *stringbuf); + const char *uint64tostring(uint64 value,char *stringbuf,int buflen); + }; -public: - psResultSet(PGresult *res); - virtual ~psResultSet(); + class psResultSet : public iResultSet + { + protected: + PGresult *rs; + unsigned long rows, fields, current; + psResultRow row; - void Release(void) { delete this; }; + public: + psResultSet(PGresult *res); + virtual ~psResultSet(); - iResultRow& operator[](unsigned long whichrow); + void Release(void) { delete this; }; - unsigned long Count(void) { return rows; }; -}; + iResultRow& operator[](unsigned long whichrow); -class dbRecord : public iRecord -{ -protected: - enum FIELDTYPE { SQL_TYPE_FLOAT, SQL_TYPE_INT, SQL_TYPE_STRING, SQL_TYPE_NULL }; + unsigned long Count(void) { return rows; }; + }; - typedef struct + class dbRecord : public iRecord { - float fValue; - int iValue; - csString sValue; - FIELDTYPE type; - } StatField; - const char* table; - const char* idfield; - - PGconn *conn; - int *stmtNum; - - psStringArray command; - bool prepared; - - csString stmt; - - unsigned int index; - unsigned int count; - - // Useful for debugging - LogCSV* logcsv; - const char* file; - unsigned int line; - - StatField* temp; - - virtual void AddToStatement(const char* fname) = 0; - - virtual void SetID(uint32 uid) = 0; - -public: - dbRecord(PGconn* db, int *StmtNum, const char* Table, const char* Idfield, unsigned int count, LogCSV* logcsv, const char* file, unsigned int line) - { - conn = db; - table = Table; - idfield = Idfield; - temp = new StatField[count]; - index = 0; - this->count = count; - this->logcsv = logcsv; - this->file = file; - this->line = line; - stmtNum = StmtNum; - //stmt = NULL; - prepared = false; - } - - virtual ~dbRecord() - { - //sqlite3_finalize(stmt); - delete[] temp; - } - - void Reset() - { - index = 0; - command.Empty(); //clears the command array to avoid restarting from a wrong position. - //if(stmt) - // sqlite3_reset(stmt); - } + protected: + enum FIELDTYPE { SQL_TYPE_FLOAT, SQL_TYPE_INT, SQL_TYPE_STRING, SQL_TYPE_NULL }; - - void AddField(const char* fname, float fValue); - - void AddField(const char* fname, int iValue); - - void AddField(const char* fname, unsigned int uiValue); - - void AddField(const char* fname, unsigned short usValue); + typedef struct + { + float fValue; + int iValue; + csString sValue; + FIELDTYPE type; + } StatField; + const char* table; + const char* idfield; + + PGconn *conn; + int *stmtNum; + + psStringArray command; + bool prepared; + + csString stmt; + + unsigned int index; + unsigned int count; + + // Useful for debugging + LogCSV* logcsv; + const char* file; + unsigned int line; + + StatField* temp; + + virtual void AddToStatement(const char* fname) = 0; + + virtual void SetID(uint32 uid) = 0; + + public: + dbRecord(PGconn* db, int *StmtNum, const char* Table, const char* Idfield, unsigned int count, LogCSV* logcsv, const char* file, unsigned int line) + { + conn = db; + table = Table; + idfield = Idfield; + temp = new StatField[count]; + index = 0; + this->count = count; + this->logcsv = logcsv; + this->file = file; + this->line = line; + stmtNum = StmtNum; + prepared = false; + } + + virtual ~dbRecord() + { + delete[] temp; + } + + void Reset() + { + index = 0; + command.Empty(); //clears the command array to avoid restarting from a wrong position. + } + + void AddField(const char* fname, float fValue); + + void AddField(const char* fname, int iValue); + + void AddField(const char* fname, unsigned int uiValue); + + void AddField(const char* fname, unsigned short usValue); - void AddField(const char* fname, const char* sValue); + void AddField(const char* fname, const char* sValue); - void AddFieldNull(const char* fname); - - virtual bool Prepare() = 0; + void AddFieldNull(const char* fname); + + virtual bool Prepare() = 0; - virtual bool Execute(uint32 uid); -}; + virtual bool Execute(uint32 uid); + }; -class dbInsert : public dbRecord -{ - virtual void AddToStatement(const char* fname) + class dbInsert : public dbRecord { - if(!prepared) - command.Push(fname); - } - - virtual void SetID(uint32 uid) { }; - -public: - dbInsert(PGconn* db, int *StmtNum, const char* Table, unsigned int count, LogCSV* logcsv, const char* file, unsigned int line) - : dbRecord(db, StmtNum, Table, "", count, logcsv, file, line) { } - - virtual bool Prepare(); -}; + virtual void AddToStatement(const char* fname) + { + if(!prepared) + command.Push(fname); + } + + virtual void SetID(uint32 uid) { }; + + public: + dbInsert(PGconn* db, int *StmtNum, const char* Table, unsigned int count, LogCSV* logcsv, const char* file, unsigned int line) + : dbRecord(db, StmtNum, Table, "", count, logcsv, file, line) { } + + virtual bool Prepare(); + }; -class dbUpdate : public dbRecord -{ - virtual void AddToStatement(const char* fname) + class dbUpdate : public dbRecord { - if(!prepared) - command.FormatPush("%s = $", fname); - } - - virtual void SetID(uint32 uid) - { - temp[index].iValue = uid; - temp[index].type = SQL_TYPE_INT; - index++; - } -public: - dbUpdate(PGconn* db, int *StmtNum, const char* Table, const char* Idfield, unsigned int count, LogCSV* logcsv, const char* file, unsigned int line) - : dbRecord(db, StmtNum, Table, Idfield, count, logcsv, file, line) { } - virtual bool Prepare(); + virtual void AddToStatement(const char* fname) + { + if(!prepared) + command.FormatPush("%s = $", fname); + } + + virtual void SetID(uint32 uid) + { + temp[index].iValue = uid; + temp[index].type = SQL_TYPE_INT; + index++; + } + public: + dbUpdate(PGconn* db, int *StmtNum, const char* Table, const char* Idfield, unsigned int count, LogCSV* logcsv, const char* file, unsigned int line) + : dbRecord(db, StmtNum, Table, Idfield, count, logcsv, file, line) { } + virtual bool Prepare(); -}; - - + }; } CS_PLUGIN_NAMESPACE_END(dbpostgresql) Modified: trunk/src/server/database/sqlite3/dal.h =================================================================== --- trunk/src/server/database/sqlite3/dal.h 2010-11-18 09:27:41 UTC (rev 6401) +++ trunk/src/server/database/sqlite3/dal.h 2010-11-18 09:30:05 UTC (rev 6402) @@ -293,7 +293,6 @@ virtual bool Prepare(); }; - } CS_PLUGIN_NAMESPACE_END(dbsqlite3) #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |