annotate scid/db.c @ 85:cf49ab595e2e default tip @

sciworkerd: avoid spawning several tasks
author David Demelier <markand@malikania.fr>
date Thu, 09 Mar 2023 10:43:48 +0100
parents 71cd8447e3a4
children
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 *
80
71cd8447e3a4 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 66
diff changeset
4 * Copyright (c) 2021-2023 David Demelier <markand@malikania.fr>
19
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 "util.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include "sql/init.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include "sql/job-add.h"
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
33 #include "sql/job-list.h"
19
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"
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
36 #include "sql/jobresult-list-by-job-group.h"
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
37 #include "sql/jobresult-list-by-job.h"
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
38 #include "sql/jobresult-list-by-worker.h"
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include "sql/project-find.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #include "sql/project-list.h"
22
dd078aea5d02 misc: use project/worker name as primary key
David Demelier <markand@malikania.fr>
parents: 20
diff changeset
41 #include "sql/project-save.h"
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
42 #include "sql/property-get.h"
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
43 #include "sql/property-set.h"
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #include "sql/worker-find.h"
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 #include "sql/worker-list.h"
22
dd078aea5d02 misc: use project/worker name as primary key
David Demelier <markand@malikania.fr>
parents: 20
diff changeset
46 #include "sql/worker-save.h"
19
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 #define CHAR(v) (const char *)(v)
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 static sqlite3 *db;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
52 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
53 project_packer(sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
54 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
55 return json_pack("{ss ss ss ss sI}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
56 "name", sqlite3_column_text(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
57 "desc", sqlite3_column_text(stmt, 1),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
58 "url", sqlite3_column_text(stmt, 2),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
59 "script", sqlite3_column_text(stmt, 3),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
60 "date", (json_int_t)sqlite3_column_int64(stmt, 4)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
61 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
62 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
63
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
64 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
65 project_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
66 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
67 const char *name, *desc, *url, *script;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
68 int ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
69
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
70 ret = json_unpack(doc, "{ss ss ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
71 "name", &name,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
72 "desc", &desc,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
73 "url", &url,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
74 "script", &script
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
75 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
76
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
77 if (ret < 0)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
78 return -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
80 sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
81 sqlite3_bind_text(stmt, 2, desc, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
82 sqlite3_bind_text(stmt, 3, url, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
83 sqlite3_bind_text(stmt, 4, script, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
84
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
85 return 0;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
86 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
87
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
88 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
89 worker_packer(sqlite3_stmt *stmt)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
91 return json_pack("{ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
92 "name", sqlite3_column_text(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
93 "desc", sqlite3_column_text(stmt, 1)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
94 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
95 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
97 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
98 worker_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
99 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
100 const char *name, *desc;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
101 int ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
102
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
103 ret = json_unpack(doc, "{ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
104 "name", &name,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
105 "desc", &desc
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
106 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
107
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
108 if (ret < 0)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
109 return -1;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
110
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
111 sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
112 sqlite3_bind_text(stmt, 2, desc, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
113
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
114 return 0;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
117 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
118 job_packer(sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
119 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
120 return json_pack("{sI ss ss sI}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
121 "id", (json_int_t)sqlite3_column_int64(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
122 "tag", sqlite3_column_text(stmt, 1),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
123 "project_name", sqlite3_column_text(stmt, 2),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
124 "date", (json_int_t)sqlite3_column_int64(stmt, 3)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
125 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
126 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
127
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
128 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
129 job_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
130 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
131 const char *tag, *project_name;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
132 int ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
133
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
134 ret = json_unpack(doc, "{ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
135 "tag", &tag,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
136 "project_name", &project_name
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
137 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
138
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
139 if (ret)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
140 return -1;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
141
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
142 sqlite3_bind_text(stmt, 1, tag, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
143 sqlite3_bind_text(stmt, 2, project_name, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
144
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
145 return 0;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
146 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
147
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
148 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
149 jobresult_packer(sqlite3_stmt *stmt)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
151 return json_pack("{sI sI ss ss si si sI}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
152 "id", (json_int_t)sqlite3_column_int64(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
153 "job_id", (json_int_t)sqlite3_column_int64(stmt, 1),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
154 "worker_name", sqlite3_column_text(stmt, 2),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
155 "console", sqlite3_column_text(stmt, 3),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
156 "exitcode", sqlite3_column_int(stmt, 4),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
157 "sigcode", sqlite3_column_int(stmt, 5),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
158 "date", (json_int_t)sqlite3_column_int64(stmt, 6)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
159 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
160 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
161
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
162 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
163 jobresult_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
164 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
165 json_int_t job_id;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
166 int exitcode, sigcode, ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
167 const char *worker_name, *console;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
169 ret = json_unpack(doc, "{sI ss ss si si}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
170 "job_id", &job_id,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
171 "worker_name", &worker_name,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
172 "console", &console,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
173 "exitcode", &exitcode,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
174 "sigcode", &sigcode
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
175 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
176
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
177 if (ret < 0)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
178 return -1;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
179
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
180 sqlite3_bind_int64(stmt, 1, job_id);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
181 sqlite3_bind_text(stmt, 2, worker_name, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
182 sqlite3_bind_text(stmt, 3, console, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
183 sqlite3_bind_int(stmt, 4, exitcode);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
184 sqlite3_bind_int(stmt, 5, sigcode);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
185
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
186 return 0;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
188
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 static void
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
190 bind_params_va(sqlite3_stmt *stmt, const char *fmt, va_list ap)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 for (int index = 1; *fmt; ++fmt) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 switch (*fmt) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 case 'i':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 sqlite3_bind_int(stmt, index++, va_arg(ap, int));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 break;
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
197 case 'j':
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
198 sqlite3_bind_int64(stmt, index++, va_arg(ap, intmax_t));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
199 break;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 case 's':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 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
202 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 case 'z':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 sqlite3_bind_int64(stmt, index++, va_arg(ap, size_t));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 default:
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 }
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 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
211
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
212 static void
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
213 bind_params(sqlite3_stmt *stmt, const char *fmt, ...)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
214 {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
215 va_list ap;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
216
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
217 va_start(ap, fmt);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
218 bind_params_va(stmt, fmt, ap);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
219 va_end(ap);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
220 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
221
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 static int
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
223 insert(int (*binder)(json_t *, sqlite3_stmt *), json_t *obj, const char *sql)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
225 assert(binder);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
226 assert(obj);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 assert(sql);
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 sqlite3_stmt *stmt = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
233
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
234 if (binder(obj, stmt))
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
235 log_warn("db: unable to bind parameter");
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
236 else {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
237 if (sqlite3_step(stmt) != SQLITE_DONE)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
238 log_warn("db: %s", sqlite3_errmsg(db));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
239 else
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
240 json_object_set(obj, "id", json_integer(sqlite3_last_insert_rowid(db)));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
241 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
242
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 sqlite3_finalize(stmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
245 return 0;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
246 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
247
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
248 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
249 listva(json_t * (*unpacker)(sqlite3_stmt *), const char *sql, const char *args, va_list ap)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
250 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
251 sqlite3_stmt *stmt = NULL;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
252 json_t *array, *obj;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
253
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
254 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
255 return log_warn("db: %s", sqlite3_errmsg(db)), NULL;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
256
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
257 bind_params_va(stmt, args, ap);
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
258 array = json_array();
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
259
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
260 while (sqlite3_step(stmt) == SQLITE_ROW)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
261 if ((obj = unpacker(stmt)))
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
262 json_array_append(array, obj);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
263
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
264 sqlite3_finalize(stmt);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
265
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
266 return array;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
267 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
268
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
269 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
270 list(json_t * (*unpacker)(sqlite3_stmt *), const char *sql, const char *args, ...)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
271 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
272 va_list ap;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
273 json_t *ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
274
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
275 va_start(ap, args);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
276 ret = listva(unpacker, sql, args, ap);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
277 va_end(ap);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
278
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 return ret;
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
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
282 /*
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
283 * Same as list but the array should have only one element that we extract for
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
284 * convenience.
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
285 */
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
286 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
287 get(json_t * (*unpacker)(sqlite3_stmt *), const char *sql, const char *args, ...)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 va_list ap;
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
290 json_t *ret, *obj = NULL;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
291
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 va_start(ap, args);
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
293 ret = listva(unpacker, sql, args, ap);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 va_end(ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
295
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
296 if (json_array_size(ret) == 1) {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
297 obj = json_array_get(ret, 0);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
298 json_incref(obj);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
299 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
300
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
301 if (ret)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
302 json_decref(ret);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
303
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
304 return obj;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
306
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
307 static int
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
308 get_property(const char *which, char *out, size_t outsz)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
309 {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
310 sqlite3_stmt *stmt;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
311 const char *val;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
312 int ret;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
313
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
314 if (sqlite3_prepare(db, CHAR(sql_property_get), -1, &stmt, NULL) != SQLITE_OK)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
315 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
316
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
317 bind_params(stmt, "s", which);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
318
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
319 switch (sqlite3_step(stmt)) {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
320 case SQLITE_ROW:
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
321 val = CHAR(sqlite3_column_text(stmt, 0));
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
322 util_strlcpy(out, val, outsz);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
323 ret = 1;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
324 break;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
325 case SQLITE_DONE:
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
326 /* No data. */
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
327 ret = 0;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
328 break;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
329 default:
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
330 /* Error. */
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
331 log_warn("db: %s", sqlite3_errmsg(db));
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
332 ret = -1;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
333 break;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
334 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
335
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
336 sqlite3_finalize(stmt);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
337
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
338 return ret;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
339 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
340
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
341 static int
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
342 set_property(const char *which, const char *val)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
343 {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
344 sqlite3_stmt *stmt;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
345 int ret = -1;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
346
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
347 if (sqlite3_prepare(db, CHAR(sql_property_set), -1, &stmt, NULL) != SQLITE_OK)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
348 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
349
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
350 bind_params(stmt, "ss", which, val);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
351
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
352 if (sqlite3_step(stmt) != SQLITE_DONE)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
353 log_warn("db: %s", sqlite3_errmsg(db));
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
354 else
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
355 ret = 0;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
356
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
357 sqlite3_finalize(stmt);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
358
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
359 return ret;
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
360 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
361
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 db_open(const char *path)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
365 assert(path);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
366
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 if (sqlite3_open(path, &db) != SQLITE_OK)
66
5076be758687 misc: update before 0.1.0 release
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
368 return log_warn("db: %s: %s", path, sqlite3_errmsg(db)), -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
369
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 /* Wait for 30 seconds to lock the database. */
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 sqlite3_busy_timeout(db, 30000);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
372
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 if (sqlite3_exec(db, CHAR(sql_init), NULL, NULL, NULL) != SQLITE_OK)
66
5076be758687 misc: update before 0.1.0 release
David Demelier <markand@malikania.fr>
parents: 44
diff changeset
374 return log_warn("db: %s: initialization error: %s", path, sqlite3_errmsg(db)), -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
375
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
376 return 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
378
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
379 int
44
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
380 db_key_init(char *out, size_t outsz)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
381 {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
382 assert(out);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
383
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
384 const char table[] = "abcdefghijklmnopqrstuvwxyz1234567890";
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
385
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
386 for (size_t i = 0; i < outsz - 1; ++i)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
387 out[i] = table[rand() % (sizeof (table) - 1)];
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
388
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
389 return set_property("api-key", out);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
390 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
391
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
392 int
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
393 db_key_get(char *out, size_t outsz)
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
394 {
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
395 assert(out);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
396
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
397 return get_property("api-key", out, outsz);
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
398 }
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
399
576f4b1ec79f scid: implement API authentication
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
400 int
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
401 db_job_add(json_t *job)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
402 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 assert(job);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
404
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
405 return insert(job_binder, job, CHAR(sql_job_add));
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
406 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
407
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
408 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
409 db_job_todo(const char *worker)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
411 assert(worker);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
412
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
413 return list(job_packer, CHAR(sql_job_todo), "ss", worker, worker);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
415
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
416 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
417 db_job_list(const char *project)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
418 {
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
419 assert(project);
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
420
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
421 return list(job_packer, CHAR(sql_job_list), "s", project);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
422 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
423
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
424 int
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
425 db_jobresult_add(json_t *res)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
426 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
427 assert(res);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
428
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
429 return insert(jobresult_binder, res, CHAR(sql_jobresult_add));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
430 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
431
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
432 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
433 db_jobresult_list_by_job(intmax_t job_id)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
434 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
435 return list(jobresult_packer, CHAR(sql_jobresult_list_by_job), "j", job_id);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
436 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
437
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
438 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
439 db_jobresult_list_by_job_group(intmax_t job_id)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
440 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
441 return list(jobresult_packer, CHAR(sql_jobresult_list_by_job_group), "j", job_id);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
442 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
443
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
444 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
445 db_jobresult_list_by_worker(const char *worker)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
446 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
447 assert(worker);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
448
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
449 return list(jobresult_packer, CHAR(sql_jobresult_list_by_worker), "s", worker);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
450 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
451
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
452 int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
453 db_project_save(json_t *p)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
454 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
455 assert(p);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
456
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
457 return insert(project_binder, p, CHAR(sql_project_save));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
458 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
459
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
460 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
461 db_project_list(void)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
462 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
463 return list(project_packer, CHAR(sql_project_list), "");
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
464 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
465
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
466 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
467 db_project_find(const char *name)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
468 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
469 return get(project_packer, CHAR(sql_project_find), "s", name);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
470 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
471
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
472 int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
473 db_worker_save(json_t *wk)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
474 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
475 assert(wk);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
476
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
477 return insert(worker_binder, wk, CHAR(sql_worker_save));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
478 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
479
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
480 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
481 db_worker_list(void)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
482 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
483 return list(worker_packer, CHAR(sql_worker_list), "");
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
484 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
485
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
486 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
487 db_worker_find(const char *name)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
488 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
489 assert(name);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
490
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
491 return get(worker_packer, CHAR(sql_worker_find), "s", name);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
492 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
493
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
494 void
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
495 db_finish(void)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
496 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
497 if (db) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
498 sqlite3_close(db);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
499 db = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
500 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
501 }