diff options
-rw-r--r-- | Makefile | 28 | ||||
-rw-r--r-- | src/include/init.c | 25 | ||||
-rw-r--r-- | src/include/xdbms.c | 31 | ||||
-rw-r--r-- | src/include/xdbms.h | 10 | ||||
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | tests/test_main.c | 5 | ||||
-rw-r--r-- | tests/test_xml.c | 35 |
7 files changed, 104 insertions, 36 deletions
@@ -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 @@ -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); +} |