Mercurial > sci
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 |
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 | 2 #include <assert.h> |
3 #include <stdlib.h> | |
4 #include <string.h> | |
5 | |
6 #include <sqlite3.h> | |
7 | |
8 #include "db.h" | |
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 | 12 |
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 | 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 | 25 |
26 #define CHAR(v) (const char *)(v) | |
27 | |
28 static sqlite3 *db; | |
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 | 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 | 153 } |
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 | 192 int |
193 db_open(const char *path) | |
194 { | |
195 assert(path); | |
196 | |
197 if (sqlite3_open(path, &db) != SQLITE_OK) { | |
198 log_warn("db: open error: %s", sqlite3_errmsg(db)); | |
199 return -1; | |
200 } | |
201 | |
202 /* Wait for 30 seconds to lock the database. */ | |
203 sqlite3_busy_timeout(db, 30000); | |
204 | |
205 if (sqlite3_exec(db, CHAR(sql_init), NULL, NULL, NULL) != SQLITE_OK) { | |
206 log_warn("db: initialization error: %s", sqlite3_errmsg(db)); | |
207 return -1; | |
208 } | |
209 | |
210 return 0; | |
211 } | |
212 | |
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 | 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 | 218 } |
219 | |
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 | 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 | 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 | 232 } |
233 | |
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 | 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 | 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 | 260 } |
261 | |
262 int | |
263 db_worker_add(struct worker *wk) | |
264 { | |
265 assert(wk); | |
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 | 268 } |
269 | |
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 | 272 { |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
273 assert(ctx); |
0 | 274 assert(wk); |
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 | 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 | 299 } |
300 | |
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 | 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 | 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 | 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 | 348 } |
349 | |
350 void | |
351 db_finish(void) | |
352 { | |
353 if (db) { | |
354 sqlite3_close(db); | |
355 db = NULL; | |
356 } | |
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 } |