#include #include #include #include #include #include "json-c/json.h" static sqlite3 *db; static int callback(void *param, int argc, char **argv, char **azColName) { int i; json_object *j_array = (json_object *)param; json_object *j_cfg = json_object_new_object(); for (i = 0; i < argc; i++) { if (azColName[i][0] == 'i') { json_object_object_add(j_cfg, azColName[i], json_object_new_int(atoi(argv[i]))); } else { json_object_object_add(j_cfg, azColName[i], json_object_new_string(argv[i] ? argv[i] : "")); } } json_object_array_add(j_array, j_cfg); return 0; } char *rkdb_sql(char *sql) { int rc; char *zErrMsg = 0; json_object *j_cfg = json_object_new_object(); json_object *j_array = json_object_new_array(); rc = sqlite3_exec(db, sql, callback, (void*)j_array, &zErrMsg); json_object_object_add(j_cfg, "iReturn", json_object_new_int(rc)); if (rc != SQLITE_OK) { printf("SQL error: %s\n", zErrMsg); json_object_object_add(j_cfg, "sErrMsg", json_object_new_string(zErrMsg)); sqlite3_free(zErrMsg); } else { json_object_object_add(j_cfg, "sErrMsg", json_object_new_string("")); //printf("Operation done successfully\n"); } json_object_object_add(j_cfg, "jData", j_array); char *ret = g_strdup((char *)json_object_get_string(j_cfg)); json_object_put(j_cfg); return ret; } char *rkdb_drop(char *table) { char *sql = g_strdup_printf("DROP TABLE %s;", table); char *ret = rkdb_sql(sql); g_free(sql); return ret; } char *rkdb_create(char *table, char *col_para) { char *sql = g_strdup_printf("CREATE TABLE %s(%s);", table, col_para); char *ret = rkdb_sql(sql); g_free(sql); return ret; } char *rkdb_insert(char *table, char *cols, char *vals) { char *sql = g_strdup_printf("INSERT INTO %s (%s) VALUES (%s);", table, cols, vals); char *ret = rkdb_sql(sql); g_free(sql); return ret; } char *rkdb_update(char *table, char *set, char *where) { char *sql = g_strdup_printf("UPDATE %s SET %s WHERE %s;", table, set, where); char *ret = rkdb_sql(sql); g_free(sql); return ret; } char *rkdb_delete(char *table, char *where) { char *sql; if (where) sql = g_strdup_printf("DELETE from %s WHERE %s;", table, where); else sql = g_strdup_printf("DELETE from %s;", table); char *ret = rkdb_sql(sql); g_free(sql); return ret; } char *rkdb_select(char *table, char *colname, char *where, char *order, char *limit) { char *sql = NULL; char *tmp; if (colname) sql = g_strdup_printf("SELECT %s from %s", colname, table); else sql = g_strdup_printf("SELECT * from %s", table); if (where) { tmp = sql; sql = g_strdup_printf("%s WHERE %s", tmp, where); g_free(tmp); } if (order) { tmp = sql; sql = g_strdup_printf("%s ORDER BY %s", tmp, order); g_free(tmp); } if (limit) { tmp = sql; sql = g_strdup_printf("%s LIMIT %s", tmp, limit); g_free(tmp); } char *ret = rkdb_sql(sql); g_free(sql); return ret; } int rkdb_init(char *file) { int rc; char *zErrMsg = 0; rc = sqlite3_open(file, &db); assert(!rc); return 0; } void rkdb_deinit(void) { if (db) sqlite3_close(db); db = NULL; }