test/database.c

Wed, 31 Dec 2025 15:40:44 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 31 Dec 2025 15:40:44 +0100
changeset 35
16731869cc05
parent 34
0d2291e77d32
child 36
93753b036d9f
permissions
-rw-r--r--

fix that NULL as __tabname did not work as table separator in queries

23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBLIITY OF SUCH DAMAGE.
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "database.h"
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <stdio.h>
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include <stdlib.h>
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <errno.h>
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include <unistd.h>
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include <cx/buffer.h>
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 #define TEST_DB "test.db"
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 #define TEST_DATA_FILE "testdata.sql"
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 // create test.db and execute testdata script
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 int init_test_db(void) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 sqlite3 *db;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 char *err_msg = NULL;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 FILE *f = fopen(TEST_DATA_FILE, "r");
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 if(!f) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 fprintf(stderr, "Cannot open test data file %s: %s\n", TEST_DATA_FILE, strerror(errno));
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 if(unlink(TEST_DB)) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 if(errno != ENOENT) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 fprintf(stderr, "Cannot unlink %s: %s\n", TEST_DB, strerror(errno));
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 fclose(f);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 return 1;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 if(sqlite3_open(TEST_DB, &db) != SQLITE_OK) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 fprintf(stderr, "Cannot open database %s: %s\n", TEST_DB, sqlite3_errmsg(db));
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 fclose(f);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 return 1;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66
31
287484519844 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
67 CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 2048, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 cx_stream_copy(f, buf, (cx_read_func)fread, (cx_write_func)cxBufferWrite);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 int err = 0;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 if(buf->size > 0) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 cxBufferTerminate(buf);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 if(sqlite3_exec(db, buf->space, 0, 0, &err_msg) != SQLITE_OK) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 fprintf(stderr, "SQL error: %s\n", err_msg);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 sqlite3_free(err_msg);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 err = 1;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 } else {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 fprintf(stderr, "Error: no file content\n");
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 err = 1;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 cxBufferFree(buf);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 sqlite3_close(db);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 return err;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 static DBUContext *ctx;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 static DBUConnection *conn;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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;
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
97
33
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
98 typedef struct Country {
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
99 int64_t country_id;
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
100 cxmutstr name;
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
101 } Country;
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
102
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 typedef struct Address {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 int64_t address_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 cxmutstr street;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 cxmutstr zip;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 cxmutstr city;
33
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
109
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
110 Country *country;
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 } Address;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 typedef struct Person {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 int64_t person_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 cxmutstr name;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 cxmutstr email;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 int age;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 bool iscustomer;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 uint64_t hash;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 Address *address;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 CxList *roles;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 } Person;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 typedef struct Role {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 int64_t role_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 int64_t person_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 cxmutstr name;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 } Role;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 int init_db_tests(void) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 ctx = dbuContextCreate();
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135
33
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
136 country = dbuRegisterClass(ctx, "country", Country, country_id);
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
137 dbuClassAdd(country, Country, name);
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
138
25
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
139 address = dbuRegisterClass(ctx, "address", Address, address_id);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 dbuClassAdd(address, Address, street);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 dbuClassAdd(address, Address, zip);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 dbuClassAdd(address, Address, city);
33
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
143 dbuClassAddObj(address, "country_id", offsetof(Address, country), country);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144
25
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
145 role = dbuRegisterClass(ctx, "role", Role, role_id);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146
25
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
147 person = dbuRegisterClass(ctx, "person", Person, person_id);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 dbuClassAdd(person, Person, name);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 dbuClassAdd(person, Person, email);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 dbuClassAdd(person, Person, age);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 dbuClassAdd(person, Person, iscustomer);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 dbuClassAdd(person, Person, hash);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 dbuClassAddObj(person, "address_id", offsetof(Person, address), address);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 dbuClassAddCxLinkedList(person, "person_id", offsetof(Person, roles), role);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 dbuClassAddForeignKey(role, Role, person_id, person);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 dbuClassAdd(role, Role, name);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 return 0;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 void cleanup_db_tests(void) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 if(conn) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 dbuConnectionFree(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 dbuContextFree(ctx);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 CX_TEST(testSqliteConnection) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 CX_TEST_DO {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 conn = dbuSQLiteConnection(TEST_DB);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 CX_TEST_ASSERT(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 CX_TEST_ASSERT(dbuConnectionIsActive(conn));
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 CX_TEST(testConnectionExec) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 CX_TEST_DO {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 CX_TEST_ASSERT(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 int t1 = dbuConnectionExec(conn, "create table ExecTest1(a int);");
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 CX_TEST_ASSERT(t1 == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184 int t2 = dbuConnectionExec(conn, "insert into ExecTest1(a) values (1);");
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 CX_TEST_ASSERT(t2 == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187 int t3 = dbuConnectionExec(conn, "drop table ExecTest1;");
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 CX_TEST_ASSERT(t3 == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 int fail = dbuConnectionExec(conn, "select * from Fail;");
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191 CX_TEST_ASSERT(fail != 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195 CX_TEST(testSingleValueQuery) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 CX_TEST_DO {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 CX_TEST_ASSERT(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 DBUQuery *q = dbuConnectionQuery(conn, NULL);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200 CX_TEST_ASSERT(q);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 CX_TEST_ASSERT(dbuQuerySetSQL(q, "select 12;") == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202 CX_TEST_ASSERT(dbuQueryExec(q) == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 DBUResult *r = dbuQueryGetResult(q);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205 CX_TEST_ASSERT(r);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
206 int value;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
207 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
208 CX_TEST_ASSERT(value == 12);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
209
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
210 dbuQueryFree(q);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
211
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
212 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213 }
24
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
214
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
215 CX_TEST(testSqlExec) {
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
216 CX_TEST_DO {
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
217 CX_TEST_ASSERT(conn);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
218
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
219 DBUResult *r = dbuSqlExec(conn, NULL, "select email from person where name = 'alice';");
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
220 CX_TEST_ASSERT(r);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
221 cxmutstr value;
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
222 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
223 CX_TEST_ASSERT(!cx_strcmp(value, "alice@example.com"));
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
224 free(value.ptr);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
225 }
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
226 }
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
227
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
228 CX_TEST(testSqlExecParam) {
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
229 CX_TEST_DO {
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
230 CX_TEST_ASSERT(conn);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
231
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
232 DBUResult *r = dbuSqlExecParam(conn, NULL, "select email from person where name = ?;", "alice");
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
233 CX_TEST_ASSERT(r);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
234 cxmutstr value;
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
235 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
236 CX_TEST_ASSERT(!cx_strcmp(value, "alice@example.com"));
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
237 free(value.ptr);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
238
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
239 r = dbuSqlExecParam(conn, NULL, "select name from person where hash = ?;", 987654321);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
240 CX_TEST_ASSERT(r);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
241 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
242 CX_TEST_ASSERT(!cx_strcmp(value, "bob"));
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
243 free(value.ptr);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
244 }
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
245 }
25
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
246
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
247 CX_TEST(testSingleTableQuery) {
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
248 CxMempool *mp = cxMempoolCreateSimple(64);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
249
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
250 CX_TEST_DO {
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
251 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
252 DBUObjectBuilder *builder = dbuObjectBuilder(address, query, mp->allocator);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
253 CxList *adr = dbuObjectBuilderGetList(builder);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
254
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
255 CX_TEST_ASSERT(adr);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
256 CX_TEST_ASSERT(cxListSize(adr) == 2);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
257
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
258 Address *a0 = cxListAt(adr, 0);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
259 Address *a1 = cxListAt(adr, 1);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
260 CX_TEST_ASSERT(a0);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
261 CX_TEST_ASSERT(a1);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
262 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
263 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
264 CX_TEST_ASSERT(!cx_strcmp(a0->zip, "12343"));
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
265 CX_TEST_ASSERT(!cx_strcmp(a1->zip, "23456"));
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
266 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
267 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
268
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 25
diff changeset
269 dbuObjectBuilderDestroy(builder);
25
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
270 }
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
271
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
272 cxMempoolFree(mp);
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
273 }
32
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
274
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
275 CX_TEST(testMultiTableQuery) {
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
276 CxMempool *mp = cxMempoolCreateSimple(64);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
277
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
278 CX_TEST_DO {
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
279 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
280 DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql1);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
281 DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
282 CxList *persons = dbuObjectBuilderGetList(builder);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
283
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
284 CX_TEST_ASSERT(persons);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
285 CX_TEST_ASSERT(cxListSize(persons) == 2);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
286
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
287 Person *p0 = cxListAt(persons, 0);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
288 Person *p1 = cxListAt(persons, 1);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
289 CX_TEST_ASSERT(p0);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
290 CX_TEST_ASSERT(p1);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
291 CX_TEST_ASSERT(!cx_strcmp(p0->name, "alice"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
292 CX_TEST_ASSERT(!cx_strcmp(p1->name, "bob"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
293 CX_TEST_ASSERT(!cx_strcmp(p0->email, "alice@example.com"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
294 CX_TEST_ASSERT(!cx_strcmp(p1->email, "bob@example.com"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
295 CX_TEST_ASSERT(p0->age == 30);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
296 CX_TEST_ASSERT(p1->age == 25);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
297 CX_TEST_ASSERT(p0->iscustomer == 0);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
298 CX_TEST_ASSERT(p1->iscustomer == 1);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
299 CX_TEST_ASSERT(p0->hash == 123456789);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
300 CX_TEST_ASSERT(p1->hash == 987654321);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
301
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
302 CX_TEST_ASSERT(p0->address != NULL);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
303 CX_TEST_ASSERT(p1->address != NULL);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
304
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
305 CX_TEST_ASSERT(!cx_strcmp(p0->address->street, "street 1"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
306 CX_TEST_ASSERT(!cx_strcmp(p1->address->street, "street 2"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
307 CX_TEST_ASSERT(!cx_strcmp(p0->address->zip, "12343"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
308 CX_TEST_ASSERT(!cx_strcmp(p1->address->zip, "23456"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
309 CX_TEST_ASSERT(!cx_strcmp(p0->address->city, "city 17"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
310 CX_TEST_ASSERT(!cx_strcmp(p1->address->city, "city 18"));
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
311
33
106ff84c18ed extend multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 32
diff changeset
312 dbuObjectBuilderDestroy(builder);
32
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
313 }
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
314
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
315 cxMempoolFree(mp);
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
316 }
6bd927c1cb11 add test for multi table queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 31
diff changeset
317
34
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
318 CX_TEST(testMultiTableQuery2) {
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
319 CxMempool *mp = cxMempoolCreateSimple(64);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
320
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
321 CX_TEST_DO {
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
322 const char *sql2 = "select p.*, "
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
323 "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
324 "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
325 "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
326 "order by p.person_id;";
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
327 DBUQuery *query = dbuQueryCreate(conn, mp->allocator, sql2);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
328 DBUObjectBuilder *builder = dbuObjectBuilder(person, query, mp->allocator);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
329 CxList *persons = dbuObjectBuilderGetList(builder);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
330
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
331 CX_TEST_ASSERT(persons);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
332 CX_TEST_ASSERT(cxListSize(persons) == 2);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
333
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
334 Person *p0 = cxListAt(persons, 0);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
335 Person *p1 = cxListAt(persons, 1);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
336 CX_TEST_ASSERT(p0);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
337 CX_TEST_ASSERT(p1);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
338 CX_TEST_ASSERT(!cx_strcmp(p0->name, "alice"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
339 CX_TEST_ASSERT(!cx_strcmp(p1->name, "bob"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
340 CX_TEST_ASSERT(!cx_strcmp(p0->email, "alice@example.com"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
341 CX_TEST_ASSERT(!cx_strcmp(p1->email, "bob@example.com"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
342 CX_TEST_ASSERT(p0->age == 30);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
343 CX_TEST_ASSERT(p1->age == 25);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
344 CX_TEST_ASSERT(p0->iscustomer == 0);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
345 CX_TEST_ASSERT(p1->iscustomer == 1);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
346 CX_TEST_ASSERT(p0->hash == 123456789);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
347 CX_TEST_ASSERT(p1->hash == 987654321);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
348
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
349 CX_TEST_ASSERT(p0->address != NULL);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
350 CX_TEST_ASSERT(p1->address != NULL);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
351
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
352 CX_TEST_ASSERT(!cx_strcmp(p0->address->street, "street 1"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
353 CX_TEST_ASSERT(!cx_strcmp(p1->address->street, "street 2"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
354 CX_TEST_ASSERT(!cx_strcmp(p0->address->zip, "12343"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
355 CX_TEST_ASSERT(!cx_strcmp(p1->address->zip, "23456"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
356 CX_TEST_ASSERT(!cx_strcmp(p0->address->city, "city 17"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
357 CX_TEST_ASSERT(!cx_strcmp(p1->address->city, "city 18"));
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
358
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
359 CX_TEST_ASSERT(p0->address->country);
16731869cc05 fix that NULL as __tabname did not work as table separator in queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 34
diff changeset
360 CX_TEST_ASSERT(p1->address->country);
16731869cc05 fix that NULL as __tabname did not work as table separator in queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 34
diff changeset
361 CX_TEST_ASSERT(!cx_strcmp(p0->address->country->name, "Germany"));
16731869cc05 fix that NULL as __tabname did not work as table separator in queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 34
diff changeset
362 CX_TEST_ASSERT(!cx_strcmp(p1->address->country->name, "Germany"));
16731869cc05 fix that NULL as __tabname did not work as table separator in queries
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 34
diff changeset
363
34
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
364 dbuObjectBuilderDestroy(builder);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
365 }
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
366
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
367 cxMempoolFree(mp);
0d2291e77d32 split multi table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 33
diff changeset
368 }

mercurial