annotate db.c @ 4:9c4fea43803c

scid: some refactoring in db
author David Demelier <markand@malikania.fr>
date Tue, 15 Jun 2021 20:42:55 +0200
parents 215c0c3b3609
children 566bc028cdcb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
1 #include <sys/queue.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 #include <assert.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #include <stdlib.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 #include <string.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 #include <sqlite3.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 #include "db.h"
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #include "log.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
10 #include "types.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
11 #include "util.h"
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 #include "sql/init.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
14 #include "sql/job-add.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
15 #include "sql/job-todo.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
16 #include "sql/jobresult-add.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
17 #include "sql/project-add.h"
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 #include "sql/project-find.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
19 #include "sql/project-find-id.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
20 #include "sql/project-list.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
21 #include "sql/worker-add.h"
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
22 #include "sql/worker-find.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
23 #include "sql/worker-find-id.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
24 #include "sql/worker-list.h"
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #define CHAR(v) (const char *)(v)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 static sqlite3 *db;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
30 typedef void (*unpacker)(sqlite3_stmt *, struct db_ctx *, void *);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
31
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
32 struct str {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
33 char *str;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
34 SLIST_ENTRY(str) link;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
35 };
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
36
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
37 struct list {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
38 unpacker unpack;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
39 void *data;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
40 size_t datasz;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
41 size_t elemwidth;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
42 struct db_ctx *ctx;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
43 };
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
44
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
45 SLIST_HEAD(strlist, str);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
46
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
47 static struct strlist *
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
48 strlist_new(void)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
49 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
50 struct strlist *l;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
51
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
52 l = util_calloc(1, sizeof (*l));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
53 SLIST_INIT(l);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
54
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
55 return l;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
56 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
57
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
58 static const char *
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
59 strlist_add(struct strlist *l, const char *text)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
60 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
61 struct str *s;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
62
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
63 s = util_calloc(1, sizeof (*s));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
64 s->str = util_strdup(text);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
65
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
66 SLIST_INSERT_HEAD(l, s, link);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
67
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
68 return s->str;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
69 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
70
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
71 static void
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
72 strlist_free(struct strlist *l)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
74 struct str *s, *tmp;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
75
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
76 SLIST_FOREACH_SAFE(s, l, link, tmp) {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
77 free(s->str);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
78 free(s);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
79 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
80
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
81 SLIST_INIT(l);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
82 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
83
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
84 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
85 project_unpacker(sqlite3_stmt *stmt, struct db_ctx *ctx, struct project *project)
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
86 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
87 project->id = sqlite3_column_int(stmt, 0);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
88 project->name = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 1)));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
89 project->desc = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 2)));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
90 project->url = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 3)));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
91 project->script = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 4)));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
92 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
93
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
94 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
95 worker_unpacker(sqlite3_stmt *stmt, struct db_ctx *ctx, struct worker *w)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
96 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
97 w->id = sqlite3_column_int(stmt, 0);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
98 w->name = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 1)));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
99 w->desc = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 2)));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
100 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
101
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
102 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
103 job_unpacker(sqlite3_stmt *stmt, struct db_ctx *ctx, struct job *job)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
104 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
105 job->id = sqlite3_column_int(stmt, 0);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
106 job->tag = strlist_add(ctx->handle, CHAR(sqlite3_column_text(stmt, 1)));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
107 job->project_id = sqlite3_column_int(stmt, 2);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
108 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
109
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
110 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
111 vbind(sqlite3_stmt *stmt, const char *fmt, va_list ap)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
112 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
113 for (int index = 1; *fmt; ++fmt) {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
114 switch (*fmt) {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
115 case 'i':
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
116 sqlite3_bind_int(stmt, index++, va_arg(ap, int));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
117 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
118 case 's':
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
119 sqlite3_bind_text(stmt, index++, va_arg(ap, const char *), -1, SQLITE_STATIC);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
120 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
121 case 'z':
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
122 sqlite3_bind_int64(stmt, index++, va_arg(ap, size_t));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
123 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
124 default:
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
125 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
126 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
127 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
128 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
129
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
130 static int
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
131 insert(const char *sql, const char *fmt, ...)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
132 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
133 assert(sql);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
134 assert(fmt);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
135
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
136 sqlite3_stmt *stmt = NULL;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
137 va_list ap;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
138
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
139 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
140 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
141
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
142 va_start(ap, fmt);
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
143 vbind(stmt, fmt, ap);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
144 va_end(ap);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
145
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
146 if (sqlite3_step(stmt) != SQLITE_DONE) {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
147 log_warn("db: %s", sqlite3_errmsg(db));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
148 sqlite3_finalize(stmt);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
149 return -1;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
150 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
151
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
152 return sqlite3_last_insert_rowid(db);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
155 static ssize_t
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
156 list(struct list *sel, const char *sql, const char *args, ...)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
157 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
158 sqlite3_stmt *stmt = NULL;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
159
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
160 va_list ap;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
161 int step;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
162 ssize_t ret = -1;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
163 size_t tot = 0;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
164
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
165 sel->ctx->handle = NULL;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
166
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
167 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
168 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
169
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
170 va_start(ap, args);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
171 vbind(stmt, args, ap);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
172 va_end(ap);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
173
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
174 sel->ctx->handle = strlist_new();
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
175
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
176 while (tot < sel->datasz && (step = sqlite3_step(stmt)) == SQLITE_ROW)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
177 sel->unpack(stmt, sel->ctx, (unsigned char *)sel->data + (tot++ * sel->elemwidth));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
178
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
179 if (step == SQLITE_OK || step == SQLITE_DONE || step == SQLITE_ROW)
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
180 ret = tot;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
181 else {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
182 memset(sel->data, 0, sel->datasz * sel->elemwidth);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
183 strlist_free(sel->ctx->handle);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
184 sel->ctx->handle = NULL;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
185 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
186
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
187 sqlite3_finalize(stmt);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
188
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
189 return ret;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
190 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
191
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 int
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 db_open(const char *path)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 assert(path);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
196
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 if (sqlite3_open(path, &db) != SQLITE_OK) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 log_warn("db: open error: %s", sqlite3_errmsg(db));
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 return -1;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
201
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 /* Wait for 30 seconds to lock the database. */
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 sqlite3_busy_timeout(db, 30000);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
204
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 if (sqlite3_exec(db, CHAR(sql_init), NULL, NULL, NULL) != SQLITE_OK) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 log_warn("db: initialization error: %s", sqlite3_errmsg(db));
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 return -1;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
209
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 return 0;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
212
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 int
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
214 db_project_add(struct project *p)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
216 return (p->id = insert(CHAR(sql_project_add), "ssss", p->name, p->desc,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
217 p->url, p->script)) < 0 ? -1 : 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
219
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 ssize_t
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
221 db_project_list(struct db_ctx *ctx, struct project *projects, size_t projectsz)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
223 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
224 .unpack = (unpacker)project_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
225 .data = projects,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
226 .datasz = projectsz,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
227 .elemwidth = sizeof (*projects),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
228 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
229 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
231 return list(&sel, CHAR(sql_project_list), "z", projectsz);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
233
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 int
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
235 db_project_find(struct db_ctx *ctx, struct project *project)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
237 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
238 .unpack = (unpacker)project_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
239 .data = project,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
240 .datasz = 1,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
241 .elemwidth = sizeof (*project),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
242 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
243 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
245 return list(&sel, CHAR(sql_project_find), "s", project->name) == 1 ? 0 : -1;
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
246 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
247
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
248 int
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
249 db_project_find_id(struct db_ctx *ctx, struct project *project)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
250 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
251 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
252 .unpack = (unpacker)project_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
253 .data = project,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
254 .datasz = 1,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
255 .elemwidth = sizeof (*project),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
256 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
257 };
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
258
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
259 return list(&sel, CHAR(sql_project_find_id), "i", project->id) == 1 ? 0 : -1;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
261
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 int
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 db_worker_add(struct worker *wk)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 assert(wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
266
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
267 return (wk->id = insert(CHAR(sql_worker_add), "ss", wk->name, wk->desc)) < 0 ? -1 : 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
269
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 ssize_t
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
271 db_worker_list(struct db_ctx *ctx, struct worker *wk, size_t wksz)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
273 assert(ctx);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 assert(wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
275
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
276 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
277 .unpack = (unpacker)worker_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
278 .data = wk,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
279 .datasz = wksz,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
280 .elemwidth = sizeof (*wk),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
281 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
282 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
283
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
284 return list(&sel, CHAR(sql_worker_list), "z", wksz);
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
285 }
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
286
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
287 int
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
288 db_worker_find(struct db_ctx *ctx, struct worker *wk)
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
289 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
290 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
291 .unpack = (unpacker)worker_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
292 .data = wk,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
293 .datasz = 1,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
294 .elemwidth = sizeof (*wk),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
295 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
296 };
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
297
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
298 return list(&sel, CHAR(sql_worker_find), "s", wk->name);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
300
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 int
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
302 db_worker_find_id(struct db_ctx *ctx, struct worker *wk)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
304 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
305 .unpack = (unpacker)worker_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
306 .data = wk,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
307 .datasz = 1,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
308 .elemwidth = sizeof (*wk),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
309 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
310 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
311
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
312 return list(&sel, CHAR(sql_worker_find_id), "i", wk->id);
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
313 }
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
314
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
315 int
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
316 db_job_add(struct job *job)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
317 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
318 assert(job);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
319
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
320 return (job->id = insert(CHAR(sql_job_add),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
321 "si", job->tag, job->project_id)) < 0 ? -1 : 0;
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
322 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
323
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
324 ssize_t
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
325 db_job_todo(struct db_ctx *ctx, struct job *jobs, size_t jobsz, int worker_id)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
326 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
327 assert(ctx);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
328 assert(jobs);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
329
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
330 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
331 .unpack = (unpacker)job_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
332 .data = jobs,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
333 .datasz = jobsz,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
334 .elemwidth = sizeof (*jobs),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
335 .ctx = ctx
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
336 };
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
337
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
338 return list(&sel, CHAR(sql_job_todo), "iz", worker_id, jobsz);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
339 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
340
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
341 int
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
342 db_jobresult_add(struct jobresult *r)
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
343 {
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
344 assert(r);
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
345
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
346 return (r->id = insert(CHAR(sql_jobresult_add), "iiis", r->job_id,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
347 r->worker_id, r->exitcode, r->log)) < 0 ? -1 : 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
349
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 db_finish(void)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 if (db) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 sqlite3_close(db);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 db = NULL;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 }
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
358
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
359 void
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
360 db_ctx_finish(struct db_ctx *ctx)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
361 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
362 if (ctx->handle) {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
363 strlist_free(ctx->handle);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
364 ctx->handle = NULL;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
365 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
366 }