00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __CALDB_H__
00025 #define __CALDB_H__
00026
00027
00028 #include <sqlite3.h>
00029
00030
00031 #include <dbus/dbus.h>
00032 #include <string>
00033 using namespace std;
00034 using std::string;
00035
00036
00037
00038 #ifndef _QRESULT__
00039 #define _QRESULT__
00040 typedef struct _QueryResult QueryResult;
00041
00042 struct _QueryResult {
00043 public:
00044 char **pResult;
00045 int iRow;
00046 int iColumn;
00047 };
00048 #endif
00049
00055 class CCalendarDB {
00056
00057 public:
00064 int setAutocommitOff();
00073 int initDB();
00074
00084 void setApplicationName (string appName);
00085
00092 sqlite3 *getDb();
00093
00102 int insertRows(sqlite3_stmt* preparedStmt,int& iSqliteError);
00103
00111 bool updateDB(sqlite3_stmt * preparedStmt,int& iSqliteError);
00120 void sqliteErrorMapper(int iSqliteError, int& pErrorCode );
00121
00122
00129 bool rollbackDB();
00130
00137 bool commitDB(string szMessage);
00138
00145 bool closeDB();
00146
00154 QueryResult *getRecords(char *pQuery, int& iSqliteError);
00155
00164 static CCalendarDB *Instance();
00165
00166
00167 bool sendDBusMessage (string szSendMessage);
00168
00169 bool initializeDBus ();
00170
00171
00172 ~CCalendarDB();
00173 void InstanceDestroy();
00174
00181 int execSQL(const char *pQuery);
00182
00183 private:
00184
00192 CCalendarDB();
00193
00194
00195
00196 CCalendarDB(CCalendarDB & calendardb);
00197
00198
00199 CCalendarDB & operator=(CCalendarDB & calendardb);
00200
00201 sqlite3 * pDb;
00202 DBusConnection *pBus;
00203 static CCalendarDB *pCalendarDb;
00204
00205 void sem_p(void);
00206
00207 void sem_v(void);
00208
00209 int sem_id;
00210
00216 static bool validateDbFile(const std::string& szDbFilename);
00217
00223 static bool moveToBackup(const std::string& szDbFilename);
00224
00225
00230 bool checkTimezoneTable();
00231
00237 bool fillTimezoneTable(int& iSqliteError);
00238
00253 bool insertTimezoneInfo(string tzId,
00254 string location,
00255 time_t dtstartStd,
00256 time_t dtstartDst,
00257 int offsetStd,
00258 int offsetDst,
00259 int dstflag,
00260 string tzname,
00261 string rruleStd,
00262 string rruleDst);
00263
00264 };
00265
00266 #endif