Tue, 09 Dec 2025 14:33:26 +0100
add dbuSqlExec API
|
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 | 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 | 40 | #include "database.h" |
| 41 | ||
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | 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
|
43 | "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
|
44 | "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
|
45 | "name text, " |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | "email text, " |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | "age integer, " |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | "iscustomer integer , " |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
49 | "hash integer, " |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
50 | "address_id integer);"; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
51 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
52 | 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
|
53 | "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
|
54 | "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
|
55 | "street text, " |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
56 | "zip text, " |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
57 | "city text);"; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
58 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
59 | const char *sql_create_table_role = |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
60 | "create table if not exists Role (" |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
61 | "role_id integer primary key autoincrement, " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
62 | "person_id integer, " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
63 | "name text);"; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
64 | |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | 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
|
67 | "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
|
68 | |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
69 | 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
|
70 | "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
|
71 | "values " |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
72 | "('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
|
73 | "('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
|
74 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
75 | 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
|
76 | "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
|
77 | "values " |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
78 | "('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
|
79 | "('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
|
80 | |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
81 | const char *sql_create_test_data3 = |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
82 | "insert into role (person_id, name) " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
83 | "values " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
84 | "(1, 'finance'), " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
85 | "(1, 'dev'), " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
86 | "(1, 'manager'), " |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
87 | "(2, 'extern');"; |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
88 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
89 | typedef struct Address { |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
90 | int64_t address_id; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
91 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
92 | cxmutstr street; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
93 | cxmutstr zip; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
94 | cxmutstr city; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
95 | } Address; |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | typedef struct Person { |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | 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
|
99 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | cxmutstr name; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | cxmutstr email; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | int age; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | bool iscustomer; |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
104 | uint64_t hash; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
105 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
106 | Address *address; |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
107 | |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
108 | CxList *roles; |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | } Person; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
111 | typedef struct Role { |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
112 | int64_t role_id; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
113 | int64_t person_id; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
114 | cxmutstr name; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
115 | } Role; |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
116 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
117 | |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | 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
|
119 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
120 | int main(int argc, char **argv) { |
| 23 | 121 | 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
|
122 | |
| 23 | 123 | #ifdef DBU_SQLITE |
| 124 | if(init_test_db() || init_db_tests()) { | |
| 125 | return 1; | |
| 126 | } | |
| 127 | ||
| 128 | cx_test_register(suite, testSqliteConnection); | |
| 129 | cx_test_register(suite, testConnectionExec); | |
| 130 | cx_test_register(suite, testSingleValueQuery); | |
|
24
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
131 | cx_test_register(suite, testSqlExec); |
|
df671b62538e
add dbuSqlExec API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
132 | cx_test_register(suite, testSqlExecParam); |
| 23 | 133 | #endif |
| 134 | ||
| 135 | cx_test_run_stdout(suite); | |
| 136 | ||
| 137 | ||
| 138 | #ifdef DBU_SQLITE | |
| 139 | cleanup_db_tests(); | |
| 140 | #endif | |
| 141 | ||
| 142 | /* | |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
143 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
144 | DBUContext *ctx = dbuContextCreate(); |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
145 | |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
146 | 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
|
147 | dbuClassAdd(address, Address, street); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
148 | dbuClassAdd(address, Address, zip); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
149 | dbuClassAdd(address, Address, city); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
150 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
151 | DBUClass *role = dbuRegisterClass(ctx, "role", Role, role_id); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
152 | |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
153 | 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
|
154 | 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
|
155 | 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
|
156 | 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
|
157 | 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
|
158 | 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
|
159 | dbuClassAddObj(person, "address_id", offsetof(Person, address), address); |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
160 | 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
|
161 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
162 | dbuClassAddForeignKey(role, Role, person_id, person); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
163 | 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
|
164 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
165 | // 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
|
166 | sqlite3 *db; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | 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
|
168 | 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
|
169 | 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
|
170 | sqlite3_close(db); |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | return 1; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | 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
|
175 | return 1; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
178 | DBUConnection *conn = dbuSQLiteConnectionFromDB(db, true); |
|
12
421555fa9ce4
add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
11
diff
changeset
|
179 | |
|
421555fa9ce4
add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
11
diff
changeset
|
180 | // test dbuConnectionExec |
|
421555fa9ce4
add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
11
diff
changeset
|
181 | int execResult = dbuConnectionExec(conn, "drop table if exists test_table;"); |
|
421555fa9ce4
add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
11
diff
changeset
|
182 | printf("exec result: %d\n\n", execResult); |
|
421555fa9ce4
add dbuConnectionExec
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
11
diff
changeset
|
183 | |
|
14
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
184 | |
|
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
185 | // single value query |
|
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
186 | 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
|
187 | 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
|
188 | q0->exec(q0); |
|
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
189 | 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
|
190 | char *str; |
|
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
191 | 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
|
192 | 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
|
193 | free(str); |
|
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
194 | } |
|
59e62e65182c
add convenience functions for getting a single value from results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
12
diff
changeset
|
195 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
196 | 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
|
197 | 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
|
198 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
199 | DBUQuery *roleQuery = conn->createQuery(conn, NULL); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
200 | dbuQuerySetSQL(roleQuery, "select * from role;"); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
201 | |
|
10
80f9d007cb52
implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
8
diff
changeset
|
202 | 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
|
203 | 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
|
204 | |
|
80f9d007cb52
implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
8
diff
changeset
|
205 | DBUObjectBuilder *builder = dbuObjectBuilder(person, query2, cxDefaultAllocator); |
|
80f9d007cb52
implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
8
diff
changeset
|
206 | dbuObjectBuilderSetDenseResult(builder, true); |
|
80f9d007cb52
implement dense results
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
8
diff
changeset
|
207 | //dbuObjectBuilderAddAdditionalQuery(builder, role, roleQuery); |
|
4
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
208 | 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
|
209 | if(persons) { |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
210 | 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
|
211 | 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
|
212 | CxBuffer rolebuffer; |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
213 | 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
|
214 | cxBufferPut(&rolebuffer, '['); |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
215 | if(p->roles) { |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
216 | 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
|
217 | char *addseparator = ""; |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
218 | 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
|
219 | 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
|
220 | addseparator = ", "; |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
221 | } |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
222 | } |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
223 | cxBufferPut(&rolebuffer, ']'); |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
224 | cxBufferPut(&rolebuffer, 0); |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
225 | 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
|
226 | 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
|
227 | |
|
bd08116b8af4
add support for list members to the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
7
diff
changeset
|
228 | cxBufferDestroy(&rolebuffer); |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | } else { |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | 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
|
232 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
234 | 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
|
235 | |
| 23 | 236 | */ |
| 237 | ||
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | return 0; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
239 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
240 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
241 | 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
|
242 | char *err_msg = NULL; |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
243 | sqlite3_stmt *stmt; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
244 | 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
|
245 | if(rc == SQLITE_OK) { |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
246 | return 0; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
247 | } |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
248 | |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
249 | 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
|
250 | 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
|
251 | 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
|
252 | 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
|
253 | sqlite3_close(db); |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
254 | return 1; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
255 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
256 | |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
257 | 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
|
258 | if(rc != SQLITE_OK) { |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
259 | 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
|
260 | sqlite3_free(err_msg); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
261 | sqlite3_close(db); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
262 | return 1; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
263 | } |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
264 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
265 | 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
|
266 | if(rc != SQLITE_OK) { |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
267 | fprintf(stderr, "SQLite error: %s\n", err_msg); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
268 | 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
|
269 | sqlite3_close(db); |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
270 | return 1; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
271 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
272 | |
|
5
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
273 | 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
|
274 | if(rc != SQLITE_OK) { |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
275 | 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
|
276 | sqlite3_free(err_msg); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
277 | sqlite3_close(db); |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
278 | return 1; |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
279 | } |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
280 | |
|
f0c66b2139ea
add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
4
diff
changeset
|
281 | 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
|
282 | 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
|
283 | 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
|
284 | 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
|
285 | sqlite3_close(db); |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
286 | return 1; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
287 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
288 | |
|
7
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
289 | 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
|
290 | if(rc != SQLITE_OK) { |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
291 | fprintf(stderr, "SQLite error: %s\n", err_msg); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
292 | sqlite3_free(err_msg); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
293 | sqlite3_close(db); |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
294 | return 1; |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
295 | } |
|
c98ff52cd806
prepare for list members
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
5
diff
changeset
|
296 | |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
297 | return 0; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
298 | } |