dbutils/dbutils/db.h

Sun, 08 Dec 2024 15:46:03 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 08 Dec 2024 15:46:03 +0100
changeset 3
69ea9040d896
child 4
1908c8b1599f
permissions
-rw-r--r--

add DB abstraction layer

3
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2024 Olaf Wintermann. All rights reserved.
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
69ea9040d896 add DB abstraction layer
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
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #ifndef LIBDBU_DB_H
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #define LIBDBU_DB_H
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include "dbutils.h"
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #ifdef __cplusplus
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 extern "C" {
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #endif
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 typedef struct DBUConnection DBUConnection;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 typedef struct DBUQuery DBUQuery;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 typedef struct DBUResult DBUResult;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 typedef enum DBUFieldType DBUFieldType;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 enum DBUFieldType {
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 DBU_FIELD_NULL = 0,
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 DBU_FIELD_TEXT,
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 DBU_FIELD_INT,
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 DBU_FIELD_DOUBLE,
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 DBU_FIELD_BINARY
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 };
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 typedef struct DBUBytes {
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 const unsigned char *bytes;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 size_t length;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 } DBUBytes;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 struct DBUConnection {
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 DBUQuery* (*createQuery)(DBUConnection *connection, const CxAllocator *a);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 int (*isActive)(DBUConnection *connection);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 void (*free)(DBUConnection *connection);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 void *data;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 };
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 struct DBUQuery {
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 int (*setSQL)(DBUQuery *q, const char *sql);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 int (*setParamString)(DBUQuery *q, int index, cxstring str);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 int (*setParamInt)(DBUQuery *q, int index, int i);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 int (*setParamInt64)(DBUQuery *q, int index, int64_t i);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 int (*setParamDouble)(DBUQuery *q, int index, double d);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 int (*setParamNull)(DBUQuery *q, int index);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 int (*setParamBytes)(DBUQuery *q, int index, void *bytes, int len);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 int (*exec)(DBUQuery *q);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 DBUResult* (*getResult)(DBUQuery *q);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 void (*free)(DBUQuery *q);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 DBUConnection *connection;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 const CxAllocator *allocator;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 };
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 struct DBUResult {
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 int (*optional_numRows)(DBUResult *result);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 int (*numFields)(DBUResult *result);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 int (*hasData)(DBUResult *result);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 int (*isOk)(DBUResult *result);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 int (*nextRow)(DBUResult *result);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 const char* (*fieldName)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 DBUFieldType (*fieldType)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 int (*isNull)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 cxstring (*getText)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 int64_t (*optional_getInt)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 double (*optional_getDouble)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 DBUBytes (*optional_getBinary)(DBUResult *result, int field);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 void (*free)(DBUResult *result);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 const CxAllocator *allocator;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 int rowIndex;
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 };
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 int dbuQuerySetSQL(DBUQuery *q, const char *sql);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 int dbuQuerySetParamString(DBUQuery *q, int index, cxstring str);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 int dbuQuerySetParamInt(DBUQuery *q, int index, int i);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 int dbuQuerySetParamInt64(DBUQuery *q, int index, int64_t i);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 int dbuQuerySetParamDouble(DBUQuery *q, int index, double d);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 int dbuQuerySetParamNull(DBUQuery *q, int index);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 int dbuQuerySetParamBytes(DBUQuery *q, int index, void *bytes, int len);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 int dbuQueryExec(DBUQuery *q);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 DBUResult* dbuQueryGetResult(DBUQuery *q);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 void dbuQueryFree(DBUQuery *q);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 CxList* dbuQuerySingleType(DBUContext *ctx, DBUQuery *query, const char *type);
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 #ifdef __cplusplus
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 }
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 #endif
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 #endif /* LIBDBU_DB_H */
69ea9040d896 add DB abstraction layer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117

mercurial