diff options
Diffstat (limited to 'plugins/Import/src/dbrw/dbintf.h')
-rw-r--r-- | plugins/Import/src/dbrw/dbintf.h | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/plugins/Import/src/dbrw/dbintf.h b/plugins/Import/src/dbrw/dbintf.h new file mode 100644 index 0000000000..801377fdde --- /dev/null +++ b/plugins/Import/src/dbrw/dbintf.h @@ -0,0 +1,155 @@ +/* + +Import plugin for Miranda NG + +Copyright (c) 2012-18 Miranda NG team (https://miranda-ng.org) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#pragma once + +enum SQL_CTC_STMT +{ + SQL_CTC_STMT_COUNT = 0, + SQL_CTC_STMT_EXISTS, + SQL_CTC_STMT_NUM +}; + +static char *ctc_stmts[SQL_CTC_STMT_NUM] = +{ + "SELECT count(*) FROM dbrw_contacts;", + "SELECT id FROM dbrw_contacts WHERE id = ? LIMIT 1;" +}; + +enum SQL_EVT_STMT +{ + SQL_EVT_STMT_COUNT = 0, + SQL_EVT_STMT_BLOBSIZE, + SQL_EVT_STMT_GET, + SQL_EVT_STMT_GETFLAGS, + SQL_EVT_STMT_GETCONTACT, + SQL_EVT_STMT_FINDFIRST, + SQL_EVT_STMT_FINDFIRSTUNREAD, + SQL_EVT_STMT_FINDLAST, + SQL_EVT_STMT_FINDNEXT, + SQL_EVT_STMT_FINDPREV, + SQL_EVT_STMT_NUM +}; + +static char *evt_stmts[SQL_EVT_STMT_NUM] = +{ + "SELECT count(*) FROM dbrw_events where contactid = ?;", + "SELECT blobsize FROM dbrw_events where id = ? LIMIT 1;", + "SELECT * FROM dbrw_events where id = ? LIMIT 1;", + "SELECT flags FROM dbrw_events where id = ? LIMIT 1;", + "SELECT contactid FROM dbrw_events where id = ? LIMIT 1;", + "SELECT id FROM dbrw_events where contactid = ? ORDER by id LIMIT 1;", + "SELECT flags, id FROM dbrw_events where contactid = ? ORDER by id;", + "SELECT id FROM dbrw_events where contactid = ? ORDER by id DESC;", + "SELECT id FROM dbrw_events where contactid = ? AND id > ? ORDER by id LIMIT 1;", + "SELECT id FROM dbrw_events where contactid = ? AND id < ? ORDER by id DESC LIMIT 1;" +}; + +enum SQL_SET_STMT +{ + SQL_SET_STMT_READ = 0, + SQL_SET_STMT_ENUM, + SQL_SET_STMT_ENUMMODULES, + SQL_SET_STMT_SETTINGCHECK, + SQL_SET_STMT_NUM +}; + +static char *set_stmts[SQL_SET_STMT_NUM] = +{ + "SELECT type, val FROM dbrw_settings WHERE setting = ? AND module = ? AND id = ? LIMIT 1;", + "SELECT setting from dbrw_settings where id = ? AND module = ? ORDER by setting;", + "SELECT DISTINCT module from dbrw_settings;", + "SELECT count(*) FROM dbrw_settings WHERE setting = ? AND module = ? AND id = ?;", +}; + +struct TSqlMessage { + int op; + sqlite3 *pDb; + sqlite3_stmt *pStmt; + int retCode; + const char *zIn; + HANDLE hDoneEvent; +}; + +struct CDbxSQLite : public MDatabaseCommon, public MZeroedObject +{ +private: + sqlite3 *m_sqlite; + HWND m_hAPCWindow; + + int sql_prepare_len; + char **sql_prepare_text; + sqlite3_stmt ***sql_prepare_stmt; + sqlite3_stmt *ctc_stmts_prep[SQL_CTC_STMT_NUM] = { 0 }; + sqlite3_stmt *evt_stmts_prep[SQL_EVT_STMT_NUM] = { 0 }; + sqlite3_stmt *set_stmts_prep[SQL_SET_STMT_NUM] = { 0 }; + + void sql_prepare_add(char **text, sqlite3_stmt **stmts, int len); + void sql_prepare_statements(); + static void CALLBACK sql_server_sync_apc(DWORD dwParam); + void sql_server_sync(TSqlMessage *msg); + int sql_step(sqlite3_stmt *stmt); + int sql_reset(sqlite3_stmt *stmt); + int sql_exec(sqlite3 *sql, const char *query); + int sql_open(const char *path, sqlite3 **sql); + int sql_close(sqlite3 *sql); + int sql_prepare(sqlite3 *sql, const char *query, sqlite3_stmt **stmt); + int sql_finalize(sqlite3_stmt *stmt); + +public: + CDbxSQLite(); + ~CDbxSQLite(); + + int Open(const wchar_t *profile); + + STDMETHODIMP_(BOOL) IsRelational(void) override { return FALSE; } + STDMETHODIMP_(void) SetCacheSafetyMode(BOOL) override; + + STDMETHODIMP_(LONG) GetContactCount(void) override; + STDMETHODIMP_(LONG) DeleteContact(MCONTACT contactID) override; + STDMETHODIMP_(MCONTACT) AddContact(void) override; + STDMETHODIMP_(BOOL) IsDbContact(MCONTACT contactID) override; + STDMETHODIMP_(LONG) GetContactSize(void) override; + + STDMETHODIMP_(LONG) GetEventCount(MCONTACT contactID) override; + STDMETHODIMP_(MEVENT) AddEvent(MCONTACT contactID, DBEVENTINFO *dbe) override; + STDMETHODIMP_(BOOL) DeleteEvent(MCONTACT contactID, MEVENT hDbEvent) override; + STDMETHODIMP_(LONG) GetBlobSize(MEVENT hDbEvent) override; + STDMETHODIMP_(BOOL) GetEvent(MEVENT hDbEvent, DBEVENTINFO *dbe) override; + STDMETHODIMP_(BOOL) MarkEventRead(MCONTACT contactID, MEVENT hDbEvent) override; + STDMETHODIMP_(MCONTACT) GetEventContact(MEVENT hDbEvent) override; + STDMETHODIMP_(MEVENT) FindFirstEvent(MCONTACT contactID) override; + STDMETHODIMP_(MEVENT) FindFirstUnreadEvent(MCONTACT contactID) override; + STDMETHODIMP_(MEVENT) FindLastEvent(MCONTACT contactID) override; + STDMETHODIMP_(MEVENT) FindNextEvent(MCONTACT contactID, MEVENT hDbEvent) override; + STDMETHODIMP_(MEVENT) FindPrevEvent(MCONTACT contactID, MEVENT hDbEvent) override; + + STDMETHODIMP_(BOOL) EnumModuleNames(DBMODULEENUMPROC pFunc, void *pParam) override; + + STDMETHODIMP_(BOOL) GetContactSettingWorker(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv, int isStatic) override; + STDMETHODIMP_(BOOL) WriteContactSetting(MCONTACT contactID, DBCONTACTWRITESETTING *dbcws) override; + STDMETHODIMP_(BOOL) DeleteContactSetting(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting) override; + STDMETHODIMP_(BOOL) EnumContactSettings(MCONTACT hContact, DBSETTINGENUMPROC pfnEnumProc, const char *szModule, void *param) override; + + STDMETHODIMP_(BOOL) MetaMergeHistory(DBCachedContact *ccMeta, DBCachedContact *ccSub) override; + STDMETHODIMP_(BOOL) MetaSplitHistory(DBCachedContact *ccMeta, DBCachedContact *ccSub) override; +}; |