annotate db.c @ 11:0647f9ec7319

misc: remove output file added by mistake
author David Demelier <markand@malikania.fr>
date Tue, 29 Jun 2021 20:49:24 +0200
parents 3ef8128e244f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
1 /*
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
2 * db.c -- scid database access
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
3 *
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
4 * Copyright (c) 2021 David Demelier <markand@malikania.fr>
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
5 *
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
8 * copyright notice and this permission notice appear in all copies.
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
9 *
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
17 */
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
18
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
19 #include <sys/queue.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <assert.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdlib.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <string.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <sqlite3.h>
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 #include "db.h"
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include "log.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
28 #include "types.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
29 #include "util.h"
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include "sql/init.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
32 #include "sql/job-add.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
33 #include "sql/job-todo.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
34 #include "sql/jobresult-add.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
35 #include "sql/project-add.h"
9
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
36 #include "sql/project-update.h"
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include "sql/project-find.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
38 #include "sql/project-find-id.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
39 #include "sql/project-list.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
40 #include "sql/worker-add.h"
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
41 #include "sql/worker-find.h"
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
42 #include "sql/worker-find-id.h"
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
43 #include "sql/worker-list.h"
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 #define CHAR(v) (const char *)(v)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 static sqlite3 *db;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
49 typedef void (*unpacker)(sqlite3_stmt *, struct db_ctx *, void *);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
50
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
51 struct str {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
52 char *str;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
53 SLIST_ENTRY(str) link;
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
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
56 struct list {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
57 unpacker unpack;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
58 void *data;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
59 size_t datasz;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
60 size_t elemwidth;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
61 struct db_ctx *ctx;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
62 };
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
63
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
64 SLIST_HEAD(strlist, str);
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 static struct strlist *
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
67 strlist_new(void)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
68 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
69 struct strlist *l;
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 l = util_calloc(1, sizeof (*l));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
72 SLIST_INIT(l);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
73
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
74 return l;
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
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
77 static const char *
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
78 strlist_add(struct strlist *l, const char *text)
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 struct str *s;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
81
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
82 s = util_calloc(1, sizeof (*s));
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
83 s->str = util_strdup(text);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
84
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
85 SLIST_INSERT_HEAD(l, s, link);
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 return s->str;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
88 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
89
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
90 static void
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
91 strlist_free(struct strlist *l)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
93 struct str *s, *tmp;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
94
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
95 SLIST_FOREACH_SAFE(s, l, link, tmp) {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
96 free(s->str);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
97 free(s);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
98 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
99
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
100 free(l);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
101 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
102
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
103 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
104 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
105 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
106 project->id = sqlite3_column_int(stmt, 0);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
107 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
108 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
109 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
110 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
111 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
112
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
113 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
114 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
115 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
116 w->id = sqlite3_column_int(stmt, 0);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
117 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
118 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
119 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
120
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
121 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
122 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
123 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
124 job->id = sqlite3_column_int(stmt, 0);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
125 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
126 job->project_id = sqlite3_column_int(stmt, 2);
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 static void
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
130 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
131 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
132 for (int index = 1; *fmt; ++fmt) {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
133 switch (*fmt) {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
134 case 'i':
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
135 sqlite3_bind_int(stmt, index++, va_arg(ap, int));
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
136 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
137 case 's':
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
138 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
139 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
140 case 'z':
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
141 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
142 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
143 default:
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
144 break;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
145 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
146 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
147 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
148
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
149 static int
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
150 insert(const char *sql, const char *fmt, ...)
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 assert(sql);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
153 assert(fmt);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
154
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
155 sqlite3_stmt *stmt = NULL;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
156 va_list ap;
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
157 int ret = -1;
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
158
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
159 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
160 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
161
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
162 va_start(ap, fmt);
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
163 vbind(stmt, fmt, ap);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
164 va_end(ap);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
165
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
166 if (sqlite3_step(stmt) != SQLITE_DONE)
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
167 log_warn("db: %s", sqlite3_errmsg(db));
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
168 else
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
169 ret = sqlite3_last_insert_rowid(db);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
170
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
171 sqlite3_finalize(stmt);
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
172
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
173 return ret;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
9
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
176 static int
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
177 update(const char *sql, const char *fmt, ...)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
178 {
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
179 assert(sql);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
180 assert(fmt);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
181
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
182 sqlite3_stmt *stmt = NULL;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
183 va_list ap;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
184 int ret = 1;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
185
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
186 if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
187 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
188
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
189 va_start(ap, fmt);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
190 vbind(stmt, fmt, ap);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
191 va_end(ap);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
192
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
193 if (sqlite3_step(stmt) != SQLITE_DONE)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
194 log_warn("db: %s", sqlite3_errmsg(db));
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
195 else
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
196 ret = 0;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
197
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
198 sqlite3_finalize(stmt);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
199
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
200 return ret;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
201 }
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
202
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
203 static ssize_t
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
204 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
205 {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
206 sqlite3_stmt *stmt = NULL;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
207
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
208 va_list ap;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
209 int step;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
210 ssize_t ret = -1;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
211 size_t tot = 0;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
212
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
213 sel->ctx->handle = NULL;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
214
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
215 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
216 return log_warn("db: %s", sqlite3_errmsg(db)), -1;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
217
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
218 va_start(ap, args);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
219 vbind(stmt, args, ap);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
220 va_end(ap);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
221
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
222 sel->ctx->handle = strlist_new();
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
223
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
224 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
225 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
226
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
227 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
228 ret = tot;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
229 else {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
230 memset(sel->data, 0, sel->datasz * sel->elemwidth);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
231 strlist_free(sel->ctx->handle);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
232 sel->ctx->handle = NULL;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
233 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
234
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
235 sqlite3_finalize(stmt);
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
236
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
237 return ret;
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
238 }
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
239
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 int
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 db_open(const char *path)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 assert(path);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
245 if (sqlite3_open(path, &db) != SQLITE_OK)
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
246 return log_warn("db: open error: %s", sqlite3_errmsg(db)), -1;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
247
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 /* Wait for 30 seconds to lock the database. */
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 sqlite3_busy_timeout(db, 30000);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
250
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
251 if (sqlite3_exec(db, CHAR(sql_init), NULL, NULL, NULL) != SQLITE_OK)
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
252 return log_warn("db: initialization error: %s", sqlite3_errmsg(db)), -1;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
253
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 return 0;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
256
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 int
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
258 db_project_add(struct project *p)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
260 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
261 p->url, p->script)) < 0 ? -1 : 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
263
9
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
264 int
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
265 db_project_update(const struct project *p)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
266 {
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
267 assert(p);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
268
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
269 return update(CHAR(sql_project_update), "ssssi", p->name, p->desc,
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
270 p->url, p->script, p->id);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
271 }
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 6
diff changeset
272
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 ssize_t
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
274 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
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)project_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
278 .data = projects,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
279 .datasz = projectsz,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
280 .elemwidth = sizeof (*projects),
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_project_list), "z", projectsz);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
286
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 int
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
288 db_project_find(struct db_ctx *ctx, struct project *project)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
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)project_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
292 .data = project,
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 (*project),
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 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
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_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
299 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
300
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
301 int
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
302 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
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)project_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
306 .data = project,
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 (*project),
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 };
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
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_project_find_id), "i", project->id) == 1 ? 0 : -1;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
314
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 int
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 db_worker_add(struct worker *wk)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 assert(wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
319
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
320 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
321 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
322
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 ssize_t
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
324 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
325 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
326 assert(ctx);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 assert(wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
328
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
329 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
330 .unpack = (unpacker)worker_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
331 .data = wk,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
332 .datasz = wksz,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
333 .elemwidth = sizeof (*wk),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
334 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
335 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
336
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
337 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
338 }
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
339
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
340 int
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
341 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
342 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
343 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
344 .unpack = (unpacker)worker_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
345 .data = wk,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
346 .datasz = 1,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
347 .elemwidth = sizeof (*wk),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
348 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
349 };
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
350
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
351 return list(&sel, CHAR(sql_worker_find), "s", wk->name) == 1 ? 0 : -1;
0
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 int
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
355 db_worker_find_id(struct db_ctx *ctx, struct worker *wk)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
357 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
358 .unpack = (unpacker)worker_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
359 .data = wk,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
360 .datasz = 1,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
361 .elemwidth = sizeof (*wk),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
362 .ctx = ctx
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
363 };
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
364
5
566bc028cdcb tests: initial tests coming
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
365 return list(&sel, CHAR(sql_worker_find_id), "i", wk->id) == 1 ? 0 : -1;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
366 }
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
367
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
368 int
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
369 db_job_add(struct job *job)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
370 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
371 assert(job);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
372
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
373 return (job->id = insert(CHAR(sql_job_add),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
374 "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
375 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
376
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
377 ssize_t
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
378 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
379 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
380 assert(ctx);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
381 assert(jobs);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
382
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
383 struct list sel = {
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
384 .unpack = (unpacker)job_unpacker,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
385 .data = jobs,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
386 .datasz = jobsz,
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
387 .elemwidth = sizeof (*jobs),
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
388 .ctx = ctx
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
389 };
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
390
6
8c408176d2b1 scid: past jobs are not listed for new workers
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
391 return list(&sel, CHAR(sql_job_todo), "iiz", worker_id, worker_id, jobsz);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
392 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
393
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
394 int
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
395 db_jobresult_add(struct jobresult *r)
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
396 {
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
397 assert(r);
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
398
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
399 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
400 r->worker_id, r->exitcode, r->log)) < 0 ? -1 : 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
401 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
402
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
404 db_finish(void)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
405 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
406 if (db) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
407 sqlite3_close(db);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
408 db = NULL;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 }
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
411
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
412 void
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
413 db_ctx_finish(struct db_ctx *ctx)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
414 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
415 if (ctx->handle) {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
416 strlist_free(ctx->handle);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
417 ctx->handle = NULL;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
418 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
419 }