test/main.c

Wed, 10 Dec 2025 18:36:02 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 10 Dec 2025 18:36:02 +0100
changeset 28
e46f9f254fcd
parent 26
dc36aa437249
permissions
-rw-r--r--

implement json child object serialization

0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2017 Olaf Wintermann. All rights reserved.
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1a157da63d7c add API for registering types and simple SQLite proof of concept
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
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBLIITY OF SUCH DAMAGE.
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <sqlite3.h>
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include <dbutils/dbutils.h>
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <dbutils/sqlite.h>
3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
34 #include <dbutils/db.h>
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
36 #include <cx/test.h>
8
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
37 #include <cx/buffer.h>
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
38 #include <cx/printf.h>
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
39
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
40 #include "database.h"
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 25
diff changeset
41 #include "json.h"
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
42
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 const char *sql_create_table_person =
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 "create table if not exists Person ("
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 "person_id integer primary key autoincrement, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 "name text, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 "email text, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 "age integer, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 "iscustomer integer , "
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
50 "hash integer, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
51 "address_id integer);";
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
52
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
53 const char *sql_create_table_address =
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
54 "create table if not exists Address ("
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
55 "address_id integer primary key autoincrement, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
56 "street text, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
57 "zip text, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
58 "city text);";
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
59
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
60 const char *sql_create_table_role =
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
61 "create table if not exists Role ("
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
62 "role_id integer primary key autoincrement, "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
63 "person_id integer, "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
64 "name text);";
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
65
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 const char *sql_check_table =
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 "select person_id from Person limit 1;";
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
70 const char *sql_create_test_data1 =
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
71 "insert into address (street, zip, city) "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
72 "values "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
73 "('street 1', '12343', 'city 17'), "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
74 "('street 2', '23456', 'city 18');";
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
75
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
76 const char *sql_create_test_data2 =
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
77 "insert into person (name, email, age, iscustomer, hash, address_id) "
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 "values "
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
79 "('alice', 'alice@example.com', 30, 0, 123456789, (select address_id from address where street = 'street 1')), "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
80 "('bob', 'bob@example.com', 25, 1, 987654321, (select address_id from address where street = 'street 2'));";
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
81
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
82 const char *sql_create_test_data3 =
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
83 "insert into role (person_id, name) "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
84 "values "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
85 "(1, 'finance'), "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
86 "(1, 'dev'), "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
87 "(1, 'manager'), "
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
88 "(2, 'extern');";
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
89
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
90 typedef struct Address {
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
91 int64_t address_id;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
92
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
93 cxmutstr street;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
94 cxmutstr zip;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
95 cxmutstr city;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
96 } Address;
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 typedef struct Person {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 int64_t person_id;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 cxmutstr name;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 cxmutstr email;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 int age;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 bool iscustomer;
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
105 uint64_t hash;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
106
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
107 Address *address;
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
108
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
109 CxList *roles;
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 } Person;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
112 typedef struct Role {
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
113 int64_t role_id;
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
114 int64_t person_id;
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
115 cxmutstr name;
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
116 } Role;
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
117
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
118
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 static int create_test_data(sqlite3 *db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 int main(int argc, char **argv) {
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
122 CxTestSuite *suite = cx_test_suite_new("dbu");
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 25
diff changeset
124 init_json_tests();
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
125 #ifdef DBU_SQLITE
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
126 if(init_test_db() || init_db_tests()) {
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
127 return 1;
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
128 }
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
129
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
130 cx_test_register(suite, testSqliteConnection);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
131 cx_test_register(suite, testConnectionExec);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
132 cx_test_register(suite, testSingleValueQuery);
24
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
133 cx_test_register(suite, testSqlExec);
df671b62538e add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 23
diff changeset
134 cx_test_register(suite, testSqlExecParam);
25
0bb91d1f9bba add single table query test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 24
diff changeset
135 cx_test_register(suite, testSingleTableQuery);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
136 #endif
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 25
diff changeset
137 cx_test_register(suite, testObjectToJsonSimple);
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
138 cx_test_register(suite, testObjectToJsonChildObj);
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
139
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
140 cx_test_run_stdout(suite);
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
141
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
142
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
143 #ifdef DBU_SQLITE
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
144 cleanup_db_tests();
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
145 #endif
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 25
diff changeset
146 cleanup_json_tests();
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
147
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
148 /*
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 DBUContext *ctx = dbuContextCreate();
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
152 DBUClass *address = dbuRegisterClass(ctx, "address", Address, address_id);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
153 dbuClassAdd(address, Address, street);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
154 dbuClassAdd(address, Address, zip);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
155 dbuClassAdd(address, Address, city);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
156
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
157 DBUClass *role = dbuRegisterClass(ctx, "role", Role, role_id);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
158
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 DBUClass *person = dbuRegisterClass(ctx, "person", Person, person_id);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 dbuClassAdd(person, Person, name);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 dbuClassAdd(person, Person, email);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 dbuClassAdd(person, Person, age);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 dbuClassAdd(person, Person, iscustomer);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 dbuClassAdd(person, Person, hash);
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
165 dbuClassAddObj(person, "address_id", offsetof(Person, address), address);
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
166 dbuClassAddCxLinkedList(person, "person_id", offsetof(Person, roles), role);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
168 dbuClassAddForeignKey(role, Role, person_id, person);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
169 dbuClassAdd(role, Role, name);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 // Open or create the database
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 sqlite3 *db;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 int rc = sqlite3_open("test.db", &db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 if(rc != SQLITE_OK) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 if(create_test_data(db)) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183
3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
184 DBUConnection *conn = dbuSQLiteConnectionFromDB(db, true);
12
421555fa9ce4 add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 11
diff changeset
185
421555fa9ce4 add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 11
diff changeset
186 // test dbuConnectionExec
421555fa9ce4 add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 11
diff changeset
187 int execResult = dbuConnectionExec(conn, "drop table if exists test_table;");
421555fa9ce4 add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 11
diff changeset
188 printf("exec result: %d\n\n", execResult);
421555fa9ce4 add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 11
diff changeset
189
14
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
190
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
191 // single value query
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
192 DBUQuery *q0 = conn->createQuery(conn, NULL);
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
193 dbuQuerySetSQL(q0, "select 'hello world';");
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
194 q0->exec(q0);
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
195 DBUResult *r0 = q0->getResult(q0);
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
196 char *str;
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
197 if(!dbuResultAsValue(r0, &str)) {
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
198 printf("single query value: %s\n\n", str);
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
199 free(str);
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
200 }
59e62e65182c add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 12
diff changeset
201
3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
202 DBUQuery *query = conn->createQuery(conn, NULL);
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
203 dbuQuerySetSQL(query, "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;");
4
1908c8b1599f add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
204
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
205 DBUQuery *roleQuery = conn->createQuery(conn, NULL);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
206 dbuQuerySetSQL(roleQuery, "select * from role;");
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
207
10
80f9d007cb52 implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
208 DBUQuery *query2 = conn->createQuery(conn, NULL);
11
0aa8cbd7912e refactor dbuObjectExecuteQuery: replace multiple lists with a single ll list
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 10
diff changeset
209 dbuQuerySetSQL(query2, "select p.*, a.address_id as [__address__address_id], a.street, a.zip, a.city, r.role_id as [__role__role_id], r.person_id, r.name from Person p inner join Address a on p.address_id = a.address_id left join Role r on p.person_id = r.person_id order by p.person_id, r.role_id;");
10
80f9d007cb52 implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
210
80f9d007cb52 implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
211 DBUObjectBuilder *builder = dbuObjectBuilder(person, query2, cxDefaultAllocator);
80f9d007cb52 implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
212 dbuObjectBuilderSetDenseResult(builder, true);
80f9d007cb52 implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 8
diff changeset
213 //dbuObjectBuilderAddAdditionalQuery(builder, role, roleQuery);
4
1908c8b1599f add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
214 CxList *persons = dbuObjectBuilderGetList(builder);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
215 if(persons) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
216 CxIterator i = cxListIterator(persons);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
217 cx_foreach(Person *, p, i) {
8
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
218 CxBuffer rolebuffer;
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
219 cxBufferInit(&rolebuffer, NULL, 256, 0, CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS);
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
220 cxBufferPut(&rolebuffer, '[');
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
221 if(p->roles) {
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
222 CxIterator r = cxListIterator(p->roles);
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
223 char *addseparator = "";
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
224 cx_foreach(Role *, role, r) {
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
225 cx_bprintf(&rolebuffer, "%s{ role_id = %d, name = \"%s\"}", addseparator, role->role_id, role->name.ptr);
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
226 addseparator = ", ";
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
227 }
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
228 }
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
229 cxBufferPut(&rolebuffer, ']');
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
230 cxBufferPut(&rolebuffer, 0);
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
231 printf("{ person_id = %" PRId64 ", name = \"%s\", email = \"%s\", age = %d, iscustomer = %s, hash = %" PRIu64 " roles = %s }\n",
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
232 p->person_id, p->name.ptr, p->email.ptr, p->age, p->iscustomer ? "true" : "false", p->hash, rolebuffer.space);
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
233
bd08116b8af4 add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 7
diff changeset
234 cxBufferDestroy(&rolebuffer);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
235 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
236 } else {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
237 fprintf(stderr, "Error\n");
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
238 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
239
3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
240 conn->free(conn);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
241
23
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
242 */
b26390e77237 add first tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 14
diff changeset
243
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
244 return 0;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
245 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
246
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
247 static int create_test_data(sqlite3 *db) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
248 char *err_msg = NULL;
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
249 sqlite3_stmt *stmt;
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
250 int rc = sqlite3_prepare_v2(db, sql_check_table, -1, &stmt, 0);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
251 if(rc == SQLITE_OK) {
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
252 return 0;
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
253 }
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
254
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
255 rc = sqlite3_exec(db, sql_create_table_person, 0, 0, &err_msg);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
256 if(rc != SQLITE_OK) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
257 fprintf(stderr, "SQLite error: %s\n", err_msg);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
258 sqlite3_free(err_msg);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
259 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
260 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
262
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
263 rc = sqlite3_exec(db, sql_create_table_address, 0, 0, &err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
264 if(rc != SQLITE_OK) {
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
265 fprintf(stderr, "SQLite error: %s\n", err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
266 sqlite3_free(err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
267 sqlite3_close(db);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
268 return 1;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
269 }
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
270
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
271 rc = sqlite3_exec(db, sql_create_table_role, 0, 0, &err_msg);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
272 if(rc != SQLITE_OK) {
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
273 fprintf(stderr, "SQLite error: %s\n", err_msg);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
274 sqlite3_free(err_msg);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
275 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
276 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
278
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
279 rc = sqlite3_exec(db, sql_create_test_data1, 0, 0, &err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
280 if(rc != SQLITE_OK) {
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
281 fprintf(stderr, "SQLite error: %s\n", err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
282 sqlite3_free(err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
283 sqlite3_close(db);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
284 return 1;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
285 }
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
286
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
287 rc = sqlite3_exec(db, sql_create_test_data2, 0, 0, &err_msg);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
288 if(rc != SQLITE_OK) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
289 fprintf(stderr, "SQLite error: %s\n", err_msg);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
290 sqlite3_free(err_msg);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
291 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
292 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
293 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
294
7
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
295 rc = sqlite3_exec(db, sql_create_test_data3, 0, 0, &err_msg);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
296 if(rc != SQLITE_OK) {
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
297 fprintf(stderr, "SQLite error: %s\n", err_msg);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
298 sqlite3_free(err_msg);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
299 sqlite3_close(db);
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
300 return 1;
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
301 }
c98ff52cd806 prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 5
diff changeset
302
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
303 return 0;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
304 }

mercurial