Mon, 09 Dec 2024 23:47:52 +0100
add new object builder 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 2024 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 | * POSSIBILITY 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 | #ifdef DBU_SQLITE |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include "sqlite.h" |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | #include "db.h" |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | #include <string.h> |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | #include <stdlib.h> |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | #include <cx/array_list.h> |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
39 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
40 | DBUConnection* dbuSQLiteConnection(const char *filename) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
41 | sqlite3 *db; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
42 | int rc = sqlite3_open(filename, &db); |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | 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
|
44 | return NULL; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
47 | DBUConnection *conn = dbuSQLiteConnectionFromDB(db, true); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
48 | if(!conn) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
49 | sqlite3_close(db); |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | } |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
51 | return conn; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
52 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
53 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
54 | DBUConnection* dbuSQLiteConnectionFromDB(sqlite3 *db, bool autoclose) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
55 | DBUSQLiteConnection *connection = malloc(sizeof(DBUSQLiteConnection)); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
56 | if(!connection) { |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | return NULL; |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | } |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
59 | memset(connection, 0, sizeof(DBUSQLiteConnection)); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
60 | connection->connection.createQuery = dbuSQLiteConnCreateQuery; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
61 | connection->connection.isActive = dbuSQLiteConnIsActive; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
62 | connection->connection.free = dbuSQLiteConnFree; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
63 | connection->connection.data = db; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
64 | connection->db = db; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
65 | connection->autoclose = autoclose; |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
67 | return (DBUConnection*)connection; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
68 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
69 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
70 | /* ------------------- SQLite Connection Implementation -------------------*/ |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
71 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
72 | DBUQuery* dbuSQLiteConnCreateQuery(DBUConnection *connection, const CxAllocator *a) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
73 | DBUSQLiteQuery *query = malloc(sizeof(DBUSQLiteQuery)); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
74 | if(!query) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
75 | return NULL; |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | } |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
77 | memset(query, 0, sizeof(DBUSQLiteQuery)); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
78 | query->query.allocator = a; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
79 | query->query.connection = connection; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
80 | query->query.setSQL = dbuSQLiteQuerySetSQL; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
81 | query->query.setParamString = dbuSQLiteQuerySetParamString; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
82 | query->query.setParamInt = dbuSQLiteQuerySetParamInt; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
83 | query->query.setParamInt64 = dbuSQLiteQuerySetParamInt64; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
84 | query->query.setParamDouble = dbuSQLiteQuerySetParamDouble; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
85 | query->query.setParamNull = dbuSQLiteQuerySetParamNull; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
86 | query->query.setParamBytes = dbuSQLiteQuerySetParamBytes; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
87 | query->query.exec = dbuSQLiteQueryExec; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
88 | query->query.getResult = dbuSQLiteQueryGetResult; |
|
4
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
89 | query->query.reset = dbuSQLiteQueryReset; |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
90 | query->query.free = dbuSQLiteQueryFree; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
91 | query->db = connection->data; |
|
4
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
92 | query->query.ref = 1; |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
93 | return (DBUQuery*)query; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
94 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
95 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
96 | int dbuSQLiteConnIsActive(DBUConnection *connection) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
97 | return 1; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
98 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
99 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
100 | void dbuSQLiteConnFree(DBUConnection *connection) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
101 | DBUSQLiteConnection *sqlite = (DBUSQLiteConnection*)connection; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
102 | if(sqlite->autoclose) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
103 | sqlite3_close(sqlite->db); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
104 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
105 | free(connection); |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | |
|
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
109 | /* --------------------- SQLite Query Implementation ---------------------*/ |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
110 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
111 | int dbuSQLiteQuerySetSQL(DBUQuery *q, const char *sql) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
112 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
113 | if(query->stmt) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
114 | return 1; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
115 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
116 | return sqlite3_prepare_v2(query->db, sql, -1, &query->stmt, 0) != SQLITE_OK; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
117 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
118 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
119 | int dbuSQLiteQuerySetParamString(DBUQuery *q, int index, cxstring str) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
120 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
121 | return sqlite3_bind_text(query->stmt, index, str.ptr, str.length, NULL); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
122 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
123 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
124 | int dbuSQLiteQuerySetParamInt(DBUQuery *q, int index, int i) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
125 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
126 | return sqlite3_bind_int(query->stmt, index, i); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
127 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
128 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
129 | int dbuSQLiteQuerySetParamInt64(DBUQuery *q, int index, int64_t i) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
130 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
131 | return sqlite3_bind_int64(query->stmt, index, i); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
132 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
133 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
134 | int dbuSQLiteQuerySetParamDouble(DBUQuery *q, int index, double d) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
135 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
136 | return sqlite3_bind_double(query->stmt, index, d); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
137 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
138 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
139 | int dbuSQLiteQuerySetParamNull(DBUQuery *q, int index) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
140 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
141 | return sqlite3_bind_null(query->stmt, index); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
142 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
143 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
144 | int dbuSQLiteQuerySetParamBytes(DBUQuery *q, int index, void *bytes, int len) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
145 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
146 | return sqlite3_bind_blob(query->stmt, index, bytes, len, NULL); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
147 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
148 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
149 | int dbuSQLiteQueryExec(DBUQuery *q) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
150 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
151 | int step = sqlite3_step(query->stmt); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
152 | if(step == SQLITE_ROW || step == SQLITE_DONE) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
153 | query->step = step; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
154 | return 0; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
155 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
156 | return 1; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
157 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
158 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
159 | DBUResult* dbuSQLiteQueryGetResult(DBUQuery *q) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
160 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
161 | if(query->result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
162 | return (DBUResult*)query->result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
163 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
164 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
165 | DBUSQLiteResult *result = malloc(sizeof(DBUSQLiteResult)); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
166 | if(!result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
167 | return NULL; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
168 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
169 | memset(result, 0, sizeof(DBUSQLiteResult)); |
|
4
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
170 | query->query.ref++; |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
171 | result->query = query; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
172 | query->result = result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
173 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
174 | result->result.optional_numRows = NULL; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
175 | result->result.numFields = dbuSQLiteResultNumFields; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
176 | result->result.hasData = dbuSQLiteResultHasData; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
177 | result->result.isOk = dbuSQLiteResultIsOk; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
178 | result->result.nextRow = dbuSQLiteResultNextRow; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
179 | result->result.fieldName = dbuSQLiteResultFieldName; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
180 | result->result.fieldType = dbuSQLiteResultFieldType; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
181 | result->result.isNull = dbuSQLiteResultIsNull; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
182 | result->result.getText = dbuSQLiteResultGetText; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
183 | result->result.optional_getInt = dbuSQLiteResultGetInt; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
184 | result->result.optional_getDouble = dbuSQLiteResultGetDouble; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
185 | result->result.optional_getBinary = dbuSQLiteResultGetBinary; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
186 | result->result.free = dbuSQLiteResultFree; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
187 | result->result.allocator = q->allocator; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
188 | result->stmt = query->stmt; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
189 | result->step = query->step; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
190 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
191 | return (DBUResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
192 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
193 | |
|
4
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
194 | int dbuSQLiteQueryReset(DBUQuery *q) { |
|
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
195 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
196 | // TODO |
|
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
197 | return 0; |
|
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
198 | } |
|
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
199 | |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
200 | void dbuSQLiteQueryFree(DBUQuery *q) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
201 | DBUSQLiteQuery *query = (DBUSQLiteQuery*)q; |
|
4
1908c8b1599f
add new object builder API
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
202 | if(--query->query.ref > 0) { |
|
3
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
203 | return; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
204 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
205 | sqlite3_finalize(query->stmt); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
206 | free(query); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
207 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
208 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
209 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
210 | /* --------------------- SQLite Result Implementation ---------------------*/ |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
211 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
212 | int dbuSQLiteResultNumFields(DBUResult *result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
213 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
214 | return sqlite3_column_count(r->stmt); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
215 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
216 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
217 | int dbuSQLiteResultHasData(DBUResult *result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
218 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
219 | return r->step == SQLITE_ROW; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
220 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
221 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
222 | int dbuSQLiteResultIsOk(DBUResult *result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
223 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
224 | return r->step == SQLITE_DONE; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
225 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
226 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
227 | int dbuSQLiteResultNextRow(DBUResult *result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
228 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
229 | r->step = sqlite3_step(r->stmt); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
230 | int done = r->step == SQLITE_DONE; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
231 | r->result.rowIndex++; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
232 | return done; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
233 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
234 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
235 | const char* dbuSQLiteResultFieldName(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
236 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
237 | return sqlite3_column_name(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
238 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
239 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
240 | DBUFieldType dbuSQLiteResultFieldType(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
241 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
242 | int type = sqlite3_column_type(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
243 | DBUFieldType dbuType; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
244 | switch(type) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
245 | default: dbuType = DBU_FIELD_TEXT; break; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
246 | case SQLITE_INTEGER: dbuType = DBU_FIELD_INT; break; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
247 | case SQLITE_FLOAT: dbuType = DBU_FIELD_DOUBLE; break; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
248 | case SQLITE_TEXT: dbuType = DBU_FIELD_TEXT; break; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
249 | case SQLITE_BLOB: dbuType = DBU_FIELD_BINARY; break; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
250 | case SQLITE_NULL: dbuType = DBU_FIELD_NULL; break; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
251 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
252 | return dbuType; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
253 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
254 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
255 | int dbuSQLiteResultIsNull(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
256 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
257 | return sqlite3_column_type(r->stmt, field) == SQLITE_NULL; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
258 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
259 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
260 | cxstring dbuSQLiteResultGetText(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
261 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
262 | const char *s = (const char*)sqlite3_column_text(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
263 | size_t len = (size_t)sqlite3_column_bytes(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
264 | return cx_strn(s, len); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
265 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
266 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
267 | int64_t dbuSQLiteResultGetInt(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
268 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
269 | return sqlite3_column_int64(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
270 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
271 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
272 | double dbuSQLiteResultGetDouble(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
273 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
274 | return sqlite3_column_double(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
275 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
276 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
277 | DBUBytes dbuSQLiteResultGetBinary(DBUResult *result, int field) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
278 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
279 | const unsigned char *s = sqlite3_column_blob(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
280 | size_t len = (size_t)sqlite3_column_bytes(r->stmt, field); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
281 | return (DBUBytes) { s, len }; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
282 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
283 | |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
284 | void dbuSQLiteResultFree(DBUResult *result) { |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
285 | DBUSQLiteResult *r = (DBUSQLiteResult*)result; |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
286 | r->query->query.free((DBUQuery*)r->query); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
287 | free(r); |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
288 | } |
|
69ea9040d896
add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
289 | |
|
0
1a157da63d7c
add API for registering types and simple SQLite proof of concept
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | #endif /* DBU_SQLITE */ |