test/main.c

Wed, 11 Dec 2024 20:57:19 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 11 Dec 2024 20:57:19 +0100
changeset 5
f0c66b2139ea
parent 4
1908c8b1599f
child 7
c98ff52cd806
permissions
-rw-r--r--

add support for child objects in the object builder

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
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 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
37 "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
38 "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
39 "name text, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 "email text, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 "age integer, "
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 "iscustomer integer , "
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
43 "hash integer, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
44 "address_id integer);";
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
45
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
46 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
47 "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
48 "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
49 "street text, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
50 "zip text, "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
51 "city text);";
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
52
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 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
55 "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
56
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
57
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
58
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
59 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
60 "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
61 "values "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
62 "('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
63 "('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
64
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
65 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
66 "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
67 "values "
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
68 "('alice', 'alice@example.com', 30, 1, 123456789, (select address_id from address where street = 'street 1')), "
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
69 "('bob', 'bob@example.com', 25, 0, 987654321, (select address_id from address where street = 'street 2'));";
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
70
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
71 typedef struct Address {
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
72 int64_t address_id;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
73
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
74 cxmutstr street;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
75 cxmutstr zip;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
76 cxmutstr city;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
77 } Address;
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 typedef struct Person {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 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
81
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 cxmutstr name;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 cxmutstr email;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 int age;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 bool iscustomer;
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
86 uint64_t hash;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
87
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
88 Address *address;
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 } Person;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
5
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
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 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
94
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 int main(int argc, char **argv) {
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
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 DBUContext *ctx = dbuContextCreate();
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
100 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
101 dbuClassAdd(address, Address, street);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
102 dbuClassAdd(address, Address, zip);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
103 dbuClassAdd(address, Address, city);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
104
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 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
106 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
107 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
108 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
109 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
110 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
111 dbuClassAddObj(person, "address_id", offsetof(Person, address), address);
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 // 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
115 sqlite3 *db;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 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
117 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
118 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
119 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 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
124 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126
3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
127 DBUConnection *conn = dbuSQLiteConnectionFromDB(db, true);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
128 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
129 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
130
1908c8b1599f add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
131 DBUObjectBuilder *builder = dbuObjectBuilder(person, query, cxDefaultAllocator);
1908c8b1599f add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 3
diff changeset
132 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
133 if(persons) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 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
135 cx_foreach(Person *, p, i) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 printf("{ person_id = %" PRId64 ", name = \"%s\", email = \"%s\", age = %d, iscustomer = %s, hash = %" PRIu64 " }\n",
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 p->person_id, p->name.ptr, p->email.ptr, p->age, p->iscustomer ? "true" : "false", p->hash);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 } else {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 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
141 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142
3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
143 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
144
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 return 0;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 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
149 char *err_msg = NULL;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 int rc = sqlite3_exec(db, sql_create_table_person, 0, 0, &err_msg);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 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
152 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
153 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
154 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
158 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
159 if(rc != SQLITE_OK) {
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
160 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
161 sqlite3_free(err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
162 sqlite3_close(db);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
163 return 1;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
164 }
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
165
0
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 sqlite3_stmt *stmt;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 rc = sqlite3_prepare_v2(db, sql_check_table, -1, &stmt, 0);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 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
170 fprintf(stderr, "SQLite error: %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
171 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 return 1;
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
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 int exists = 0;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 if(sqlite3_step(stmt) == SQLITE_ROW) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 exists = 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 sqlite3_finalize(stmt);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 if(exists) {
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 return 0;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184
5
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
185 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
186 if(rc != SQLITE_OK) {
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
187 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
188 sqlite3_free(err_msg);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
189 sqlite3_close(db);
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
190 return 1;
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
191 }
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
192
f0c66b2139ea add support for child objects in the object builder
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
193 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
194 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
195 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
196 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
197 sqlite3_close(db);
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 return 1;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 }
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 return 0;
1a157da63d7c add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202 }

mercurial