summaryrefslogtreecommitdiff
path: root/modules/dbsqlite/main.cpp
blob: 6e936d6f5dac25f516ac8ea00169852544d15794 (plain)
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);
}