1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#include <windows.h>
#include <stdio.h>
#include <pluginapi.h>
#include <plugin_helper.h>
#include <db.h>
#include "sqlite3.h"
PLUGINLINK *pluginLink;
sqlite3* db;
char* db_err = 0;
SERVICE dbWriteSetting(WPARAM w, LPARAM l);
SERVICE dbGetSetting(WPARAM w, LPARAM l);
SERVICE dbDeleteSetting(WPARAM w, LPARAM l);
HINSTANCE hInst;
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
hInst = hinstDLL;
return TRUE;
}
PLUGININFO pluginInfo =
{
sizeof(PLUGININFO),
(char*)"SQLite database support plugin",
(char*)"Support for data storage in local sql database through libsqlite",
(char*)"sss",
(char*)"sss123next@list.ru",
PLUGIN_MAKE_VERSION(0,0,0,1),
F_DB_PLUGIN
};
extern "C" __declspec(dllexport) PLUGININFO* SetPluginInfo()
{
return &pluginInfo;
}
extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
pluginLink = link;
CreateServiceFunction("Db/WriteSetting", (SERVICE)dbWriteSetting);
CreateServiceFunction("Db/GetSetting", (SERVICE)dbGetSetting);
CreateServiceFunction("Db/DeleteSetting", (SERVICE)dbDeleteSetting);
if(!sqlite3_open_v2(".\\database.sql3", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL))
MessageBoxA(0, "dbsqlite plugin loaded", "INFO", MB_OK);
return 0;
}
extern "C" int __declspec(dllexport) OnModulesLoaded()
{
sqlite3_exec(db, "CREATE TABLE 'data' (id INTEGER PRYMARY KEY, module TEXT, setting TEXT, string TEXT, number INT, binary BLOB);", 0, 0, &db_err);
sqlite3_exec(db, "CREATE GENERATOR generator_;", 0, 0, &db_err);
sqlite3_exec(db, "CREATE TRIGGER index_updater FOR data BEFORE INSERT POSITION 0 AS BEGIN NEW.id = GEN_ID(generator_, 1) END;", 0, 0, &db_err);
for(;;)
Sleep(1000);
return 0;
}
extern "C" int __declspec(dllexport) Unload()
{
while(sqlite3_close(db) == SQLITE_BUSY)
Sleep(1000);
MessageBoxA(0, "Database succesfuly unloaded", "INFO", MB_OK);
return 0;
}
SERVICE dbWriteSetting(WPARAM w, LPARAM l)
{
PLUGININFO *info = (PLUGININFO*)w;
DATA *data = (DATA*)l;
switch (data->wType)
{
char buf[512], tmp[32];
case D_INT:
itoa((int&)data->pData, tmp, 10);
strcpy(buf, "INSERT INTO 'data' (module, setting, number) VALUES ('");
strcat(buf, info->shortName);
strcat(buf, "', '");
strcat(buf, data->szSetting);
strcat(buf, "', ");
strcat(buf, tmp);
strcat(buf, ");");
sqlite3_exec(db, buf, 0, 0, &db_err);
MessageBoxA(0, db_err, "INFO", MB_OK);
break;
case D_STRING:
strcpy(buf, "INSERT INTO 'data' (module, setting, string) VALUES ('");
strcat(buf, info->shortName);
strcat(buf, "', '");
strcat(buf, data->szSetting);
strcat(buf, "', '");
strcat(buf, (char*)data->pData);
strcat(buf, "');");
sqlite3_exec(db, buf, 0, 0, &db_err);
MessageBoxA(0, db_err, "INFO", MB_OK);
break;
case D_BLOB:
break;
default:
break;
}
}
SERVICE dbGetSetting(WPARAM w, LPARAM l)
{
PLUGININFO *info = (PLUGININFO*)w;
DATA *data = (DATA*)l;
}
SERVICE dbDeleteSetting(WPARAM w, LPARAM l)
{
PLUGININFO *info = (PLUGININFO*)w;
DATA *data = (DATA*)l;
char buf[512];
strcpy(buf, "DELETE FROM data WHERE module = '");
strcat(buf, info->shortName);
strcat(buf, "' AND setting = '");
strcat(buf, data->szSetting);
strcat(buf, "';");
sqlite3_exec(db, buf, 0, 0, &db_err);
MessageBoxA(0, db_err, "INFO", MB_OK);
}
|