00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef KompexSQLiteDatabase_H
00020 #define KompexSQLiteDatabase_H
00021
00022 #include <string>
00023 #include "sqlite3.h"
00024 #include "KompexSQLitePrerequisites.h"
00025
00026 namespace Kompex
00027 {
00028 class _SQLiteWrapperExport SQLiteDatabase
00029 {
00030 public:
00033 SQLiteDatabase();
00034
00054 SQLiteDatabase(const char *filename, int flags, const char *zVfs);
00055
00075 SQLiteDatabase(const std::string &filename, int flags, const char *zVfs);
00076
00080 SQLiteDatabase(const wchar_t *filename);
00081
00083 virtual ~SQLiteDatabase();
00084
00104 void Open(const char *filename, int flags, const char *zVfs);
00105
00125 void Open(const std::string &filename, int flags, const char *zVfs);
00126
00130 void Open(const wchar_t *filename);
00131
00133 void Close();
00134
00136 sqlite3 *GetDatabaseHandle() const {return mDatabaseHandle;}
00138 inline int GetLibVersionNumber() const {return sqlite3_libversion_number();}
00141 int GetDatabaseChanges() const {return sqlite3_changes(mDatabaseHandle);}
00147 int GetTotalDatabaseChanges() const {return sqlite3_total_changes(mDatabaseHandle);}
00151 void InterruptDatabaseOperation() const {sqlite3_interrupt(mDatabaseHandle);}
00155 int GetAutoCommit() const {return sqlite3_get_autocommit(mDatabaseHandle);}
00156
00160 inline void ActivateTracing() const {sqlite3_trace(mDatabaseHandle, &Kompex::SQLiteDatabase::TraceOutput, 0);}
00166 inline void ActivateProfiling() const {sqlite3_profile(mDatabaseHandle, &Kompex::SQLiteDatabase::ProfileOutput, 0);}
00167
00176 inline void SetSoftHeapLimit(int heapLimit) const {sqlite3_soft_heap_limit(heapLimit);}
00177
00183 inline int ReleaseMemory(int bytesOfMemory) const {return sqlite3_release_memory(bytesOfMemory);}
00184
00186 long long GetMemoryUsage() const {return sqlite3_memory_used();}
00187
00190 long long GetMemoryHighwaterMark(bool resetFlag = false) const {return sqlite3_memory_highwater(resetFlag);}
00191
00196 void MoveDatabaseToMemory();
00197
00201 void SaveDatabaseFromMemoryToFile(const std::string &filename = "");
00202
00210 long long GetLastInsertRowId() const {return sqlite3_last_insert_rowid(mDatabaseHandle);}
00211
00212 protected:
00214 static void TraceOutput(void *ptr, const char *sql);
00216 static void ProfileOutput(void* ptr, const char* sql, sqlite3_uint64 time);
00218 static int ProcessDDLRow(void *db, int nColumns, char **values, char **columns);
00220 static int ProcessDMLRow(void *db, int nColumns, char **values, char **columns);
00221
00222 private:
00224 struct sqlite3 *mDatabaseHandle;
00226 std::string mDatabaseFilename;
00228 bool mIsMemoryDatabaseActive;
00229 };
00230
00231 };
00232
00233 #endif // KompexSQLiteDatabase_H