forked from github/server
almost have sqlite storage working (in memory, not file).
but test_teach_magic crashes.
This commit is contained in:
parent
0cd9651690
commit
89bf17cdca
|
@ -7,6 +7,7 @@
|
||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -20,9 +21,26 @@ order_data *db_load_order(int id)
|
||||||
{
|
{
|
||||||
if (id > 0) {
|
if (id > 0) {
|
||||||
order_data * od = NULL;
|
order_data * od = NULL;
|
||||||
odata_create(&od, 0, NULL);
|
int err;
|
||||||
|
|
||||||
|
err = sqlite3_reset(g_stmt_select);
|
||||||
|
assert(err == SQLITE_OK);
|
||||||
|
err = sqlite3_bind_int(g_stmt_select, 1, id);
|
||||||
|
assert(err == SQLITE_OK);
|
||||||
|
do {
|
||||||
|
err = sqlite3_step(g_stmt_select);
|
||||||
|
if (err == SQLITE_ROW) {
|
||||||
|
const unsigned char *text;
|
||||||
|
int bytes;
|
||||||
|
bytes = sqlite3_column_bytes(g_stmt_select, 0);
|
||||||
|
assert(bytes > 0);
|
||||||
|
text = sqlite3_column_text(g_stmt_select, 0);
|
||||||
|
odata_create(&od, (size_t)bytes, (const char *)text);
|
||||||
return od;
|
return od;
|
||||||
}
|
}
|
||||||
|
} while (err == SQLITE_ROW);
|
||||||
|
assert(err == SQLITE_DONE);
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,12 +48,16 @@ int db_save_order(order_data *od)
|
||||||
{
|
{
|
||||||
if (od->_str) {
|
if (od->_str) {
|
||||||
int err;
|
int err;
|
||||||
|
sqlite3_int64 id;
|
||||||
err = sqlite3_reset(g_stmt_insert);
|
err = sqlite3_reset(g_stmt_insert);
|
||||||
assert(err == SQLITE_OK);
|
assert(err == SQLITE_OK);
|
||||||
err = sqlite3_bind_text(g_stmt_insert, 1, od->_str, -1, SQLITE_STATIC);
|
err = sqlite3_bind_text(g_stmt_insert, 1, od->_str, -1, SQLITE_STATIC);
|
||||||
assert(err == SQLITE_OK);
|
assert(err == SQLITE_OK);
|
||||||
err = sqlite3_step(g_stmt_insert);
|
err = sqlite3_step(g_stmt_insert);
|
||||||
assert(err == SQLITE_DONE);
|
assert(err == SQLITE_DONE);
|
||||||
|
id = sqlite3_last_insert_rowid(g_db);
|
||||||
|
assert(id <= INT_MAX);
|
||||||
|
return (int)id;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -50,12 +72,16 @@ void db_open(void)
|
||||||
assert(err == SQLITE_OK);
|
assert(err == SQLITE_OK);
|
||||||
err = sqlite3_prepare_v2(g_db, "INSERT INTO orders (data) VALUES (?)", -1, &g_stmt_insert, NULL);
|
err = sqlite3_prepare_v2(g_db, "INSERT INTO orders (data) VALUES (?)", -1, &g_stmt_insert, NULL);
|
||||||
assert(err == SQLITE_OK);
|
assert(err == SQLITE_OK);
|
||||||
|
err = sqlite3_prepare_v2(g_db, "SELECT data FROM orders WHERE id = ?", -1, &g_stmt_select, NULL);
|
||||||
|
assert(err == SQLITE_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void db_close(void)
|
void db_close(void)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
err = sqlite3_finalize(g_stmt_select);
|
||||||
|
assert(err == SQLITE_OK);
|
||||||
err = sqlite3_finalize(g_stmt_insert);
|
err = sqlite3_finalize(g_stmt_insert);
|
||||||
assert(err == SQLITE_OK);
|
assert(err == SQLITE_OK);
|
||||||
err = sqlite3_close(g_db);
|
err = sqlite3_close(g_db);
|
||||||
|
|
|
@ -371,7 +371,7 @@ int teach_cmd(unit * teacher, struct order *ord)
|
||||||
token = getstrtoken();
|
token = getstrtoken();
|
||||||
|
|
||||||
/* Beginne die Fehlermeldung */
|
/* Beginne die Fehlermeldung */
|
||||||
if (isparam(token, teacher->faction->locale, P_TEMP)) {
|
if (token && isparam(token, teacher->faction->locale, P_TEMP)) {
|
||||||
token = getstrtoken();
|
token = getstrtoken();
|
||||||
sprintf(tbuf, "%s %s", LOC(teacher->faction->locale,
|
sprintf(tbuf, "%s %s", LOC(teacher->faction->locale,
|
||||||
parameters[P_TEMP]), token);
|
parameters[P_TEMP]), token);
|
||||||
|
|
Loading…
Reference in New Issue