1 /// Sample records put/query example
2 #include <ejdb2.h>
3
4 #define CHECK(rc_) \
5 if (rc_) { \
6 iwlog_ecode_error3(rc_); \
7 return 1; \
8 }
9
documents_visitor(EJDB_EXEC * ctx,const EJDB_DOC doc,int64_t * step)10 static iwrc documents_visitor(EJDB_EXEC *ctx, const EJDB_DOC doc, int64_t *step) {
11 // Print document to stderr
12 return jbl_as_json(doc->raw, jbl_fstream_json_printer, stderr, JBL_PRINT_PRETTY);
13 }
14
main()15 int main() {
16
17 EJDB_OPTS opts = {
18 .kv = {
19 .path = "example.db",
20 .oflags = IWKV_TRUNC
21 }
22 };
23 EJDB db; // EJDB2 storage handle
24 int64_t id; // Document id placeholder
25 JQL q = 0; // Query instance
26 JBL jbl = 0; // Json document
27
28 iwrc rc = ejdb_init();
29 CHECK(rc);
30
31 rc = ejdb_open(&opts, &db);
32 CHECK(rc);
33
34 // First record
35 rc = jbl_from_json(&jbl, "{\"name\":\"Bianca\", \"age\":4}");
36 RCGO(rc, finish);
37 rc = ejdb_put_new(db, "parrots", jbl, &id);
38 RCGO(rc, finish);
39 jbl_destroy(&jbl);
40
41 // Second record
42 rc = jbl_from_json(&jbl, "{\"name\":\"Darko\", \"age\":8}");
43 RCGO(rc, finish);
44 rc = ejdb_put_new(db, "parrots", jbl, &id);
45 RCGO(rc, finish);
46 jbl_destroy(&jbl);
47
48 // Now execute a query
49 rc = jql_create(&q, "parrots", "/[age > :age]");
50 RCGO(rc, finish);
51
52 EJDB_EXEC ux = {
53 .db = db,
54 .q = q,
55 .visitor = documents_visitor
56 };
57
58 // Set query placeholder value.
59 // Actual query will be /[age > 3]
60 rc = jql_set_i64(q, "age", 0, 3);
61 RCGO(rc, finish);
62
63 // Now execute the query
64 rc = ejdb_exec(&ux);
65
66 finish:
67 if (q) {
68 jql_destroy(&q);
69 }
70 if (jbl) {
71 jbl_destroy(&jbl);
72 }
73 ejdb_close(&db);
74 CHECK(rc);
75 return 0;
76 }
77