Mercurial > dovecot > core-2.2
annotate src/lib-sql/sql-api.c @ 6429:65c69a53a7be HEAD
Replaced my Copyright notices. The year range always ends with 2007 now.
My name was replaced with "Dovecot authors". In many cases I didn't really
even own the copyright, so this is more correct.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 16 Sep 2007 14:34:22 +0300 |
parents | 6a64e64fa3a3 |
children | 46c3e1ee196f |
rev | line source |
---|---|
6429
65c69a53a7be
Replaced my Copyright notices. The year range always ends with 2007 now.
Timo Sirainen <tss@iki.fi>
parents:
6411
diff
changeset
|
1 /* Copyright (c) 2004-2007 Dovecot authors, see the included COPYING file */ |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
3943
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
4 #include "array.h" |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "sql-api-private.h" |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
7 #include <stdlib.h> |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
8 |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4294
diff
changeset
|
9 ARRAY_TYPE(sql_drivers) sql_drivers; |
3943
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
10 |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
11 void sql_drivers_init(void) |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
12 { |
4596
bf4e98a0de3f
Replaced ARRAY_CREATE() macro with [ipt]_array_init() macros. The macro
Timo Sirainen <tss@iki.fi>
parents:
4594
diff
changeset
|
13 i_array_init(&sql_drivers, 8); |
3943
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
14 } |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
15 |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
16 void sql_drivers_deinit(void) |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
17 { |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
18 array_free(&sql_drivers); |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
19 } |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
20 |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
21 void sql_driver_register(const struct sql_db *driver) |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
22 { |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
23 array_append(&sql_drivers, &driver, 1); |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
24 } |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
25 |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
26 void sql_driver_unregister(const struct sql_db *driver) |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
27 { |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
28 const struct sql_db *const *drivers; |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
29 unsigned int i, count; |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
30 |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
31 drivers = array_get(&sql_drivers, &count); |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
32 for (i = 0; i < count; i++) { |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
33 if (drivers[i] == driver) { |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
34 array_delete(&sql_drivers, i, 1); |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
35 break; |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
36 } |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
37 } |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
38 } |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
39 |
2757
b0e039ad5717
warning fix when not compiled with any sql drivers
Timo Sirainen <tss@iki.fi>
parents:
2754
diff
changeset
|
40 struct sql_db *sql_init(const char *db_driver, |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5496
diff
changeset
|
41 const char *connect_string ATTR_UNUSED) |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 { |
3943
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
43 const struct sql_db *const *drivers; |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
44 unsigned int i, count; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
45 |
3943
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
46 drivers = array_get(&sql_drivers, &count); |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
47 for (i = 0; i < count; i++) { |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
48 if (strcmp(db_driver, drivers[i]->name) == 0) |
cbe5c6772e0d
Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents:
3919
diff
changeset
|
49 return drivers[i]->init(connect_string); |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
50 } |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 i_fatal("Unknown database driver '%s'", db_driver); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
55 void sql_deinit(struct sql_db **db) |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 { |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
57 (*db)->deinit(*db); |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
58 *db = NULL; |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 |
3421
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
61 enum sql_db_flags sql_get_flags(struct sql_db *db) |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
62 { |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
63 return db->get_flags(db); |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
64 } |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
65 |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
66 int sql_connect(struct sql_db *db) |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
67 { |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
68 return db->connect(db); |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
69 } |
c624ffa9e6f0
Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents:
3163
diff
changeset
|
70 |
4458
3e196acd60b7
sql_escape_string() should return const char *, not char *.
Timo Sirainen <tss@iki.fi>
parents:
4451
diff
changeset
|
71 const char *sql_escape_string(struct sql_db *db, const char *string) |
4294 | 72 { |
73 return db->escape_string(db, string); | |
74 } | |
75 | |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 void sql_exec(struct sql_db *db, const char *query) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 { |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 db->exec(db, query); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 |
4903
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4596
diff
changeset
|
81 #undef sql_query |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 void sql_query(struct sql_db *db, const char *query, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 sql_query_callback_t *callback, void *context) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 { |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 db->query(db, query, callback, context); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
88 struct sql_result *sql_query_s(struct sql_db *db, const char *query) |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
89 { |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
90 return db->query_s(db, query); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
91 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
92 |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
93 void sql_result_free(struct sql_result *result) |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
94 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
95 i_free(result->map); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
96 result->v.free(result); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
97 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
98 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
99 static const struct sql_field_def * |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
100 sql_field_def_find(const struct sql_field_def *fields, const char *name) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
101 { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
102 unsigned int i; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
103 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
104 for (i = 0; fields[i].name != NULL; i++) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
105 if (strcasecmp(fields[i].name, name) == 0) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
106 return &fields[i]; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
107 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
108 return NULL; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
109 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
110 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
111 static void |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
112 sql_result_build_map(struct sql_result *result, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
113 const struct sql_field_def *fields, size_t dest_size) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
114 { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
115 const struct sql_field_def *def; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
116 const char *name; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
117 unsigned int i, count, field_size = 0; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
118 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
119 count = sql_result_get_fields_count(result); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
120 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
121 result->map_size = count; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
122 result->map = i_new(struct sql_field_map, result->map_size); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
123 for (i = 0; i < count; i++) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
124 name = sql_result_get_field_name(result, i); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
125 def = sql_field_def_find(fields, name); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
126 if (def != NULL) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
127 result->map[i].type = def->type; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
128 result->map[i].offset = def->offset; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
129 switch (def->type) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
130 case SQL_TYPE_STR: |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
131 field_size = sizeof(const char *); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
132 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
133 case SQL_TYPE_UINT: |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
134 field_size = sizeof(unsigned int); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
135 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
136 case SQL_TYPE_ULLONG: |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
137 field_size = sizeof(unsigned long long); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
138 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
139 case SQL_TYPE_BOOL: |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
140 field_size = sizeof(bool); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
141 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
142 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
143 i_assert(def->offset + field_size <= dest_size); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
144 } else { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
145 result->map[i].offset = (size_t)-1; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
146 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
147 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
148 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
149 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
150 void sql_result_setup_fetch(struct sql_result *result, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
151 const struct sql_field_def *fields, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
152 void *dest, size_t dest_size) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
153 { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
154 if (result->map == NULL) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
155 sql_result_build_map(result, fields, dest_size); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
156 result->fetch_dest = dest; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
157 result->fetch_dest_size = dest_size; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
158 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
159 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
160 static void sql_result_fetch(struct sql_result *result) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
161 { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
162 unsigned int i, count; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
163 const char *value; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
164 void *ptr; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
165 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
166 memset(result->fetch_dest, 0, result->fetch_dest_size); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
167 count = result->map_size; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
168 for (i = 0; i < count; i++) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
169 if (result->map[i].offset == (size_t)-1) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
170 continue; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
171 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
172 value = sql_result_get_field_value(result, i); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
173 ptr = STRUCT_MEMBER_P(result->fetch_dest, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
174 result->map[i].offset); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
175 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
176 switch (result->map[i].type) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
177 case SQL_TYPE_STR: { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
178 *((const char **)ptr) = value; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
179 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
180 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
181 case SQL_TYPE_UINT: { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
182 if (value != NULL) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
183 *((unsigned int *)ptr) = |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
184 strtoul(value, NULL, 10); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
185 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
186 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
187 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
188 case SQL_TYPE_ULLONG: { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
189 if (value != NULL) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
190 *((unsigned long long *)ptr) = |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
191 strtoull(value, NULL, 10); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
192 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
193 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
194 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
195 case SQL_TYPE_BOOL: { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
196 if (value != NULL && (*value == 't' || *value == '1')) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
197 *((bool *)ptr) = TRUE; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
198 break; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
199 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
200 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
201 } |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
202 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
203 |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 int sql_result_next_row(struct sql_result *result) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
206 int ret; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
207 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
208 if ((ret = result->v.next_row(result)) <= 0) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
209 return ret; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
210 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
211 if (result->fetch_dest != NULL) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
212 sql_result_fetch(result); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
213 return 1; |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
214 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
215 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
216 unsigned int sql_result_get_fields_count(struct sql_result *result) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
217 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
218 return result->v.get_fields_count(result); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
219 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
220 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
221 const char *sql_result_get_field_name(struct sql_result *result, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
222 unsigned int idx) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
223 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
224 return result->v.get_field_name(result, idx); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
225 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
226 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
227 int sql_result_find_field(struct sql_result *result, const char *field_name) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
228 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
229 return result->v.find_field(result, field_name); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
230 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
231 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
232 const char *sql_result_get_field_value(struct sql_result *result, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
233 unsigned int idx) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
234 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
235 return result->v.get_field_value(result, idx); |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
236 } |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
237 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
238 const unsigned char * |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
239 sql_result_get_field_value_binary(struct sql_result *result, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
240 unsigned int idx, size_t *size_r) |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
241 { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
242 return result->v.get_field_value_binary(result, idx, size_r); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
243 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
244 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
245 const char *sql_result_find_field_value(struct sql_result *result, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 const char *field_name) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
248 return result->v.find_field_value(result, field_name); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
250 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
251 const char *const *sql_result_get_values(struct sql_result *result) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
253 return result->v.get_values(result); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
254 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
255 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
256 const char *sql_result_get_error(struct sql_result *result) |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
257 { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
258 return result->v.get_error(result); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
259 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
260 |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
261 static void |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5496
diff
changeset
|
262 sql_result_not_connected_free(struct sql_result *result ATTR_UNUSED) |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
263 { |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
264 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
265 |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
266 static int |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5496
diff
changeset
|
267 sql_result_not_connected_next_row(struct sql_result *result ATTR_UNUSED) |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
268 { |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
269 return -1; |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
270 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
271 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
272 static const char * |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5496
diff
changeset
|
273 sql_result_not_connected_get_error(struct sql_result *result ATTR_UNUSED) |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
274 { |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
275 return "Not connected to database"; |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
276 } |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
277 |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
278 struct sql_transaction_context *sql_transaction_begin(struct sql_db *db) |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
279 { |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
280 return db->transaction_begin(db); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
281 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
282 |
4903
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4596
diff
changeset
|
283 #undef sql_transaction_commit |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
284 void sql_transaction_commit(struct sql_transaction_context **_ctx, |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
285 sql_commit_callback_t *callback, void *context) |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
286 { |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
287 struct sql_transaction_context *ctx = *_ctx; |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
288 |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
289 *_ctx = NULL; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
290 ctx->db->transaction_commit(ctx, callback, context); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
291 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
292 |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
293 int sql_transaction_commit_s(struct sql_transaction_context **_ctx, |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
294 const char **error_r) |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
295 { |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
296 struct sql_transaction_context *ctx = *_ctx; |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
297 |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
298 *_ctx = NULL; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
299 return ctx->db->transaction_commit_s(ctx, error_r); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
300 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
301 |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
302 void sql_transaction_rollback(struct sql_transaction_context **_ctx) |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
303 { |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
304 struct sql_transaction_context *ctx = *_ctx; |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
305 |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3736
diff
changeset
|
306 *_ctx = NULL; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
307 ctx->db->transaction_rollback(ctx); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
308 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
309 |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
310 void sql_update(struct sql_transaction_context *ctx, const char *query) |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
311 { |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
312 ctx->db->update(ctx, query); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
313 } |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
314 |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
315 struct sql_result sql_not_connected_result = { |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
316 MEMBER(v) { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
317 sql_result_not_connected_free, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
318 sql_result_not_connected_next_row, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
319 NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
320 sql_result_not_connected_get_error |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
321 } |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
322 }; |