test/database.c

changeset 32
6bd927c1cb11
parent 31
287484519844
--- a/test/database.c	Fri Dec 19 17:22:03 2025 +0100
+++ b/test/database.c	Mon Dec 29 18:09:43 2025 +0100
@@ -259,3 +259,48 @@
     
     cxMempoolFree(mp);
 }
+
+CX_TEST(testMultiTableQuery) {
+    CxMempool *mp = cxMempoolCreateSimple(64);
+    
+    CX_TEST_DO {
+        const char *sql1 = "select p.*, a.address_id as [__address__address_id], a.street, a.zip, a.city from Person p inner join Address a on p.address_id = a.address_id order by p.person_id;";
+        DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1);
+        DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator);
+        CxList *persons = dbuObjectBuilderGetList(builder);
+        
+        CX_TEST_ASSERT(persons);
+        CX_TEST_ASSERT(cxListSize(persons) == 2);
+        
+        Person *p0 = cxListAt(persons, 0);
+        Person *p1 = cxListAt(persons, 1);
+        CX_TEST_ASSERT(p0);
+        CX_TEST_ASSERT(p1);
+        CX_TEST_ASSERT(!cx_strcmp(p0->name, "alice"));
+        CX_TEST_ASSERT(!cx_strcmp(p1->name, "bob"));
+        CX_TEST_ASSERT(!cx_strcmp(p0->email, "alice@example.com"));
+        CX_TEST_ASSERT(!cx_strcmp(p1->email, "bob@example.com"));
+        CX_TEST_ASSERT(p0->age == 30);
+        CX_TEST_ASSERT(p1->age == 25);
+        CX_TEST_ASSERT(p0->iscustomer == 0);
+        CX_TEST_ASSERT(p1->iscustomer == 1);
+        CX_TEST_ASSERT(p0->hash == 123456789);
+        CX_TEST_ASSERT(p1->hash == 987654321);
+        
+        CX_TEST_ASSERT(p0->address != NULL);
+        CX_TEST_ASSERT(p1->address != NULL);
+        
+        CX_TEST_ASSERT(!cx_strcmp(p0->address->street, "street 1"));
+        CX_TEST_ASSERT(!cx_strcmp(p1->address->street, "street 2"));
+        CX_TEST_ASSERT(!cx_strcmp(p0->address->zip, "12343"));
+        CX_TEST_ASSERT(!cx_strcmp(p1->address->zip, "23456"));
+        CX_TEST_ASSERT(!cx_strcmp(p0->address->city, "city 17"));
+        CX_TEST_ASSERT(!cx_strcmp(p1->address->city, "city 18"));
+        
+        
+        dbuObjectBuilderDestroy(builder);
+    }
+    
+    cxMempoolFree(mp);
+}
+

mercurial