From: Ɓukasz Stelmach Date: Thu, 25 May 2017 15:38:45 +0000 (+0200) Subject: database: implement database_load() X-Git-Tag: submit/tizen/20170622.101818~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=43eb71b673f11a604979b8996aedda761dfc6aea;p=platform%2Fcore%2Fsystem%2Ffaultd.git database: implement database_load() Change-Id: Ieb99efe60e1de90ee2103843dcae0ff14ea96104 --- diff --git a/src/core/database.c b/src/core/database.c index 2824cab..4931852 100644 --- a/src/core/database.c +++ b/src/core/database.c @@ -124,9 +124,68 @@ abort: return -1; } -int database_load(bson *q, bson *b) +int database_load(bson *bq, bson *br, uint32_t *nr) { - return -ENOTSUP; + EJDB *db = database_adapter.db; + EJCOLL *coll = database_adapter.coll; + EJQ *q = NULL; + TCLIST *r = NULL; + uint32_t count = 0; + int ret = -EINVAL; + int qflags = 0; + + if (br == NULL) + qflags |= JBQRYCOUNT; + + q = ejdbcreatequery(db, bq, NULL, 0, NULL); + if (q == NULL) { + log_error("ejdbcreatequery failed: %s", ejdberrmsg(ejdbecode(db))); + goto finish; + } + + r = ejdbqryexecute(coll, q, &count, qflags, NULL); + if ((r == NULL) && (ejdbecode(db) != TCESUCCESS)) { + log_error("ejdbqryexecute failed: %s", ejdberrmsg(ejdbecode(db))); + goto finish; + } + + log_debug("ejdbqueryexecute: %u records", count); + + if (br != NULL) + bson_init(br); + + if (r == NULL) { + ret = 0; + goto finish; + } + + for (uint32_t i = 0; i < count; ++i) { + void *bsdata = TCLISTVALPTR(r, i); + bson val; + char key[11]; /* strlen(itoa(1U<<31, key, 10)) => 10 */ + + bson_init_finished_data(&val, bsdata); + snprintf(key, sizeof(key), "%u", i); + bson_append_bson(br, key, &val); + } + + ret = 0; +finish: + if (r != NULL) + tclistdel(r); + + if (q != NULL) + ejdbquerydel(q); + + if (ret == 0) { + if (nr != NULL) + *nr = count; + + if (br != NULL) + bson_finish(br); + } + + return ret; } int database_new_oid(bson_oid_t *oid) diff --git a/src/core/database.h b/src/core/database.h index 96cfd7c..6c54f2b 100644 --- a/src/core/database.h +++ b/src/core/database.h @@ -22,7 +22,7 @@ #include int database_store(bson *b, bson_oid_t *oid); -int database_load(bson *q, bson *b); +int database_load(bson *q, bson *b, uint32_t *nr); int database_new_oid(bson_oid_t *oid); #endif /* _DATABASE_H_ */