annotate scid/db.c @ 37:62aefd02ac59

make: remove config.mk
author David Demelier <markand@malikania.fr>
date Sun, 07 Aug 2022 08:41:06 +0200
parents 081e1c258e64
children 576f4b1ec79f
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 *
32
081e1c258e64 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 27
diff changeset
4 * Copyright (c) 2021-2022 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"
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
36 #include "sql/jobresult-list-by-job.h"
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
37 #include "sql/jobresult-list-by-job-group.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"
19
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-list.h"
22
dd078aea5d02 misc: use project/worker name as primary key
David Demelier <markand@malikania.fr>
parents: 20
diff changeset
44 #include "sql/worker-save.h"
19
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
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
50 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
51 project_packer(sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
52 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
53 return json_pack("{ss ss ss ss sI}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
54 "name", sqlite3_column_text(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
55 "desc", sqlite3_column_text(stmt, 1),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
56 "url", sqlite3_column_text(stmt, 2),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
57 "script", sqlite3_column_text(stmt, 3),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
58 "date", (json_int_t)sqlite3_column_int64(stmt, 4)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
59 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
60 }
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 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
63 project_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
64 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
65 const char *name, *desc, *url, *script;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
66 int ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
67
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
68 ret = json_unpack(doc, "{ss ss ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
69 "name", &name,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
70 "desc", &desc,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
71 "url", &url,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
72 "script", &script
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
73 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
74
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
75 if (ret < 0)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
76 return -1;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
78 sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
79 sqlite3_bind_text(stmt, 2, desc, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
80 sqlite3_bind_text(stmt, 3, url, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
81 sqlite3_bind_text(stmt, 4, script, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
82
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
83 return 0;
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
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
86 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
87 worker_packer(sqlite3_stmt *stmt)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
89 return json_pack("{ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
90 "name", sqlite3_column_text(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
91 "desc", sqlite3_column_text(stmt, 1)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
92 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
93 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
95 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
96 worker_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
97 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
98 const char *name, *desc;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
99 int ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
100
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
101 ret = json_unpack(doc, "{ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
102 "name", &name,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
103 "desc", &desc
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
104 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
105
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
106 if (ret < 0)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
107 return -1;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
108
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
109 sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
110 sqlite3_bind_text(stmt, 2, desc, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
111
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
112 return 0;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
114
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
115 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
116 job_packer(sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
117 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
118 return json_pack("{sI ss ss sI}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
119 "id", (json_int_t)sqlite3_column_int64(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
120 "tag", sqlite3_column_text(stmt, 1),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
121 "project_name", sqlite3_column_text(stmt, 2),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
122 "date", (json_int_t)sqlite3_column_int64(stmt, 3)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
123 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
124 }
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 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
127 job_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
128 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
129 const char *tag, *project_name;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
130 int ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
131
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
132 ret = json_unpack(doc, "{ss ss}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
133 "tag", &tag,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
134 "project_name", &project_name
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
135 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
136
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
137 if (ret)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
138 return -1;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
139
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
140 sqlite3_bind_text(stmt, 1, tag, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
141 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
142
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
143 return 0;
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
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
146 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
147 jobresult_packer(sqlite3_stmt *stmt)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
149 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
150 "id", (json_int_t)sqlite3_column_int64(stmt, 0),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
151 "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
152 "worker_name", sqlite3_column_text(stmt, 2),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
153 "console", sqlite3_column_text(stmt, 3),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
154 "exitcode", sqlite3_column_int(stmt, 4),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
155 "sigcode", sqlite3_column_int(stmt, 5),
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
156 "date", (json_int_t)sqlite3_column_int64(stmt, 6)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
157 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
158 }
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 static int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
161 jobresult_binder(json_t *doc, sqlite3_stmt *stmt)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
162 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
163 json_int_t job_id;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
164 int exitcode, sigcode, ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
165 const char *worker_name, *console;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
166
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
167 ret = json_unpack(doc, "{sI ss ss si si}",
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
168 "job_id", &job_id,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
169 "worker_name", &worker_name,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
170 "console", &console,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
171 "exitcode", &exitcode,
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
172 "sigcode", &sigcode
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
173 );
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
174
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
175 if (ret < 0)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
176 return -1;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
177
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
178 sqlite3_bind_int64(stmt, 1, job_id);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
179 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
180 sqlite3_bind_text(stmt, 3, console, -1, SQLITE_STATIC);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
181 sqlite3_bind_int(stmt, 4, exitcode);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
182 sqlite3_bind_int(stmt, 5, sigcode);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
183
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
184 return 0;
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
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 static void
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
188 bindva(sqlite3_stmt *stmt, const char *fmt, va_list ap)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 for (int index = 1; *fmt; ++fmt) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 switch (*fmt) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 case 'i':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 sqlite3_bind_int(stmt, index++, va_arg(ap, int));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 break;
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
195 case 'j':
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
196 sqlite3_bind_int64(stmt, index++, va_arg(ap, intmax_t));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
197 break;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 case 's':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 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
200 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 case 'z':
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 sqlite3_bind_int64(stmt, index++, va_arg(ap, size_t));
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 break;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 default:
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 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 }
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 static int
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
211 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
212 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
213 assert(binder);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
214 assert(obj);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 assert(sql);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 sqlite3_stmt *stmt = NULL;
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 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
221
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
222 if (binder(obj, stmt))
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
223 log_warn("db: unable to bind parameter");
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
224 else {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
225 if (sqlite3_step(stmt) != SQLITE_DONE)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
226 log_warn("db: %s", sqlite3_errmsg(db));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
227 else
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
228 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
229 }
19
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 sqlite3_finalize(stmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
233 return 0;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
234 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
235
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
236 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
237 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
238 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
239 sqlite3_stmt *stmt = NULL;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
240 json_t *array, *obj;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
241
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
242 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
243 return log_warn("db: %s", sqlite3_errmsg(db)), NULL;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
244
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
245 bindva(stmt, args, ap);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
246 array = json_array();
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 while (sqlite3_step(stmt) == SQLITE_ROW)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
249 if ((obj = unpacker(stmt)))
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
250 json_array_append(array, obj);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
251
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
252 sqlite3_finalize(stmt);
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 return array;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
255 }
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
256
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
257 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
258 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
259 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
260 va_list ap;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
261 json_t *ret;
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
262
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
263 va_start(ap, args);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
264 ret = listva(unpacker, sql, args, ap);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
265 va_end(ap);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
266
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 return ret;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
269
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
270 /*
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
271 * 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
272 * convenience.
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
273 */
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
274 static json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
275 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
276 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 va_list ap;
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
278 json_t *ret, *obj = NULL;
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
279
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 va_start(ap, args);
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
281 ret = listva(unpacker, sql, args, ap);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 va_end(ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
283
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
284 if (json_array_size(ret) == 1) {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
285 obj = json_array_get(ret, 0);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
286 json_incref(obj);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
287 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
288
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
289 if (ret)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
290 json_decref(ret);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
291
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
292 return obj;
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
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 int
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 db_open(const char *path)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 assert(path);
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 if (sqlite3_open(path, &db) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 return log_warn("db: open error: %s", sqlite3_errmsg(db)), -1;
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 /* Wait for 30 seconds to lock the database. */
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 sqlite3_busy_timeout(db, 30000);
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 if (sqlite3_exec(db, CHAR(sql_init), NULL, NULL, NULL) != SQLITE_OK)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 return log_warn("db: initialization error: %s", sqlite3_errmsg(db)), -1;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
308
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 return 0;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
311
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 int
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
313 db_job_add(json_t *job)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 assert(job);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
316
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
317 return insert(job_binder, job, CHAR(sql_job_add));
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
319
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
320 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
321 db_job_todo(const char *worker)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
323 assert(worker);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
324
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
325 return list(job_packer, CHAR(sql_job_todo), "ss", worker, worker);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
327
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
328 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
329 db_job_list(const char *project)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
330 {
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
331 assert(project);
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
332
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
333 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
334 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
335
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 int
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
337 db_jobresult_add(json_t *res)
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
339 assert(res);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
340
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
341 return insert(jobresult_binder, res, CHAR(sql_jobresult_add));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
342 }
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
343
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
344 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
345 db_jobresult_list_by_job(intmax_t job_id)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
346 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
347 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
348 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
349
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
350 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
351 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
352 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
353 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
354 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
355
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
356 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
357 db_jobresult_list_by_worker(const char *worker)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
358 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
359 assert(worker);
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
360
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
361 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
362 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
363
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
364 int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
365 db_project_save(json_t *p)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
366 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
367 assert(p);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
368
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
369 return insert(project_binder, p, CHAR(sql_project_save));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
370 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
371
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
372 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
373 db_project_list(void)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
374 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
375 return list(project_packer, CHAR(sql_project_list), "");
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
376 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
377
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
378 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
379 db_project_find(const char *name)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
380 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
381 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
382 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
383
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
384 int
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
385 db_worker_save(json_t *wk)
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
386 {
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
387 assert(wk);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
388
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
389 return insert(worker_binder, wk, CHAR(sql_worker_save));
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
390 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
391
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
392 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
393 db_worker_list(void)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
394 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
395 return list(worker_packer, CHAR(sql_worker_list), "");
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
396 }
26
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
397
27
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
398 json_t *
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
399 db_worker_find(const char *name)
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
400 {
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
401 assert(name);
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
402
dae2de19ca5d misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
403 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
404 }
7e10cace67a3 scid: add basic mustache support
David Demelier <markand@malikania.fr>
parents: 24
diff changeset
405
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
406 void
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
407 db_finish(void)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
408 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 if (db) {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 sqlite3_close(db);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 db = NULL;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
412 }
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents:
diff changeset
413 }