| 257 dbuObjectBuilderDestroy(builder); |
257 dbuObjectBuilderDestroy(builder); |
| 258 } |
258 } |
| 259 |
259 |
| 260 cxMempoolFree(mp); |
260 cxMempoolFree(mp); |
| 261 } |
261 } |
| |
262 |
| |
263 CX_TEST(testMultiTableQuery) { |
| |
264 CxMempool *mp = cxMempoolCreateSimple(64); |
| |
265 |
| |
266 CX_TEST_DO { |
| |
267 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;"; |
| |
268 DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1); |
| |
269 DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
| |
270 CxList *persons = dbuObjectBuilderGetList(builder); |
| |
271 |
| |
272 CX_TEST_ASSERT(persons); |
| |
273 CX_TEST_ASSERT(cxListSize(persons) == 2); |
| |
274 |
| |
275 Person *p0 = cxListAt(persons, 0); |
| |
276 Person *p1 = cxListAt(persons, 1); |
| |
277 CX_TEST_ASSERT(p0); |
| |
278 CX_TEST_ASSERT(p1); |
| |
279 CX_TEST_ASSERT(!cx_strcmp(p0->name, "alice")); |
| |
280 CX_TEST_ASSERT(!cx_strcmp(p1->name, "bob")); |
| |
281 CX_TEST_ASSERT(!cx_strcmp(p0->email, "alice@example.com")); |
| |
282 CX_TEST_ASSERT(!cx_strcmp(p1->email, "bob@example.com")); |
| |
283 CX_TEST_ASSERT(p0->age == 30); |
| |
284 CX_TEST_ASSERT(p1->age == 25); |
| |
285 CX_TEST_ASSERT(p0->iscustomer == 0); |
| |
286 CX_TEST_ASSERT(p1->iscustomer == 1); |
| |
287 CX_TEST_ASSERT(p0->hash == 123456789); |
| |
288 CX_TEST_ASSERT(p1->hash == 987654321); |
| |
289 |
| |
290 CX_TEST_ASSERT(p0->address != NULL); |
| |
291 CX_TEST_ASSERT(p1->address != NULL); |
| |
292 |
| |
293 CX_TEST_ASSERT(!cx_strcmp(p0->address->street, "street 1")); |
| |
294 CX_TEST_ASSERT(!cx_strcmp(p1->address->street, "street 2")); |
| |
295 CX_TEST_ASSERT(!cx_strcmp(p0->address->zip, "12343")); |
| |
296 CX_TEST_ASSERT(!cx_strcmp(p1->address->zip, "23456")); |
| |
297 CX_TEST_ASSERT(!cx_strcmp(p0->address->city, "city 17")); |
| |
298 CX_TEST_ASSERT(!cx_strcmp(p1->address->city, "city 18")); |
| |
299 |
| |
300 |
| |
301 dbuObjectBuilderDestroy(builder); |
| |
302 } |
| |
303 |
| |
304 cxMempoolFree(mp); |
| |
305 } |
| |
306 |