Thread Rating:
  • 3 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SQLite 0.2
#1
[Image: 56984533031919738211.png]

How to load module:

Add to config
Code:
<module src="SQLite.dll" type="server" /> // For windows
<module src="SQLite.so" type="server" /> // For linux

Functions:
userpointer handler = sqlite3_openDB(string dBname);
bool result = sqlite3_closeDB(userpointer handler);
bool result = sqlite3_exec(userpointer handler, string query);
bool result = sqlite3_execSelect(userpointer handler, string data, string query);
string errMsg = sqlite3_errmsg(userpointer handler);
integer errCode = sqlite3_errcode(userpointer handler);
string errStr = sqlite3_errstr(integer errCode);

Callbacks:
sqlite3_onSelect(string data*, table assocTable);

Example usage:
Squirrel Script
  1. local db;
  2.  
  3. addEventHandler("onInit", function()
  4. {
  5. initAntyCheat(true);
  6.  
  7. dB = sqlite3_openDB("server.db");
  8. });
  9.  
  10. addEventHandler("onPlayerCommand", function(pid, cmd, params)
  11. {
  12. switch(cmd)
  13. {
  14. case "saveme":
  15. saveAccount(pid);
  16. break;
  17.  
  18. case "loadme":
  19. loadAccount(pid);
  20. break;
  21. };
  22. });
  23.  
  24. addEventHandler("sqlite3_onSelect", function(wtfIT, assoc)
  25. {
  26. local subStrings = split(wtfIT, "_");
  27.  
  28. switch(subStrings[0])
  29. {
  30. case "la":
  31. {
  32. giveItem(subStrings[1].tointeger(), Items.id(assoc["instance"]), assoc["amount"].tointeger());
  33. };
  34. };
  35. });
  36.  
  37. function saveAccount(pid)
  38. {
  39. local equipment = getEquipment(pid); //it's function from my anty-cheat (available from forum)
  40.  
  41. local result = sqlite3_exec(dB, format("%s%s';", "SELECT id FROM 'items_", getPlayerName(pid)));
  42.  
  43. if(result != true)
  44. {
  45. sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Save EQ started..");
  46.  
  47. sqlite3_exec(dB, format("CREATE TABLE 'items_%s' ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `instance` TEXT, `amount` INTEGER );", getPlayerName(pid)));
  48.  
  49. foreach(k, v in equipment)
  50. {
  51. if(typeof Items.name(v[0]) == "string")
  52. {
  53. result = sqlite3_exec(dB, format("INSERT INTO 'items_%s' (`instance`, `amount`) VALUES ('%s', %d);", getPlayerName(pid), Items.name(v[0]), v[1]));
  54.  
  55. if(result != true)
  56. {
  57. sendMessageToPlayer(pid, 255, 0, 0, "(SQLITE3): Unexpected error in save eq.");
  58.  
  59. LogString("database", format("SQLITE3 error in save account: '%s'", getPlayerName(pid)));
  60.  
  61. return 1;
  62. };
  63. }
  64. else
  65. {
  66. LogString("database", format("NULL VALUE IN EQ: '%s'", getPlayerName(pid)));
  67.  
  68. return 1;
  69. };
  70. };
  71.  
  72. sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Equipment has been successfully saved");
  73. }
  74. else
  75. {
  76. sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Save EQ started.");
  77.  
  78. sqlite3_exec(dB, format("DELETE FROM 'items_%s';", getPlayerName(pid)));
  79.  
  80. foreach(k, v in equipment)
  81. {
  82. if(typeof Items.name(v[0]) == "string")
  83. {
  84. result = sqlite3_exec(dB, format("INSERT INTO 'items_%s' (`instance`, `amount`) VALUES ('%s', %d);", getPlayerName(pid), Items.name(v[0]), v[1]));
  85.  
  86. if(result != true)
  87. {
  88. sendMessageToPlayer(pid, 255, 0, 0, "(SQLITE3): Unexpected error in save eq.");
  89.  
  90. LogString("database", format("SQLITE3 error in save account: '%s'", getPlayerName(pid)));
  91.  
  92. return 1;
  93. };
  94. }
  95. else
  96. {
  97. LogString("database", format("NULL VALUE IN EQ: '%s'", getPlayerName(pid)));
  98.  
  99. return 1;
  100. };
  101. };
  102.  
  103. sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Equipment has been successfully saved");
  104. };
  105. };
  106.  
  107. function loadAccount(pid)
  108. {
  109. local result = sqlite3_exec(dB, format("SELECT id FROM 'items_%s';", getPlayerName(pid)));
  110.  
  111. if(result != true)
  112. {
  113. sendMessageToPlayer(pid, 255, 0, 0, "(SQLITE3): Your account doesn't exist in server database.");
  114.  
  115. LogString("database", format("%s try to load data from doesn't exist account", getPlayerName(pid)));
  116. }
  117. else
  118. {
  119. clearInventory(pid); //it's from my AC
  120. callClientFunc(pid, "_clearInventory"); //it's from my AC
  121.  
  122. sqlite3_execSelect(dB, "la_" + pid, format("SELECT * FROM 'items_%s';", getPlayerName(pid)));
  123.  
  124. sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Equipment has been successfully loaded.");
  125. };
  126. };



0.2 Download:
Binares: https://bitbucket.org/Profesores/sqsqlite/downloads/
Source code: https://bitbucket.org/Profesores/sqsqlite/src

* - Data provided in the 2th argument of sqlite3_execSelect()
Reply
#2
Update 0.2:

Changelog:
-Fixed possible stack overflow,
-Staticly linking gcc libs for linux,
-Staticly linking SQLite lib for windows,
-Unification of types.

New functions:
string errMsg = sqlite3_errmsg(userpointer handler);
integer errCode = sqlite3_errcode(userpointer handler);
string errStr = sqlite3_errstr(integer errCode);
Reply


Forum Jump:


Users browsing this thread: