class Ejdb < Formula desc "Embeddable JSON Database engine C11 library" homepage "https://ejdb.org" url "https://github.com/Softmotions/ejdb/archive/v2.0.36.tar.gz" sha256 "e14a412a7db1ffa4b092233c126de85eeed86c056368581deeed476f44e49457" head "https://github.com/Softmotions/ejdb.git" bottle do cellar :any sha256 "bfa55f256d0b003d469684b5e85aad7b0ece4d2a347d98f3ef328df96b5602d0" => :catalina sha256 "0c6770d5bd7be0b2383f35f0f04a62fcbe905c6d2949a0992dc50667b8efffb0" => :mojave sha256 "316a18de54f648ac3e48cb27020b97c286b8a09f35bd740e138ebedc4df93431" => :high_sierra end depends_on "cmake" => :build def install mkdir "build" do system "cmake", "..", *std_cmake_args system "make", "install" end end test do (testpath/"test.c").write <<~EOS #include #define RCHECK(rc_) \\ if (rc_) { \\ iwlog_ecode_error3(rc_); \\ return 1; \\ } static iwrc documents_visitor(EJDB_EXEC *ctx, const EJDB_DOC doc, int64_t *step) { // Print document to stderr return jbl_as_json(doc->raw, jbl_fstream_json_printer, stderr, JBL_PRINT_PRETTY); } int main() { EJDB_OPTS opts = { .kv = { .path = "testdb.db", .oflags = IWKV_TRUNC } }; EJDB db; // EJDB2 storage handle int64_t id; // Document id placeholder JQL q = 0; // Query instance JBL jbl = 0; // Json document iwrc rc = ejdb_init(); RCHECK(rc); rc = ejdb_open(&opts, &db); RCHECK(rc); // First record rc = jbl_from_json(&jbl, "{\\"name\\":\\"Bianca\\", \\"age\\":4}"); RCGO(rc, finish); rc = ejdb_put_new(db, "parrots", jbl, &id); RCGO(rc, finish); jbl_destroy(&jbl); // Second record rc = jbl_from_json(&jbl, "{\\"name\\":\\"Darko\\", \\"age\\":8}"); RCGO(rc, finish); rc = ejdb_put_new(db, "parrots", jbl, &id); RCGO(rc, finish); jbl_destroy(&jbl); // Now execute a query rc = jql_create(&q, "parrots", "/[age > :age]"); RCGO(rc, finish); EJDB_EXEC ux = { .db = db, .q = q, .visitor = documents_visitor }; // Set query placeholder value. // Actual query will be /[age > 3] rc = jql_set_i64(q, "age", 0, 3); RCGO(rc, finish); // Now execute the query rc = ejdb_exec(&ux); finish: if (q) jql_destroy(&q); if (jbl) jbl_destroy(&jbl); ejdb_close(&db); RCHECK(rc); return 0; } EOS system ENV.cc, "-I#{include}", "test.c", "-L#{lib}", "-lejdb2", "-o", testpath/"test" system "./test" end end