This commit is contained in:
2025-03-28 05:37:22 +01:00
parent 2834e28db2
commit 6834081960
6 changed files with 120 additions and 8 deletions
+39 -2
View File
@@ -7,6 +7,9 @@
const char * db_file = "~/.r.db";
json_object* db_execute(const char *query);
char * db_file_expanded(){
char * expanded = expand_home_directory(db_file);
static char result[4096];
@@ -51,7 +54,7 @@ json_object * db_set(const char *key, const char *value) {
return NULL;
}
char *sql = sqlite3_mprintf("INSERT INTO kv_store (key, value) VALUES (%Q, %Q)", key, value);
char *sql = sqlite3_mprintf("INSERT INTO kv_store (key, value) VALUES (%Q, %Q) ON CONFLICT(key) DO UPDATE SET value = %Q WHERE key = %Q", key, value, value,key);
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
sqlite3_free(sql);
@@ -97,6 +100,11 @@ json_object* db_get(const char *key) {
json_object* db_query(const char *query) {
sqlite3 *db;
sqlite3_stmt *stmt;
if(strncmp(query, "SELECT", 6)){
return db_execute(query);
}
json_object *result = json_object_new_array();
int rc = sqlite3_open(db_file_expanded(), &db);
@@ -138,4 +146,33 @@ json_object* db_query(const char *query) {
}
#endif // DB_UTILS_H
json_object* db_execute(const char *query) {
sqlite3 *db;
char *err_msg = 0;
int rc = sqlite3_open(db_file_expanded(), &db);
json_object *result = json_object_new_object();
if (rc != SQLITE_OK) {
json_object_object_add(result, "error", json_object_new_string("Cannot open database"));
return result;
}
rc = sqlite3_exec(db, query, 0, 0, &err_msg);
if (rc != SQLITE_OK) {
json_object_object_add(result, "error", json_object_new_string(err_msg));
sqlite3_free(err_msg);
} else {
json_object_object_add(result, "success", json_object_new_string("Query executed successfully"));
}
sqlite3_close(db);
return result;
}
char * db_get_schema(){
json_object * tables =db_query("SELECT * FROM sqlite_master WHERE type='table'");
char * result = strdup(json_object_get_string(tables));
json_object_put(tables);
return result;
}
#endif