test/database.c

Wed, 04 Feb 2026 20:00:54 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 04 Feb 2026 20:00:54 +0100
changeset 52
8503be5eea49
parent 51
e3163dc41a80
permissions
-rw-r--r--

add testMultiTableQuery3

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;
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 typedef struct Address {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 int64_t address_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 cxmutstr street;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 cxmutstr zip;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 } Address;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 typedef struct Person {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 int64_t person_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 cxmutstr name;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 cxmutstr email;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 int age;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 bool iscustomer;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 uint64_t hash;
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 Address *address;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 CxList *roles;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 } Person;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 typedef struct Role {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 int64_t role_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 int64_t person_id;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 cxmutstr name;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 } Role;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 int init_db_tests(void) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 ctx = dbuContextCreate();
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 dbuClassAdd(address, Address, street);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 dbuClassAdd(address, Address, zip);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 dbuClassAdd(person, Person, name);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 dbuClassAdd(person, Person, email);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 dbuClassAdd(person, Person, age);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 dbuClassAdd(person, Person, iscustomer);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 dbuClassAddCxLinkedList(person, "person_id", offsetof(Person, roles), role);
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 dbuClassAddForeignKey(role, Role, person_id, person);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 dbuClassAdd(role, Role, name);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 return 0;
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 void cleanup_db_tests(void) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 if(conn) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 dbuConnectionFree(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200 dbuContextFree(ctx);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203 CX_TEST(testSqliteConnection) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 CX_TEST_DO {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205 conn = dbuSQLiteConnection(TEST_DB);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
206 CX_TEST_ASSERT(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
207 CX_TEST_ASSERT(dbuConnectionIsActive(conn));
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
208 }
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
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
211 CX_TEST(testSingleValueQuery) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
212 CX_TEST_DO {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213 CX_TEST_ASSERT(conn);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
215 DBUQuery *q = dbuConnectionQuery(conn, NULL);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
216 CX_TEST_ASSERT(q);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
217 CX_TEST_ASSERT(dbuQuerySetSQL(q, "select 12;") == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
218 CX_TEST_ASSERT(dbuQueryExec(q) == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
219
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
220 DBUResult *r = dbuQueryGetResult(q);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
221 CX_TEST_ASSERT(r);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
222 int value;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
223 CX_TEST_ASSERT(dbuResultAsValue(r, &value) == 0);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
224 CX_TEST_ASSERT(value == 12);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
225
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
226 dbuQueryFree(q);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
227
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
228 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
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 }

mercurial