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)
#include <ejdb/bson.h>
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_ */