summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-05-27 13:51:49 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-05-27 13:51:49 -0400
commit55655bc800d9c417e07e8fb3f3f070817b21d3d9 (patch)
tree37b761582cb97fcfd02a1766407433805b571984
parent5f5c0ec887a4cd7640261250d638300a3ea90d02 (diff)
Get started on get commandHEADmaster
-rw-r--r--src/include/xdbms.c39
-rw-r--r--src/main.c2
2 files changed, 38 insertions, 3 deletions
diff --git a/src/include/xdbms.c b/src/include/xdbms.c
index eb6193e..36ad7da 100644
--- a/src/include/xdbms.c
+++ b/src/include/xdbms.c
@@ -1,9 +1,10 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "engine/engine.h"
-#include "xml/xml.h"
#include "xdbms.h"
+#include "xml/xml.h"
static tablist_t *db;
@@ -25,7 +26,41 @@ void xdb_close(void) {
char *xdb_stmt(char *stmt) {
map_t *decoded = decode(stmt);
- printf("%s\n", encode(decoded));
+
+ if (!strcmp(decoded->tag, "get")) {
+ int id = -1, len = 0;
+ char **keys = NULL;
+ if (decoded->n_attrs > 0)
+ id = atoi(decoded->attrs[0].value);
+ tablist_t *tmp = getkeys(db, id, keys, len);
+ for (int i = 0; i < tmp[0].len; ++i) {
+ printf("{ id: %d ", tmp[0].len > 1 ? i : id);
+ for (int j = 0; tmp[i].tab[j].flag; ++j) {
+ printf("%s: ", tmp[i].tab[j].key);
+ switch (tmp[i].tab[j].flag) {
+ case 1:
+ printf("%g ", tmp[i].tab[j].value.num);
+ break;
+ case 2:
+ printf("%s ",
+ tmp[i].tab[j].value.boolean ? "true" : "false");
+ break;
+ case 3:
+ printf("%s ", tmp[i].tab[j].value.str);
+ break;
+ }
+ }
+ printf("}\n");
+ }
+ free(tmp);
+ } else if (!strcmp(decoded->tag, "set")) {
+ ;
+ } else if (!strcmp(decoded->tag, "del")) {
+ ;
+ } else {
+ printf("Unknown request: %s\n", decoded->tag);
+ }
+
freemap(decoded);
return NULL;
}
diff --git a/src/main.c b/src/main.c
index 6ce4a1f..4fbfe41 100644
--- a/src/main.c
+++ b/src/main.c
@@ -9,7 +9,7 @@ int main(int argc, char **argv) {
if (xdb_init(filename))
exit(1);
// TODO: make decoder be able to decode empty tags
- xdb_stmt("<get><all>true</all></get>");
+ xdb_stmt("<get>all</get>");
xdb_close();
exit(0);
}