summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile28
-rw-r--r--src/include/init.c25
-rw-r--r--src/include/xdbms.c31
-rw-r--r--src/include/xdbms.h10
-rw-r--r--src/main.c6
-rw-r--r--tests/test_main.c5
-rw-r--r--tests/test_xml.c35
7 files changed, 104 insertions, 36 deletions
diff --git a/Makefile b/Makefile
index 01d46bd..c99cf2b 100644
--- a/Makefile
+++ b/Makefile
@@ -10,14 +10,32 @@ xdbms: lib
lib: $(BUILD)
$(CC) src/include/engine/*.c $(O_FLAGS) -std=c11
ar rcs $(BUILD)/libengine.a *.o
- $(CC) src/include/init.c $(O_FLAGS) -std=c11
- $(CC) -shared -o $(BUILD)/libxdbms.so init.o $(BUILD)/libengine.a\
- -Wl,--exclude-libs,$(BUILD)/libengine.a -fvisibility=hidden -O2
rm *.o
- rm $(BUILD)/libengine.a
+ $(CC) src/include/xml/*.c $(O_FLAGS) -std=c11
+ ar rcs $(BUILD)/libxml.a *.o
+ $(CC) src/include/xdbms.c $(O_FLAGS) -std=c11
+ $(CC) -shared -o $(BUILD)/libxdbms.so\
+ xdbms.o $(BUILD)/libengine.a $(BUILD)/libxml.a\
+ -Wl,--exclude-libs,$(BUILD)/libengine.a -fvisibility=hidden\
+ -Wl,--exclude-libs,$(BUILD)/libxml.a -fvisibility=hidden -O2
+ rm *.o
+ rm $(BUILD)/*.a
+
+dev: dev_lib
+ $(CC) src/main.c $(D_FLAGS) -O0 -g $(C_FLAGS) -o $(BUILD)/xdbms.out
+dev_lib: $(BUILD)
+ $(CC) src/include/engine/*.c $(O_FLAGS) -g -std=c11
+ ar rcs $(BUILD)/libengine.a *.o
+ rm *.o
+ $(CC) src/include/xml/*.c $(O_FLAGS) -g -std=c11
+ ar rcs $(BUILD)/libxml.a *.o
+ $(CC) src/include/xdbms.c $(O_FLAGS) -std=c11 -g
+ $(CC) -shared -o $(BUILD)/libxdbms.so\
+ xdbms.o $(BUILD)/libengine.a $(BUILD)/libxml.a -g
+ rm *.o
test: $(BUILD)
- $(CC) -I. tests/*.c src/include/engine/*.c unity/unity.c -o $(BUILD)/test.out
+ $(CC) -I. -g tests/*.c src/include/engine/*.c src/include/xml/*.c unity/unity.c -o $(BUILD)/test.out
valgrind --tool=memcheck --log-file=mem_dbg $(BUILD)/test.out
valgrind --tool=drd -s --log-file=thrd_dbg $(BUILD)/test.out
rm -rf $(BUILD)
diff --git a/src/include/init.c b/src/include/init.c
deleted file mode 100644
index 76f46a1..0000000
--- a/src/include/init.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "xdbms.h"
-#include "engine/engine.h"
-
-static tablist_t *db;
-
-int xdb_init(char *filename)
-{
- if (filename == NULL)
- fprintf(stderr, "Warning: running in-memory database\n");
- db = readdb(filename);
-
- tablist_t *tmp = getkeys(db, -1, NULL, 0);
- for (int i = 0; i < tmp[0].len; ++i) {
- printf("id: %d\n", i);
- for (int j = 0; tmp[0].tab[j].flag; ++j)
- printf("%s\n", tmp[0].tab[j].key);
- }
- free(tmp);
- delkeys(db, -1, NULL, 0);
- free(db);
- return 0;
-}
diff --git a/src/include/xdbms.c b/src/include/xdbms.c
new file mode 100644
index 0000000..eb6193e
--- /dev/null
+++ b/src/include/xdbms.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "engine/engine.h"
+#include "xml/xml.h"
+#include "xdbms.h"
+
+static tablist_t *db;
+
+int xdb_init(char *filename) {
+ if (filename == NULL)
+ fprintf(stderr, "Warning: running in-memory database\n");
+ db = readdb(filename);
+ if (db == NULL) {
+ fprintf(stderr, "Error: Invalid DB file\n");
+ return 1;
+ }
+ return 0;
+}
+
+void xdb_close(void) {
+ delkeys(db, -1, NULL, 0);
+ free(db);
+}
+
+char *xdb_stmt(char *stmt) {
+ map_t *decoded = decode(stmt);
+ printf("%s\n", encode(decoded));
+ freemap(decoded);
+ return NULL;
+}
diff --git a/src/include/xdbms.h b/src/include/xdbms.h
index a18996d..af7d1dc 100644
--- a/src/include/xdbms.h
+++ b/src/include/xdbms.h
@@ -1,13 +1,13 @@
#ifndef XDBMS_H
#define XDBMS_H
-// init: intialize an XDBMS DB
+// xdb_init: intialize an XDBMS DB
int xdb_init(char *filename);
-// exec: execute a statement on an XDBMS DB
-char *exec(char *stmt);
+// xdb_stmt: execute a statement on an XDBMS DB
+char *xdb_stmt(char *stmt);
-// close: close an XDBMS DB
-int close();
+// xdb_close: close an XDBMS DB
+void xdb_close(void);
#endif
diff --git a/src/main.c b/src/main.c
index 7d06d65..6ce4a1f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,6 +6,10 @@ int main(int argc, char **argv) {
if (argc == 1)
exit(1);
char *filename = argv[1];
- xdb_init(filename);
+ if (xdb_init(filename))
+ exit(1);
+ // TODO: make decoder be able to decode empty tags
+ xdb_stmt("<get><all>true</all></get>");
+ xdb_close();
exit(0);
}
diff --git a/tests/test_main.c b/tests/test_main.c
index af238a3..b643c53 100644
--- a/tests/test_main.c
+++ b/tests/test_main.c
@@ -22,6 +22,9 @@ extern void test_getkeys_single(void);
extern void test_getkeys_singlekey(void);
extern void test_getkeys_fail(void);
+extern void test_xml_encode(void);
+extern void test_xml_decode(void);
+
int main(void) {
UNITY_BEGIN();
RUN_TEST(test_readdb);
@@ -29,5 +32,7 @@ int main(void) {
RUN_TEST(test_getkeys_single);
RUN_TEST(test_getkeys_singlekey);
RUN_TEST(test_getkeys_fail);
+ RUN_TEST(test_xml_encode);
+ RUN_TEST(test_xml_decode);
return UNITY_END();
}
diff --git a/tests/test_xml.c b/tests/test_xml.c
new file mode 100644
index 0000000..a3895e8
--- /dev/null
+++ b/tests/test_xml.c
@@ -0,0 +1,35 @@
+#include <stdlib.h>
+
+#include "unity/unity.h"
+#include "src/include/xml/xml.h"
+
+void test_xml_encode(void) {
+ map_t map = (map_t) {
+ .tag = "get",
+ .payload = (map_t []) {
+ {
+ .tag = "test",
+ .payload = "test",
+ .n = 4,
+ .size = sizeof(char),
+ .attrs = NULL,
+ .n_attrs = 0
+ }
+ },
+ .size = sizeof(map_t),
+ .n = 1,
+ .attrs = NULL,
+ .n_attrs = 0
+ };
+ char *xml = encode(&map);
+ TEST_ASSERT_EQUAL_STRING("<get><test>test</test></get>", xml);
+ free(xml);
+}
+
+void test_xml_decode(void) {
+ map_t *decoded = decode("<get><test>test</test></get>");
+ char *xml = encode(decoded);
+
+ TEST_ASSERT_EQUAL_STRING("<get><test>test</test></get>", xml);
+ free(xml);
+}