summaryrefslogtreecommitdiff
path: root/modules/dbsqlite/main.cpp
blob: 7db469178d543f662213f17972c6d33eb6050442 (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
125
126
127
128
129
130
131
132
133
134
135
#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 svc_dbWriteSetting(WPARAM w, LPARAM l);
SERVICE svc_dbGetSetting(WPARAM w, LPARAM l);
SERVICE svc_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;
}

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
	for(int i = 0; i < argc; i++)
	{
		MessageBoxA(0, argv[i], azColName[i], MB_OK);
	}
	return 0;
}
	      

extern "C"  int __declspec(dllexport) Load(PLUGINLINK *link) 
{
	pluginLink = link;
	CreateServiceFunction("Db/WriteSetting", (SERVICE)svc_dbWriteSetting);
	CreateServiceFunction("Db/GetSetting", (SERVICE)svc_dbGetSetting);
	CreateServiceFunction("Db/DeleteSetting", (SERVICE)svc_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);", callback, 0, &db_err);
	//some autoindexing code here
	sqlite3_exec(db, "SELECT * FROM data;", callback, 0, &db_err);
	MessageBoxA(0, db_err, "INFO", MB_OK);
	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 svc_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, callback, 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, callback, 0, &db_err);
			MessageBoxA(0, db_err, "INFO", MB_OK);
			break;
		case D_BLOB:
			break;
		default:
			break;
	}
}
SERVICE svc_dbGetSetting(WPARAM w, LPARAM l)
{
	PLUGININFO *info = (PLUGININFO*)w;
	DATA *data = (DATA*)l;
}

SERVICE svc_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, callback, 0, &db_err);
	MessageBoxA(0, db_err, "INFO", MB_OK);
}