annotate lib/db.c @ 20:f98ea578b1ef

misc: revamp database
author David Demelier <markand@malikania.fr>
date Tue, 19 Jul 2022 21:52:42 +0200
parents de4bf839b565
children dd078aea5d02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * db.c -- scid database access
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2021 David Demelier <markand@malikania.fr>
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdlib.h>
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <string.h>
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <sqlite3.h>
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <utlist.h>
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include "db.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include "log.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include "types.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include "util.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include "sql/init.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include "sql/job-add.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include "sql/job-todo.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #include "sql/jobresult-add.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #include "sql/project-add.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include "sql/project-update.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #include "sql/project-find.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include "sql/project-find-id.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #include "sql/project-list.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 #include "sql/worker-add.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #include "sql/worker-find.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 #include "sql/worker-find-id.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #include "sql/worker-list.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #define CHAR(v) (const char *)(v)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 static sqlite3 *db;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 struct list {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
51 void (*unpack)(sqlite3_stmt *, void *);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 void *data;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 size_t datasz;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 size_t elemwidth;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
57 static void
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
58 project_unpacker(sqlite3_stmt *stmt, void *data)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
60 struct project *project = data;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
62 project->id = sqlite3_column_int(stmt, 0);
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
63 project->name = util_strdup(CHAR(sqlite3_column_text(stmt, 1)));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
64 project->desc = util_strdup(CHAR(sqlite3_column_text(stmt, 2)));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
65 project->url = util_strdup(CHAR(sqlite3_column_text(stmt, 3)));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
66 project->script = util_strdup(CHAR(sqlite3_column_text(stmt, 4)));
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 static void
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
70 worker_unpacker(sqlite3_stmt *stmt, void *data)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
72 struct worker *w = data;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
74 w->id = sqlite3_column_int(stmt, 0);
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
75 w->name = util_strdup(CHAR(sqlite3_column_text(stmt, 1)));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
76 w->desc = util_strdup(CHAR(sqlite3_column_text(stmt, 2)));
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 static void
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
80 job_unpacker(sqlite3_stmt *stmt, void *data)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
82 struct job *job = data;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 job->id = sqlite3_column_int(stmt, 0);
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
85 job->tag = util_strdup(CHAR(sqlite3_column_text(stmt, 1)));
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 job->project_id = sqlite3_column_int(stmt, 2);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 static void
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 vbind(sqlite3_stmt *stmt, const char *fmt, va_list ap)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 for (int index = 1; *fmt; ++fmt) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 switch (*fmt) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 case 'i':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 sqlite3_bind_int(stmt, index++, va_arg(ap, int));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 break;
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
97 case 'j':
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
98 sqlite3_bind_int64(stmt, index++, va_arg(ap, intmax_t));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
99 break;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 case 's':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 sqlite3_bind_text(stmt, index++, va_arg(ap, const char *), -1, SQLITE_STATIC);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 case 'z':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 sqlite3_bind_int64(stmt, index++, va_arg(ap, size_t));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 default:
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 static int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 insert(const char *sql, const char *fmt, ...)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 assert(sql);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 assert(fmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 sqlite3_stmt *stmt = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 va_list ap;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 int ret = -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 va_start(ap, fmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 vbind(stmt, fmt, ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 va_end(ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 if (sqlite3_step(stmt) != SQLITE_DONE)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 log_warn("db: %s", sqlite3_errmsg(db));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 else
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 ret = sqlite3_last_insert_rowid(db);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
133
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 sqlite3_finalize(stmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
135
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 return ret;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
138
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 static int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 update(const char *sql, const char *fmt, ...)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 assert(sql);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 assert(fmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
144
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 sqlite3_stmt *stmt = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 va_list ap;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 int ret = 1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
151
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 va_start(ap, fmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 vbind(stmt, fmt, ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 va_end(ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
155
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 if (sqlite3_step(stmt) != SQLITE_DONE)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 log_warn("db: %s", sqlite3_errmsg(db));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 else
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 ret = 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 sqlite3_finalize(stmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 return ret;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 static ssize_t
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 list(struct list *sel, const char *sql, const char *args, ...)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 sqlite3_stmt *stmt = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 va_list ap;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 int step;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 ssize_t ret = -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 size_t tot = 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
178
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 va_start(ap, args);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 vbind(stmt, args, ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 va_end(ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 while (tot < sel->datasz && (step = sqlite3_step(stmt)) == SQLITE_ROW)
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
184 sel->unpack(stmt, (unsigned char *)sel->data + (tot++ * sel->elemwidth));
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
185
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 if (step == SQLITE_OK || step == SQLITE_DONE || step == SQLITE_ROW)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 ret = tot;
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
188 else
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 memset(sel->data, 0, sel->datasz * sel->elemwidth);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 sqlite3_finalize(stmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
192
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 return ret;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
195
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 db_open(const char *path)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 assert(path);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
200
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 if (sqlite3_open(path, &db) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 return log_warn("db: open error: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 /* Wait for 30 seconds to lock the database. */
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 sqlite3_busy_timeout(db, 30000);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
206
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 if (sqlite3_exec(db, CHAR(sql_init), NULL, NULL, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 return log_warn("db: initialization error: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
209
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 return 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
212
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 db_project_add(struct project *p)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 return (p->id = insert(CHAR(sql_project_add), "ssss", p->name, p->desc,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 p->url, p->script)) < 0 ? -1 : 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
219
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 db_project_update(const struct project *p)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 assert(p);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
224
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 return update(CHAR(sql_project_update), "ssssi", p->name, p->desc,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 p->url, p->script, p->id);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
228
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 ssize_t
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
230 db_project_list(struct project *projects, size_t projectsz)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
233 .unpack = project_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 .data = projects,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 .datasz = projectsz,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 .elemwidth = sizeof (*projects),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
238
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 return list(&sel, CHAR(sql_project_list), "z", projectsz);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
241
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 int
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
243 db_project_find(struct project *project, const char *name)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
246 .unpack = project_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 .data = project,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 .datasz = 1,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 .elemwidth = sizeof (*project),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
252 return list(&sel, CHAR(sql_project_find), "s", name) == 1 ? 0 : -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
254
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 int
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
256 db_project_find_id(struct project *project, intmax_t id)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
259 .unpack = project_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 .data = project,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 .datasz = 1,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 .elemwidth = sizeof (*project),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
264
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
265 return list(&sel, CHAR(sql_project_find_id), "i", id) == 1 ? 0 : -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
267
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 db_worker_add(struct worker *wk)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 assert(wk);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
272
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 return (wk->id = insert(CHAR(sql_worker_add), "ss", wk->name, wk->desc)) < 0 ? -1 : 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
275
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 ssize_t
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
277 db_worker_list(struct worker *wk, size_t wksz)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 assert(wk);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
280
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
282 .unpack = worker_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 .data = wk,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 .datasz = wksz,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 .elemwidth = sizeof (*wk),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
287
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 return list(&sel, CHAR(sql_worker_list), "z", wksz);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
290
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 int
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
292 db_worker_find(struct worker *wk, const char *name)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
295 .unpack = worker_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 .data = wk,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 .datasz = 1,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 .elemwidth = sizeof (*wk),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
300
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
301 return list(&sel, CHAR(sql_worker_find), "s", name) == 1 ? 0 : -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
303
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 int
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
305 db_worker_find_id(struct worker *wk, intmax_t id)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
308 .unpack = worker_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 .data = wk,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 .datasz = 1,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 .elemwidth = sizeof (*wk),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
313
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
314 return list(&sel, CHAR(sql_worker_find_id), "i", id) == 1 ? 0 : -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
316
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 db_job_add(struct job *job)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 assert(job);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
321
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 return (job->id = insert(CHAR(sql_job_add),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 "si", job->tag, job->project_id)) < 0 ? -1 : 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
325
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 ssize_t
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
327 db_job_todo(struct job *jobs, size_t jobsz, int worker_id)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 assert(jobs);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
330
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
331 struct list sel = {
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
332 .unpack = job_unpacker,
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 .data = jobs,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
334 .datasz = jobsz,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 .elemwidth = sizeof (*jobs),
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 };
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
337
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 return list(&sel, CHAR(sql_job_todo), "iiz", worker_id, worker_id, jobsz);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 db_jobresult_add(struct jobresult *r)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 assert(r);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
345
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
346 return (r->id = insert(CHAR(sql_jobresult_add), "iiis", r->job_id,
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 r->worker_id, r->exitcode, r->log)) < 0 ? -1 : 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
349
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 void
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 db_finish(void)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 if (db) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 sqlite3_close(db);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 db = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 }