test/database.c

changeset 25
0bb91d1f9bba
parent 24
df671b62538e
child 26
dc36aa437249
equal deleted inserted replaced
24:df671b62538e 25:0bb91d1f9bba
33 #include <errno.h> 33 #include <errno.h>
34 #include <unistd.h> 34 #include <unistd.h>
35 35
36 #include <cx/buffer.h> 36 #include <cx/buffer.h>
37 #include <cx/streams.h> 37 #include <cx/streams.h>
38 #include <cx/mempool.h>
38 39
39 #define TEST_DB "test.db" 40 #define TEST_DB "test.db"
40 #define TEST_DATA_FILE "testdata.sql" 41 #define TEST_DATA_FILE "testdata.sql"
41 42
42 43
87 88
88 89
89 static DBUContext *ctx; 90 static DBUContext *ctx;
90 static DBUConnection *conn; 91 static DBUConnection *conn;
91 92
93 static DBUClass *address;
94 static DBUClass *person;
95 static DBUClass *role;
96
92 typedef struct Address { 97 typedef struct Address {
93 int64_t address_id; 98 int64_t address_id;
94 99
95 cxmutstr street; 100 cxmutstr street;
96 cxmutstr zip; 101 cxmutstr zip;
118 } Role; 123 } Role;
119 124
120 int init_db_tests(void) { 125 int init_db_tests(void) {
121 ctx = dbuContextCreate(); 126 ctx = dbuContextCreate();
122 127
123 DBUClass *address = dbuRegisterClass(ctx, "address", Address, address_id); 128 address = dbuRegisterClass(ctx, "address", Address, address_id);
124 dbuClassAdd(address, Address, street); 129 dbuClassAdd(address, Address, street);
125 dbuClassAdd(address, Address, zip); 130 dbuClassAdd(address, Address, zip);
126 dbuClassAdd(address, Address, city); 131 dbuClassAdd(address, Address, city);
127 132
128 DBUClass *role = dbuRegisterClass(ctx, "role", Role, role_id); 133 role = dbuRegisterClass(ctx, "role", Role, role_id);
129 134
130 DBUClass *person = dbuRegisterClass(ctx, "person", Person, person_id); 135 person = dbuRegisterClass(ctx, "person", Person, person_id);
131 dbuClassAdd(person, Person, name); 136 dbuClassAdd(person, Person, name);
132 dbuClassAdd(person, Person, email); 137 dbuClassAdd(person, Person, email);
133 dbuClassAdd(person, Person, age); 138 dbuClassAdd(person, Person, age);
134 dbuClassAdd(person, Person, iscustomer); 139 dbuClassAdd(person, Person, iscustomer);
135 dbuClassAdd(person, Person, hash); 140 dbuClassAdd(person, Person, hash);
224 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0); 229 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0);
225 CX_TEST_ASSERT(!cx_strcmp(value, "bob")); 230 CX_TEST_ASSERT(!cx_strcmp(value, "bob"));
226 free(value.ptr); 231 free(value.ptr);
227 } 232 }
228 } 233 }
234
235 CX_TEST(testSingleTableQuery) {
236 CxMempool *mp = cxMempoolCreateSimple(64);
237
238 CX_TEST_DO {
239 DBUQuery *query = dbuQueryCreate(conn, mp->allocator, "select * from address order by street;");
240 DBUObjectBuilder *builder = dbuObjectBuilder(address, query, mp->allocator);
241 CxList *adr = dbuObjectBuilderGetList(builder);
242
243 CX_TEST_ASSERT(adr);
244 CX_TEST_ASSERT(cxListSize(adr) == 2);
245
246 Address *a0 = cxListAt(adr, 0);
247 Address *a1 = cxListAt(adr, 1);
248 CX_TEST_ASSERT(a0);
249 CX_TEST_ASSERT(a1);
250 CX_TEST_ASSERT(!cx_strcmp(a0->street, "street 1"));
251 CX_TEST_ASSERT(!cx_strcmp(a1->street, "street 2"));
252 CX_TEST_ASSERT(!cx_strcmp(a0->zip, "12343"));
253 CX_TEST_ASSERT(!cx_strcmp(a1->zip, "23456"));
254 CX_TEST_ASSERT(!cx_strcmp(a0->city, "city 17"));
255 CX_TEST_ASSERT(!cx_strcmp(a1->city, "city 18"));
256 }
257
258 cxMempoolFree(mp);
259 }

mercurial