) { try { finalize(); } catch (...) { } } CppSQLite3Table& CppSQLite3Table::operator=(const CppSQLite3Table& rTable) { try { finalize(); } catch (...) { } mpaszResults = rTable.mpaszResults; // Only one object can own the results const_cast
(rTable).mpaszResults = 0; mnRows = rTable.mnRows; mnCols = rTable.mnCols; mnCurrentRow = rTable.mnCurrentRow; return *this; } void CppSQLite3Table::finalize() { if (mpaszResults) { sqlite3_free_table(mpaszResults); mpaszResults = 0; } } int CppSQLite3Table::numFields() { checkResults(); return mnCols; } int CppSQLite3Table::numRows() { checkResults(); return mnRows; } const char* CppSQLite3Table::fieldValue(int nField) { checkResults(); if (nField < 0 || nField > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } int nIndex = (mnCurrentRow*mnCols) + mnCols + nField; return mpaszResults[nIndex]; } const char* CppSQLite3Table::fieldValue(const char* szField) { checkResults(); if (szField) { for (int nField = 0; nField < mnCols; nField++) { if (strcmp(szField, mpaszResults[nField]) == 0) { int nIndex = (mnCurrentRow*mnCols) + mnCols + nField; return mpaszResults[nIndex]; } } } throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field name requested", DONT_DELETE_MSG); } int CppSQLite3Table::getIntField(int nField, int nNullValue/*=0*/) { if (fieldIsNull(nField)) { return nNullValue; } else { return atoi(fieldValue(nField)); } } int CppSQLite3Table::getIntField(const char* szField, int nNullValue/*=0*/) { if (fieldIsNull(szField)) { return nNullValue; } else { return atoi(fieldValue(szField)); } } double CppSQLite3Table::getFloatField(int nField, double fNullValue/*=0.0*/) { if (fieldIsNull(nField)) { return fNullValue; } else { return atof(fieldValue(nField)); } } double CppSQLite3Table::getFloatField(const char* szField, double fNullValue/*=0.0*/) { if (fieldIsNull(szField)) { return fNullValue; } else { return atof(fieldValue(szField)); } } const char* CppSQLite3Table::getStringField(int nField, const char* szNullValue/*=""*/) { if (fieldIsNull(nField)) { return szNullValue; } else { return fieldValue(nField); } } const char* CppSQLite3Table::getStringField(const char* szField, const char* szNullValue/*=""*/) { if (fieldIsNull(szField)) { return szNullValue; } else { return fieldValue(szField); } } bool CppSQLite3Table::fieldIsNull(int nField) { checkResults(); return (fieldValue(nField) == 0); } bool CppSQLite3Table::fieldIsNull(const char* szField) { checkResults(); return (fieldValue(szField) == 0); } const char* CppSQLite3Table::fieldName(int nCol) { checkResults(); if (nCol < 0 || nCol > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } return mpaszResults[nCol]; } void CppSQLite3Table::setRow(int nRow) { checkResults(); if (nRow < 0 || nRow > mnRows-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid row index requested", DONT_DELETE_MSG); } mnCurrentRow = nRow; } void CppSQLite3Table::checkResults() { if (mpaszResults == 0) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Null Results pointer", DONT_DELETE_MSG); } } //////////////////////////////////////////////////////////////////////////////// CppSQLite3Statement::CppSQLite3Statement() { mpDB = 0; mpVM = 0; } CppSQLite3Statement::CppSQLite3Statement(const CppSQLite3Statement& rStatement) { mpDB = rStatement.mpDB; mpVM = rStatement.mpVM; // Only one object can own VM const_cast
(rStatement).mpVM = 0; } CppSQLite3Statement::CppSQLite3Statement(sqlite3* pDB, sqlite3_stmt* pVM) { mpDB = pDB; mpVM = pVM; } CppSQLite3Statement::~CppSQLite3Statement() { try { finalize(); } catch (...) { } } CppSQLite3Statement& CppSQLite3Statement::operator=(const CppSQLite3Statement& rStatement) { mpDB = rStatement.mpDB; mpVM = rStatement.mpVM; // Only one object can own VM const_cast
(rStatement).mpVM = 0; return *this; } int CppSQLite3Statement::execDML() { checkDB(); checkVM(); const char* szError=0; int nRet = sqlite3_step(mpVM); if (nRet == SQLITE_DONE) { int nRowsChanged = sqlite3_changes(mpDB); nRet = sqlite3_reset(mpVM); if (nRet != SQLITE_OK) { szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } return nRowsChanged; } else { nRet = sqlite3_reset(mpVM); szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } } CppSQLite3Query CppSQLite3Statement::execQuery() { checkDB(); checkVM(); int nRet = sqlite3_step(mpVM); if (nRet == SQLITE_DONE) { // no rows return CppSQLite3Query(mpDB, mpVM, true/*eof*/, false); } else if (nRet == SQLITE_ROW) { // at least 1 row return CppSQLite3Query(mpDB, mpVM, false/*eof*/, false); } else { nRet = sqlite3_reset(mpVM); const char* szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } } void CppSQLite3Statement::bind(int nParam, const char* szValue) { checkVM(); int nRes = sqlite3_bind_text(mpVM, nParam, szValue, -1, SQLITE_TRANSIENT); if (nRes != SQLITE_OK) { thr |