forked from github/server
another test. moving some deckchairs around.
This commit is contained in:
parent
6d79f85628
commit
4257a9891c
5 changed files with 46 additions and 57 deletions
|
@ -173,19 +173,6 @@ void free_orders(order ** olist)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *mkdata(order_data **pdata, size_t len, const char *str)
|
|
||||||
{
|
|
||||||
order_data *data;
|
|
||||||
char *result;
|
|
||||||
data = malloc(sizeof(order_data) + len + 1);
|
|
||||||
result = (char *)(data + 1);
|
|
||||||
data->_refcount = 1;
|
|
||||||
data->_str = (len > 0) ? result : NULL;
|
|
||||||
if (str) strcpy(result, str);
|
|
||||||
if (pdata) *pdata = data;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int create_data(keyword_t kwd, const char *s,
|
static int create_data(keyword_t kwd, const char *s,
|
||||||
const struct locale *lang)
|
const struct locale *lang)
|
||||||
{
|
{
|
||||||
|
@ -206,7 +193,7 @@ static int create_data(keyword_t kwd, const char *s,
|
||||||
}
|
}
|
||||||
/* TODO: between mkdata and odata_release, this object is very
|
/* TODO: between mkdata and odata_release, this object is very
|
||||||
* short-lived. */
|
* short-lived. */
|
||||||
mkdata(&data, strlen(s), s);
|
odata_create(&data, strlen(s), s);
|
||||||
id = odata_save(data);
|
id = odata_save(data);
|
||||||
odata_release(data);
|
odata_release(data);
|
||||||
return id;
|
return id;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <critbit.h>
|
#include <critbit.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
static critbit_tree cb_orders = { 0 };
|
static critbit_tree cb_orders = { 0 };
|
||||||
static int auto_id = 0;
|
static int auto_id = 0;
|
||||||
|
@ -32,6 +33,19 @@ order_data *odata_load(int id)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void odata_create(order_data **pdata, size_t len, const char *str)
|
||||||
|
{
|
||||||
|
order_data *data;
|
||||||
|
char *result;
|
||||||
|
|
||||||
|
data = malloc(sizeof(order_data) + len + 1);
|
||||||
|
data->_refcount = 1;
|
||||||
|
result = (char *)(data + 1);
|
||||||
|
data->_str = (len > 0) ? result : NULL;
|
||||||
|
if (str) strcpy(result, str);
|
||||||
|
if (pdata) *pdata = data;
|
||||||
|
}
|
||||||
|
|
||||||
int odata_save(order_data *od)
|
int odata_save(order_data *od)
|
||||||
{
|
{
|
||||||
if (od->_str) {
|
if (od->_str) {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef H_ORDERDB
|
#ifndef H_ORDERDB
|
||||||
#define H_ORDERDB
|
#define H_ORDERDB
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -21,9 +23,11 @@ extern "C" {
|
||||||
db_backend orderdb_open(db_backend choices[]);
|
db_backend orderdb_open(db_backend choices[]);
|
||||||
void orderdb_close(void);
|
void orderdb_close(void);
|
||||||
|
|
||||||
|
void odata_create(order_data **pdata, size_t len, const char *str);
|
||||||
|
void odata_release(order_data * od);
|
||||||
|
|
||||||
order_data *odata_load(int id);
|
order_data *odata_load(int id);
|
||||||
int odata_save(order_data *od);
|
int odata_save(order_data *od);
|
||||||
void odata_release(order_data * od);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include <CuTest.h>
|
#include <CuTest.h>
|
||||||
#include <tests.h>
|
#include <tests.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
static void test_orderdb_open_close(CuTest *tc) {
|
static void test_orderdb_open_close(CuTest *tc) {
|
||||||
db_backend choices[] = { DB_MEMORY, DB_NONE };
|
db_backend choices[] = { DB_MEMORY, DB_NONE };
|
||||||
db_backend nochoice[] = { DB_SQLITE, DB_NONE };
|
db_backend nochoice[] = { DB_SQLITE, DB_NONE };
|
||||||
|
@ -18,10 +20,34 @@ static void test_orderdb_open_close(CuTest *tc) {
|
||||||
orderdb_close();
|
orderdb_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_odata_save_load(CuTest *tc) {
|
||||||
|
db_backend choices[] = { DB_MEMORY, DB_NONE };
|
||||||
|
order_data *od;
|
||||||
|
int id;
|
||||||
|
const char * s = "GIB enno 1 Hodor";
|
||||||
|
|
||||||
|
CuAssertIntEquals(tc, DB_MEMORY, orderdb_open(choices));
|
||||||
|
|
||||||
|
odata_create(&od, strlen(s) + 1, s);
|
||||||
|
CuAssertTrue(tc, od->_refcount >= 1);
|
||||||
|
id = odata_save(od);
|
||||||
|
odata_release(od);
|
||||||
|
CuAssertTrue(tc, id != 0);
|
||||||
|
|
||||||
|
od = odata_load(id);
|
||||||
|
CuAssertPtrNotNull(tc, od);
|
||||||
|
CuAssertTrue(tc, od->_refcount >= 1);
|
||||||
|
CuAssertStrEquals(tc, s, od->_str);
|
||||||
|
odata_release(od);
|
||||||
|
|
||||||
|
orderdb_close();
|
||||||
|
}
|
||||||
|
|
||||||
CuSuite *get_orderdb_suite(void)
|
CuSuite *get_orderdb_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
SUITE_ADD_TEST(suite, test_orderdb_open_close);
|
SUITE_ADD_TEST(suite, test_orderdb_open_close);
|
||||||
|
SUITE_ADD_TEST(suite, test_odata_save_load);
|
||||||
|
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
42
src/sqlite.c
42
src/sqlite.c
|
@ -23,48 +23,6 @@ faction *get_faction_by_id(int uid)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
typedef struct stmt_cache {
|
|
||||||
sqlite3 *db;
|
|
||||||
sqlite3_stmt *stmt;
|
|
||||||
const char *sql;
|
|
||||||
int inuse;
|
|
||||||
} stmt_cache;
|
|
||||||
|
|
||||||
#define MAX_STMT_CACHE 64
|
|
||||||
static stmt_cache cache[MAX_STMT_CACHE];
|
|
||||||
static int cache_insert;
|
|
||||||
|
|
||||||
static sqlite3_stmt *stmt_cache_get(sqlite3 * db, const char *sql)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
sqlite3_stmt *stmt;
|
|
||||||
|
|
||||||
for (i = 0; i != MAX_STMT_CACHE && cache[i].db; ++i) {
|
|
||||||
if (cache[i].sql == sql && cache[i].db == db) {
|
|
||||||
cache[i].inuse = 1;
|
|
||||||
stmt = cache[i].stmt;
|
|
||||||
sqlite3_reset(stmt);
|
|
||||||
sqlite3_clear_bindings(stmt);
|
|
||||||
return stmt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == MAX_STMT_CACHE) {
|
|
||||||
while (cache[cache_insert].inuse) {
|
|
||||||
cache[cache_insert].inuse = 0;
|
|
||||||
cache_insert = (cache_insert + 1) & (MAX_STMT_CACHE - 1);
|
|
||||||
}
|
|
||||||
i = cache_insert;
|
|
||||||
stmt = cache[i].stmt;
|
|
||||||
sqlite3_finalize(stmt);
|
|
||||||
}
|
|
||||||
cache[i].inuse = 1;
|
|
||||||
cache[i].db = db;
|
|
||||||
cache[i].sql = sql;
|
|
||||||
sqlite3_prepare_v2(db, sql, -1, &cache[i].stmt, NULL);
|
|
||||||
return cache[i].stmt;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
typedef struct db_faction {
|
typedef struct db_faction {
|
||||||
int uid;
|
int uid;
|
||||||
int no;
|
int no;
|
||||||
|
|
Loading…
Reference in a new issue