• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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