--- 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); +}