Wed, 04 Feb 2026 20:00:54 +0100
add testMultiTableQuery3
| 23 | 1 | /* |
| 2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
| 3 | * | |
| 4 | * Copyright 2025 Olaf Wintermann. All rights reserved. | |
| 5 | * | |
| 6 | * Redistribution and use in source and binary forms, with or without | |
| 7 | * modification, are permitted provided that the following conditions are met: | |
| 8 | * | |
| 9 | * 1. Redistributions of source code must retain the above copyright | |
| 10 | * notice, this list of conditions and the following disclaimer. | |
| 11 | * | |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 13 | * notice, this list of conditions and the following disclaimer in the | |
| 14 | * documentation and/or other materials provided with the distribution. | |
| 15 | * | |
| 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
| 20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| 23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| 24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| 25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| 26 | * POSSIBLIITY OF SUCH DAMAGE. | |
| 27 | */ | |
| 28 | ||
| 29 | #include "database.h" | |
| 30 | ||
| 31 | #include <stdio.h> | |
| 32 | #include <stdlib.h> | |
| 33 | #include <errno.h> | |
| 34 | #include <unistd.h> | |
| 35 | ||
| 36 | #include <cx/buffer.h> | |
| 37 | #include <cx/streams.h> | |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
38 | #include <cx/mempool.h> |
| 23 | 39 | |
| 40 | #define TEST_DB "test.db" | |
| 41 | #define TEST_DATA_FILE "testdata.sql" | |
| 42 | ||
| 43 | ||
| 44 | // create test.db and execute testdata script | |
| 45 | int init_test_db(void) { | |
| 46 | sqlite3 *db; | |
| 47 | char *err_msg = NULL; | |
| 48 | ||
| 49 | FILE *f = fopen(TEST_DATA_FILE, "r"); | |
| 50 | if(!f) { | |
| 51 | fprintf(stderr, "Cannot open test data file %s: %s\n", TEST_DATA_FILE, strerror(errno)); | |
| 52 | } | |
| 53 | ||
| 54 | if(unlink(TEST_DB)) { | |
| 55 | if(errno != ENOENT) { | |
| 56 | fprintf(stderr, "Cannot unlink %s: %s\n", TEST_DB, strerror(errno)); | |
| 57 | fclose(f); | |
| 58 | return 1; | |
| 59 | } | |
| 60 | } | |
| 61 | if(sqlite3_open(TEST_DB, &db) != SQLITE_OK) { | |
| 62 | fprintf(stderr, "Cannot open database %s: %s\n", TEST_DB, sqlite3_errmsg(db)); | |
| 63 | fclose(f); | |
| 64 | return 1; | |
| 65 | } | |
| 66 | ||
| 31 | 67 | CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 2048, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); |
| 23 | 68 | cx_stream_copy(f, buf, (cx_read_func)fread, (cx_write_func)cxBufferWrite); |
| 69 | int err = 0; | |
| 70 | if(buf->size > 0) { | |
| 71 | cxBufferTerminate(buf); | |
| 72 | ||
| 73 | if(sqlite3_exec(db, buf->space, 0, 0, &err_msg) != SQLITE_OK) { | |
| 74 | fprintf(stderr, "SQL error: %s\n", err_msg); | |
| 75 | sqlite3_free(err_msg); | |
| 76 | err = 1; | |
| 77 | } | |
| 78 | } else { | |
| 79 | fprintf(stderr, "Error: no file content\n"); | |
| 80 | err = 1; | |
| 81 | } | |
| 82 | cxBufferFree(buf); | |
| 83 | sqlite3_close(db); | |
| 84 | ||
| 85 | return err; | |
| 86 | } | |
| 87 | ||
| 88 | ||
| 89 | ||
| 90 | static DBUContext *ctx; | |
| 91 | static DBUConnection *conn; | |
| 92 | ||
|
33
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
93 | static DBUClass *country; |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
94 | static DBUClass *address; |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
95 | static DBUClass *person; |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
96 | static DBUClass *role; |
|
52
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
97 | static DBUClass *resource; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
98 | static DBUClass *note; |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
99 | |
|
33
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
100 | typedef struct Country { |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
101 | int64_t country_id; |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
102 | cxmutstr name; |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
103 | } Country; |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
104 | |
| 23 | 105 | typedef struct Address { |
| 106 | int64_t address_id; | |
| 107 | ||
| 108 | cxmutstr street; | |
| 109 | cxmutstr zip; | |
| 110 | cxmutstr city; | |
|
33
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
111 | |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
112 | Country *country; |
| 23 | 113 | } Address; |
| 114 | ||
| 115 | typedef struct Person { | |
| 116 | int64_t person_id; | |
| 117 | ||
| 118 | cxmutstr name; | |
| 119 | cxmutstr email; | |
| 120 | int age; | |
| 121 | bool iscustomer; | |
| 122 | uint64_t hash; | |
| 123 | ||
| 124 | Address *address; | |
| 125 | ||
| 126 | CxList *roles; | |
| 127 | } Person; | |
| 128 | ||
| 129 | typedef struct Role { | |
| 130 | int64_t role_id; | |
| 131 | int64_t person_id; | |
| 132 | cxmutstr name; | |
| 133 | } Role; | |
| 134 | ||
|
52
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
135 | typedef struct Resource { |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
136 | int64_t resource_id; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
137 | int64_t parent_id; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
138 | char *nodename; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
139 | char *content; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
140 | bool iscollection; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
141 | } Resource; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
142 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
143 | typedef struct Note { |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
144 | int64_t note_id; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
145 | int64_t resource_id; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
146 | char *tags; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
147 | int type; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
148 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
149 | Resource *resource; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
150 | } Note; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
151 | |
| 23 | 152 | int init_db_tests(void) { |
| 153 | ctx = dbuContextCreate(); | |
| 154 | ||
|
33
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
155 | country = dbuRegisterClass(ctx, "country", Country, country_id); |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
156 | dbuClassAdd(country, Country, name); |
|
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
157 | |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
158 | address = dbuRegisterClass(ctx, "address", Address, address_id); |
| 23 | 159 | dbuClassAdd(address, Address, street); |
| 160 | dbuClassAdd(address, Address, zip); | |
| 161 | dbuClassAdd(address, Address, city); | |
|
52
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
162 | dbuClassAddObj(address, "country", offsetof(Address, country), country); |
| 23 | 163 | |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
164 | role = dbuRegisterClass(ctx, "role", Role, role_id); |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
165 | dbuClassAdd(role, Role, person_id); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
166 | dbuClassAdd(role, Role, name); |
| 23 | 167 | |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
168 | person = dbuRegisterClass(ctx, "person", Person, person_id); |
| 23 | 169 | dbuClassAdd(person, Person, name); |
| 170 | dbuClassAdd(person, Person, email); | |
| 171 | dbuClassAdd(person, Person, age); | |
| 172 | dbuClassAdd(person, Person, iscustomer); | |
| 173 | dbuClassAdd(person, Person, hash); | |
|
52
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
174 | dbuClassAddObj(person, "address", offsetof(Person, address), address); |
| 23 | 175 | dbuClassAddCxLinkedList(person, "person_id", offsetof(Person, roles), role); |
| 176 | ||
| 177 | dbuClassAddForeignKey(role, Role, person_id, person); | |
| 178 | dbuClassAdd(role, Role, name); | |
| 179 | ||
|
52
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
180 | resource = dbuRegisterClass(ctx, "resource", Resource, resource_id); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
181 | dbuClassAdd(resource, Resource, parent_id); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
182 | dbuClassAdd(resource, Resource, nodename); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
183 | dbuClassAdd(resource, Resource, content); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
184 | dbuClassAdd(resource, Resource, iscollection); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
185 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
186 | note = dbuRegisterClass(ctx, "note", Note, note_id); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
187 | dbuClassAdd(note, Note, resource_id); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
188 | dbuClassAdd(note, Note, tags); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
189 | dbuClassAdd(note, Note, type); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
190 | dbuClassAddObj(note, "resource", offsetof(Note, resource), resource); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
191 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
192 | |
| 23 | 193 | return 0; |
| 194 | } | |
| 195 | ||
| 196 | void cleanup_db_tests(void) { | |
| 197 | if(conn) { | |
| 198 | dbuConnectionFree(conn); | |
| 199 | } | |
| 200 | dbuContextFree(ctx); | |
| 201 | } | |
| 202 | ||
| 203 | CX_TEST(testSqliteConnection) { | |
| 204 | CX_TEST_DO { | |
| 205 | conn = dbuSQLiteConnection(TEST_DB); | |
| 206 | CX_TEST_ASSERT(conn); | |
| 207 | CX_TEST_ASSERT(dbuConnectionIsActive(conn)); | |
| 208 | } | |
| 209 | } | |
| 210 | ||
| 211 | CX_TEST(testSingleValueQuery) { | |
| 212 | CX_TEST_DO { | |
| 213 | CX_TEST_ASSERT(conn); | |
| 214 | ||
| 215 | DBUQuery *q = dbuConnectionQuery(conn, NULL); | |
| 216 | CX_TEST_ASSERT(q); | |
| 217 | CX_TEST_ASSERT(dbuQuerySetSQL(q, "select 12;") == 0); | |
| 218 | CX_TEST_ASSERT(dbuQueryExec(q) == 0); | |
| 219 | ||
| 220 | DBUResult *r = dbuQueryGetResult(q); | |
| 221 | CX_TEST_ASSERT(r); | |
| 222 | int value; | |
| 223 | CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0); | |
| 224 | CX_TEST_ASSERT(value == 12); | |
| 225 | ||
| 226 | dbuQueryFree(q); | |
| 227 | ||
| 228 | } | |
| 229 | } | |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
230 | |
|
48
deb6c4b8cf9d
rename dbuSqlExec to dbuSqlExecQuery, add new dbuSqlExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
231 | CX_TEST(testSqlExecQuery) { |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
232 | CX_TEST_DO { |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
233 | CX_TEST_ASSERT(conn); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
234 | |
|
48
deb6c4b8cf9d
rename dbuSqlExec to dbuSqlExecQuery, add new dbuSqlExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
235 | DBUResult *r = dbuSqlExecQuery(conn, NULL, "select email from person where name = 'alice';"); |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
236 | CX_TEST_ASSERT(r); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
237 | cxmutstr value; |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
238 | CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
239 | CX_TEST_ASSERT(!cx_strcmp(value, "alice@example.com")); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
240 | free(value.ptr); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
241 | } |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
242 | } |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
243 | |
|
48
deb6c4b8cf9d
rename dbuSqlExec to dbuSqlExecQuery, add new dbuSqlExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
244 | CX_TEST(testSqlExecQueryParam) { |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
245 | CX_TEST_DO { |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
246 | CX_TEST_ASSERT(conn); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
247 | |
|
48
deb6c4b8cf9d
rename dbuSqlExec to dbuSqlExecQuery, add new dbuSqlExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
248 | DBUResult *r = dbuSqlExecQueryParam(conn, NULL, "select email from person where name = ?;", "alice"); |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
249 | CX_TEST_ASSERT(r); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
250 | cxmutstr value; |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
251 | CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
252 | CX_TEST_ASSERT(!cx_strcmp(value, "alice@example.com")); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
253 | free(value.ptr); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
254 | |
|
48
deb6c4b8cf9d
rename dbuSqlExec to dbuSqlExecQuery, add new dbuSqlExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
255 | r = dbuSqlExecQueryParam(conn, NULL, "select name from person where hash = ?;", 987654321); |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
256 | CX_TEST_ASSERT(r); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
257 | CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
258 | CX_TEST_ASSERT(!cx_strcmp(value, "bob")); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
259 | free(value.ptr); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
260 | } |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
261 | } |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
262 | |
|
51
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
263 | CX_TEST(testSqlExec) { |
|
49
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
264 | CX_TEST_DO { |
|
51
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
265 | CX_TEST_ASSERT(conn); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
266 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
267 | int t1 = dbuSqlExec(conn, "create table ExecTest1(a int);"); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
268 | CX_TEST_ASSERT(t1 == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
269 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
270 | int t2 = dbuSqlExec(conn, "insert into ExecTest1(a) values (1);"); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
271 | CX_TEST_ASSERT(t2 == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
272 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
273 | int t3 = dbuSqlExec(conn, "drop table ExecTest1;"); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
274 | CX_TEST_ASSERT(t3 == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
275 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
276 | int fail = dbuSqlExec(conn, "select * from Fail;"); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
277 | CX_TEST_ASSERT(fail != 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
278 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
279 | |
|
49
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
280 | CX_TEST_ASSERT(dbuSqlExec(conn, "PRAGMA foreign_keys = ON;") == 0); |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
281 | CX_TEST_ASSERT(dbuSqlExec(conn, |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
282 | "create table ExecTest3( " |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
283 | "test1_id integer primary key autoincrement, " |
|
51
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
284 | "value int, " |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
285 | "str text);") == 0); |
|
49
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
286 | CX_TEST_ASSERT(dbuSqlExec(conn, |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
287 | "create table ExecTest4( " |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
288 | "test2_id integer primary key autoincrement, " |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
289 | "exectest1_id int references ExecTest3(test1_id), " |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
290 | "value int);") == 0); |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
291 | CX_TEST_ASSERT(dbuSqlExec(conn, "insert into ExecTest3(value) values (123);") == 0); |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
292 | |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
293 | // fail test |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
294 | CX_TEST_ASSERT(dbuSqlExec(conn, "insert into ExecTest4(exectest1_id, value) values (-999, 123);") != 0); |
|
51
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
295 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
296 | // param tests |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
297 | CX_TEST_ASSERT(dbuSqlExecParamInt32(conn, "insert into ExecTest3(value) values (?);", 11) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
298 | CX_TEST_ASSERT(dbuSqlExecParamUInt32(conn, "insert into ExecTest3(value) values (?);", 12) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
299 | CX_TEST_ASSERT(dbuSqlExecParamInt64(conn, "insert into ExecTest3(value) values (?);", 4000000000L) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
300 | CX_TEST_ASSERT(dbuSqlExecParamUInt64(conn, "insert into ExecTest3(value) values (?);", 5000000000L) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
301 | CX_TEST_ASSERT(dbuSqlExecParamString(conn, "insert into ExecTest3(str) values (?);", "str1") == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
302 | CX_TEST_ASSERT(dbuSqlExecParamCxString(conn, "insert into ExecTest3(str) values (?);", cx_str("str2")) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
303 | CX_TEST_ASSERT(dbuSqlExecParamCxMutStr(conn, "insert into ExecTest3(str) values (?);", cx_mutstr("str3")) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
304 | |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
305 | // param macro test |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
306 | CX_TEST_ASSERT(dbuSqlExecParam(conn, "insert into ExecTest3(value) values (?);", 111) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
307 | CX_TEST_ASSERT(dbuSqlExecParam(conn, "insert into ExecTest3(str) values (?);", "str4") == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
308 | CX_TEST_ASSERT(dbuSqlExecParam(conn, "insert into ExecTest3(str) values (?);", cx_str("str5")) == 0); |
|
e3163dc41a80
fix param type in dbuSqlExecParamUInt64/dbuSqlExecQueryParamUInt64, remove dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
309 | CX_TEST_ASSERT(dbuSqlExecParam(conn, "insert into ExecTest3(str) values (?);", cx_mutstr("str6")) == 0); |
|
49
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
310 | } |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
311 | } |
|
34c723ed7190
add testSqlExecParam
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
312 | |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
313 | CX_TEST(testSingleTableQuery) { |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
314 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
315 | |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
316 | CX_TEST_DO { |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
317 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, "select * from address order by street;"); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
318 | DBUObjectBuilder *builder = dbuObjectBuilder(address, query, mp->allocator); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
319 | CxList *adr = dbuObjectBuilderGetList(builder); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
320 | |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
321 | CX_TEST_ASSERT(adr); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
322 | CX_TEST_ASSERT(cxListSize(adr) == 2); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
323 | |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
324 | Address *a0 = cxListAt(adr, 0); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
325 | Address *a1 = cxListAt(adr, 1); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
326 | CX_TEST_ASSERT(a0); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
327 | CX_TEST_ASSERT(a1); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
328 | CX_TEST_ASSERT(!cx_strcmp(a0->street, "street 1")); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
329 | CX_TEST_ASSERT(!cx_strcmp(a1->street, "street 2")); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
330 | CX_TEST_ASSERT(!cx_strcmp(a0->zip, "12343")); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
331 | CX_TEST_ASSERT(!cx_strcmp(a1->zip, "23456")); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
332 | CX_TEST_ASSERT(!cx_strcmp(a0->city, "city 17")); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
333 | CX_TEST_ASSERT(!cx_strcmp(a1->city, "city 18")); |
|
26
dc36aa437249
implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
25
diff
changeset
|
334 | |
|
dc36aa437249
implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
25
diff
changeset
|
335 | dbuObjectBuilderDestroy(builder); |
|
25
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
336 | } |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
337 | |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
338 | cxMempoolFree(mp); |
|
0bb91d1f9bba
add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
24
diff
changeset
|
339 | } |
|
32
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
340 | |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
341 | CX_TEST_SUBROUTINE(verifyMultiTableResult, CxList *persons, bool verify_address) { |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
342 | CX_TEST_ASSERT(persons); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
343 | CX_TEST_ASSERT(cxListSize(persons) == 2); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
344 | |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
345 | Person *p0 = cxListAt(persons, 0); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
346 | Person *p1 = cxListAt(persons, 1); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
347 | |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
348 | CX_TEST_ASSERT(p0); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
349 | CX_TEST_ASSERT(p1); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
350 | CX_TEST_ASSERT(!cx_strcmp(p0->name, "alice")); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
351 | CX_TEST_ASSERT(!cx_strcmp(p1->name, "bob")); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
352 | CX_TEST_ASSERT(!cx_strcmp(p0->email, "alice@example.com")); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
353 | CX_TEST_ASSERT(!cx_strcmp(p1->email, "bob@example.com")); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
354 | CX_TEST_ASSERT(p0->age == 30); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
355 | CX_TEST_ASSERT(p1->age == 25); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
356 | CX_TEST_ASSERT(p0->iscustomer == 0); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
357 | CX_TEST_ASSERT(p1->iscustomer == 1); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
358 | CX_TEST_ASSERT(p0->hash == 123456789); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
359 | CX_TEST_ASSERT(p1->hash == 987654321); |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
360 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
361 | if(verify_address) { |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
362 | CX_TEST_ASSERT(p0->address != NULL); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
363 | CX_TEST_ASSERT(p1->address != NULL); |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
364 | |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
365 | CX_TEST_ASSERT(!cx_strcmp(p0->address->street, "street 1")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
366 | CX_TEST_ASSERT(!cx_strcmp(p1->address->street, "street 2")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
367 | CX_TEST_ASSERT(!cx_strcmp(p0->address->zip, "12343")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
368 | CX_TEST_ASSERT(!cx_strcmp(p1->address->zip, "23456")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
369 | CX_TEST_ASSERT(!cx_strcmp(p0->address->city, "city 17")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
370 | CX_TEST_ASSERT(!cx_strcmp(p1->address->city, "city 18")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
371 | } |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
372 | } |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
373 | |
|
32
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
374 | CX_TEST(testMultiTableQuery) { |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
375 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
376 | |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
377 | CX_TEST_DO { |
|
40
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
378 | // select persons + addresses, a.address_id as __address__address_id (table separator) |
|
32
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
379 | 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;"; |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
380 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1); |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
381 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
382 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
383 | |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
384 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, true); |
|
32
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
385 | |
|
33
106ff84c18ed
extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
32
diff
changeset
|
386 | dbuObjectBuilderDestroy(builder); |
|
32
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
387 | } |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
388 | |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
389 | cxMempoolFree(mp); |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
390 | } |
|
6bd927c1cb11
add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
31
diff
changeset
|
391 | |
|
36
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
392 | CX_TEST(testMultiTableQuery1) { |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
393 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
394 | |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
395 | CX_TEST_DO { |
|
40
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
396 | // select persons + addresses, NULL as __address (table seprator) |
|
36
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
397 | const char *sql1 = "select p.*, NULL as [__address], a.* from Person p inner join Address a on p.address_id = a.address_id order by p.person_id;"; |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
398 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1); |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
399 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
400 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
401 | |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
402 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, true); |
|
36
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
403 | |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
404 | dbuObjectBuilderDestroy(builder); |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
405 | } |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
406 | |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
407 | cxMempoolFree(mp); |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
408 | } |
|
93753b036d9f
add additional multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
409 | |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
410 | CX_TEST_SUBROUTINE(verifyMultiTableResultCountry, CxList *persons) { |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
411 | Person *p0 = cxListAt(persons, 0); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
412 | Person *p1 = cxListAt(persons, 1); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
413 | CX_TEST_ASSERT(p0 && p1); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
414 | |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
415 | CX_TEST_ASSERT(p0->address->country); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
416 | CX_TEST_ASSERT(p1->address->country); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
417 | CX_TEST_ASSERT(!cx_strcmp(p0->address->country->name, "Germany")); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
418 | CX_TEST_ASSERT(!cx_strcmp(p1->address->country->name, "Germany")); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
419 | } |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
420 | |
|
34
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
421 | CX_TEST(testMultiTableQuery2) { |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
422 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
423 | |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
424 | CX_TEST_DO { |
|
40
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
425 | // select persons, addresses and countries |
|
34
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
426 | const char *sql2 = "select p.*, " |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
427 | "a.address_id as [__address__address_id], a.street, a.zip, a.city, " |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
428 | "c.country_id as [__country__country_id], c.name " |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
429 | "from Person p inner join Address a on p.address_id = a.address_id inner join Country c on a.country_id = c.country_id " |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
430 | "order by p.person_id;"; |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
431 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql2); |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
432 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
433 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
434 | |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
435 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, true); |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
436 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResultCountry, persons); |
|
35
16731869cc05
fix that NULL as __tabname did not work as table separator in queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
34
diff
changeset
|
437 | |
|
34
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
438 | dbuObjectBuilderDestroy(builder); |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
439 | } |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
440 | |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
441 | cxMempoolFree(mp); |
|
0d2291e77d32
split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
442 | } |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
443 | |
|
52
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
444 | CX_TEST(testMultiTableQuery3) { |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
445 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
446 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
447 | CX_TEST_DO { |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
448 | const char *sql1 = |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
449 | "select n.*, r.resource_id as [__resource__resource_id], r.parent_id, " \ |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
450 | "r.nodename, r.content, r.iscollection " \ |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
451 | "from resource r inner join note n on r.resource_id = n.resource_id " \ |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
452 | "where parent_id = (select resource_id from resource where nodename = 'Collection1') ;"; |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
453 | DBUQuery *q = dbuQueryCreate(conn, mp->allocator, sql1); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
454 | DBUObjectBuilder *builder = dbuObjectBuilder(note, q, mp->allocator); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
455 | CxList *notes = dbuObjectBuilderGetList(builder); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
456 | dbuObjectBuilderDestroy(builder); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
457 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
458 | CX_TEST_ASSERT(notes); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
459 | CX_TEST_ASSERT(cxListSize(notes) == 2); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
460 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
461 | Note *n0 = cxListAt(notes, 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
462 | Note *n1 = cxListAt(notes, 1); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
463 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
464 | CX_TEST_ASSERT(n0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
465 | CX_TEST_ASSERT(n1); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
466 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
467 | CX_TEST_ASSERT(n0->note_id > 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
468 | CX_TEST_ASSERT(n0->resource_id > 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
469 | CX_TEST_ASSERT(!cx_strcmp(n0->tags, "todo, test")); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
470 | CX_TEST_ASSERT(n0->type == 1); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
471 | CX_TEST_ASSERT(n0->resource); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
472 | CX_TEST_ASSERT(n0->resource_id == n0->resource->resource_id); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
473 | CX_TEST_ASSERT(!cx_strcmp(n0->resource->nodename, "note1")); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
474 | CX_TEST_ASSERT(!n0->resource->iscollection); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
475 | CX_TEST_ASSERT(n0->resource->parent_id > 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
476 | CX_TEST_ASSERT(!cx_strcmp(n0->resource->content, "Hello World!")); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
477 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
478 | CX_TEST_ASSERT(n1->note_id > 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
479 | CX_TEST_ASSERT(n1->resource_id > 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
480 | CX_TEST_ASSERT(!cx_strcmp(n1->tags, "work, project2501, ai")); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
481 | CX_TEST_ASSERT(n1->type == 2); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
482 | CX_TEST_ASSERT(n1->resource); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
483 | CX_TEST_ASSERT(n1->resource_id == n1->resource->resource_id); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
484 | CX_TEST_ASSERT(!cx_strcmp(n1->resource->nodename, "note2")); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
485 | CX_TEST_ASSERT(!n1->resource->iscollection); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
486 | CX_TEST_ASSERT(n1->resource->parent_id > 0); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
487 | CX_TEST_ASSERT(!cx_strcmp(n1->resource->content, "Test String")); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
488 | } |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
489 | |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
490 | cxMempoolFree(mp); |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
491 | } |
|
8503be5eea49
add testMultiTableQuery3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
492 | |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
493 | CX_TEST(testMultiTableQueryUnknownResult1) { |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
494 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
495 | |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
496 | CX_TEST_DO { |
|
40
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
497 | // select persons, addresses and countries |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
498 | const char *sql2 = "select p.*, 'unknown1' as unknown1, " |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
499 | "a.address_id as [__address__address_id], a.street, 'unknown2' as unknown2, a.zip, 123 as unknown3, a.city, " |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
500 | "NULL as [__unknowntab], 456 as unknown_4, " |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
501 | "c.country_id as [__country__country_id], c.name " |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
502 | "from Person p inner join Address a on p.address_id = a.address_id inner join Country c on a.country_id = c.country_id " |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
503 | "order by p.person_id;"; |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
504 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql2); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
505 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
506 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
507 | |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
508 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, true); |
|
37
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
509 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResultCountry, persons); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
510 | |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
511 | dbuObjectBuilderDestroy(builder); |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
512 | } |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
513 | |
|
81dfb9a43a38
add test for queries with unknown columns
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
36
diff
changeset
|
514 | cxMempoolFree(mp); |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
515 | } |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
516 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
517 | CX_TEST_SUBROUTINE(verifyPersonRoles, CxList *persons) { |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
518 | Person *p0 = cxListAt(persons, 0); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
519 | Person *p1 = cxListAt(persons, 1); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
520 | CX_TEST_ASSERT(p0 && p1); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
521 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
522 | CX_TEST_ASSERT(cxListSize(p0->roles) == 3); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
523 | CX_TEST_ASSERT(cxListSize(p1->roles) == 1); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
524 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
525 | Role *r0 = cxListAt(p0->roles, 0); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
526 | Role *r1 = cxListAt(p0->roles, 1); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
527 | Role *r2 = cxListAt(p0->roles, 2); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
528 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
529 | Role *p1_r0 = cxListAt(p1->roles, 0); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
530 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
531 | CX_TEST_ASSERT(!cx_strcmp(r0->name, "finance")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
532 | CX_TEST_ASSERT(!cx_strcmp(r1->name, "dev")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
533 | CX_TEST_ASSERT(!cx_strcmp(r2->name, "manager")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
534 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
535 | CX_TEST_ASSERT(!cx_strcmp(p1_r0->name, "extern")); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
536 | } |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
537 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
538 | CX_TEST(testQuerySubListDense1) { |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
539 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
540 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
541 | CX_TEST_DO { |
|
40
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
542 | // select persons + a list of roles per person |
|
39
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
543 | const char *sql1 = |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
544 | "select p.*, r.role_id as [__role__role_id], r.person_id, r.name from Person p inner join Role r on p.person_id = r.person_id order by p.person_id;"; |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
545 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
546 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
547 | dbuObjectBuilderSetDenseResult(builder, true); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
548 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
549 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
550 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, false); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
551 | CX_TEST_CALL_SUBROUTINE(verifyPersonRoles, persons); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
552 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
553 | dbuObjectBuilderDestroy(builder); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
554 | } |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
555 | |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
556 | cxMempoolFree(mp); |
|
cefc18b7a9d1
add dense result test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
557 | } |
|
40
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
558 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
559 | CX_TEST(testQuerySubListDenseWithMultiTable1) { |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
560 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
561 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
562 | CX_TEST_DO { |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
563 | const char *sql1 = |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
564 | "select p.*, NULL as [__address], a.*, r.role_id as [__role__role_id], r.person_id, r.name " |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
565 | "from Person p inner join Address a on p.address_id = a.address_id " |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
566 | "inner join Role r on p.person_id = r.person_id order by p.person_id;"; |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
567 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
568 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
569 | dbuObjectBuilderSetDenseResult(builder, true); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
570 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
571 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
572 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, true); // also verify address |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
573 | CX_TEST_CALL_SUBROUTINE(verifyPersonRoles, persons); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
574 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
575 | dbuObjectBuilderDestroy(builder); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
576 | } |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
577 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
578 | cxMempoolFree(mp); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
579 | } |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
580 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
581 | CX_TEST(testQuerySubListDenseWithMultiTable2) { |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
582 | CxMempool *mp = cxMempoolCreateSimple(64); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
583 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
584 | // Same as testQuerySubListDenseWithMultiTable1, but with a different column order |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
585 | // person, role, address |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
586 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
587 | CX_TEST_DO { |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
588 | const char *sql1 = |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
589 | "select p.*, r.role_id as [__role__role_id], r.person_id, r.name, NULL as [__address], a.* " |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
590 | "from Person p inner join Address a on p.address_id = a.address_id " |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
591 | "inner join Role r on p.person_id = r.person_id order by p.person_id;"; |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
592 | DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
593 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
594 | dbuObjectBuilderSetDenseResult(builder, true); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
595 | CxList *persons = dbuObjectBuilderGetList(builder); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
596 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
597 | CX_TEST_CALL_SUBROUTINE(verifyMultiTableResult, persons, true); // also verify address |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
598 | CX_TEST_CALL_SUBROUTINE(verifyPersonRoles, persons); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
599 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
600 | dbuObjectBuilderDestroy(builder); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
601 | } |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
602 | |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
603 | cxMempoolFree(mp); |
|
0b6bc15d022e
add tests for selecting multible tables + list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
604 | } |