add single table query test

Tue, 09 Dec 2025 14:47:35 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 09 Dec 2025 14:47:35 +0100
changeset 25
0bb91d1f9bba
parent 24
df671b62538e
child 26
dc36aa437249

add single table query test

test/database.c file | annotate | diff | comparison | revisions
test/database.h file | annotate | diff | comparison | revisions
test/main.c file | annotate | diff | comparison | revisions
--- a/test/database.c	Tue Dec 09 14:33:26 2025 +0100
+++ b/test/database.c	Tue Dec 09 14:47:35 2025 +0100
@@ -35,6 +35,7 @@
 
 #include <cx/buffer.h>
 #include <cx/streams.h>
+#include <cx/mempool.h>
 
 #define TEST_DB        "test.db"
 #define TEST_DATA_FILE "testdata.sql"
@@ -89,6 +90,10 @@
 static DBUContext *ctx;
 static DBUConnection *conn;
 
+static DBUClass *address;
+static DBUClass *person;
+static DBUClass *role;
+
 typedef struct Address {
     int64_t address_id;
     
@@ -120,14 +125,14 @@
 int init_db_tests(void) {
     ctx = dbuContextCreate();
     
-    DBUClass *address = dbuRegisterClass(ctx, "address", Address, address_id);
+    address = dbuRegisterClass(ctx, "address", Address, address_id);
     dbuClassAdd(address, Address, street);
     dbuClassAdd(address, Address, zip);
     dbuClassAdd(address, Address, city);
     
-    DBUClass *role = dbuRegisterClass(ctx, "role", Role, role_id);
+    role = dbuRegisterClass(ctx, "role", Role, role_id);
     
-    DBUClass *person = dbuRegisterClass(ctx, "person", Person, person_id);
+    person = dbuRegisterClass(ctx, "person", Person, person_id);
     dbuClassAdd(person, Person, name);
     dbuClassAdd(person, Person, email);
     dbuClassAdd(person, Person, age);
@@ -226,3 +231,29 @@
         free(value.ptr);
     }
 }
+
+CX_TEST(testSingleTableQuery) {
+    CxMempool *mp = cxMempoolCreateSimple(64);
+    
+    CX_TEST_DO {
+        DBUQuery *query = dbuQueryCreate(conn, mp->allocator, "select * from address order by street;");
+        DBUObjectBuilder *builder = dbuObjectBuilder(address, query, mp->allocator);
+        CxList *adr = dbuObjectBuilderGetList(builder);
+        
+        CX_TEST_ASSERT(adr);
+        CX_TEST_ASSERT(cxListSize(adr) == 2);
+        
+        Address *a0 = cxListAt(adr, 0);
+        Address *a1 = cxListAt(adr, 1);
+        CX_TEST_ASSERT(a0);
+        CX_TEST_ASSERT(a1);
+        CX_TEST_ASSERT(!cx_strcmp(a0->street, "street 1"));
+        CX_TEST_ASSERT(!cx_strcmp(a1->street, "street 2"));
+        CX_TEST_ASSERT(!cx_strcmp(a0->zip, "12343"));
+        CX_TEST_ASSERT(!cx_strcmp(a1->zip, "23456"));
+        CX_TEST_ASSERT(!cx_strcmp(a0->city, "city 17"));
+        CX_TEST_ASSERT(!cx_strcmp(a1->city, "city 18"));
+    }
+    
+    cxMempoolFree(mp);
+}
--- a/test/database.h	Tue Dec 09 14:33:26 2025 +0100
+++ b/test/database.h	Tue Dec 09 14:47:35 2025 +0100
@@ -51,6 +51,7 @@
 CX_TEST(testSingleValueQuery);
 CX_TEST(testSqlExec);
 CX_TEST(testSqlExecParam);
+CX_TEST(testSingleTableQuery);
 
 
 #ifdef __cplusplus
--- a/test/main.c	Tue Dec 09 14:33:26 2025 +0100
+++ b/test/main.c	Tue Dec 09 14:47:35 2025 +0100
@@ -130,6 +130,7 @@
     cx_test_register(suite, testSingleValueQuery);
     cx_test_register(suite, testSqlExec);
     cx_test_register(suite, testSqlExecParam);
+    cx_test_register(suite, testSingleTableQuery);
 #endif
     
     cx_test_run_stdout(suite);

mercurial