Code

Build a more generic/powerful query API which writes to a store-writer.
[sysdb.git] / src / include / core / store.h
index ddd0400e7684027560b0705f291dc006b3477201..0cee91362998d55c4f329c031572d5096e68400c 100644 (file)
@@ -288,15 +288,12 @@ typedef struct {
         * execute_query:
         * Execute a previously prepared query. The callback may expect that only
         * queries prepared by its respective prepare callback will be passed to
-        * this function.
-        *
-        * TODO: Instead of letting the executor write directly to a string buffer
-        *       (which cannot easily be merged with other results), let it hand
-        *       all objects to a store-writer.
+        * this function. The query result will be passed back via the specified
+        * store writer.
         */
        int (*execute_query)(sdb_object_t *q,
-                       sdb_strbuf_t *buf, sdb_strbuf_t *errbuf,
-                       sdb_object_t *user_data);
+                       sdb_store_writer_t *w, sdb_object_t *wd,
+                       sdb_strbuf_t *errbuf, sdb_object_t *user_data);
 } sdb_store_reader_t;
 
 /*
@@ -462,7 +459,7 @@ sdb_store_query_prepare_matcher(sdb_ast_node_t *ast);
  */
 int
 sdb_store_query_execute(sdb_store_t *store, sdb_store_query_t *m,
-               sdb_strbuf_t *buf, sdb_strbuf_t *errbuf);
+               sdb_store_writer_t *w, sdb_object_t *wd, sdb_strbuf_t *errbuf);
 
 /*
  * sdb_store_expr_create:
@@ -731,13 +728,12 @@ sdb_store_json_formatter_t *
 sdb_store_json_formatter(sdb_strbuf_t *buf, int type, int flags);
 
 /*
- * sdb_store_json_emit:
+ * sdb_store_emit:
  * Serialize a single object to JSON adding it to the string buffer associated
  * with the formatter object. The serialized object will not include
  * attributes or any child objects. Instead, call the function again for each
  * of those objects. All attributes have to be emitted before any other
- * children types. Use sdb_store_json_emit_full() to emit a full (filtered)
- * object.
+ * children types. Use sdb_store_emit_full() to emit a full (filtered) object.
  *
  * Note that the output might not be valid JSON before calling
  * sdb_store_json_finish().
@@ -747,10 +743,10 @@ sdb_store_json_formatter(sdb_strbuf_t *buf, int type, int flags);
  *  - a negative value else
  */
 int
-sdb_store_json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj);
+sdb_store_emit(sdb_store_obj_t *obj, sdb_store_writer_t *w, sdb_object_t *wd);
 
 /*
- * sdb_store_json_emit_full:
+ * sdb_store_emit_full:
  * Serialize a single object including it's attributes and all children to
  * JSON, adding it to the string buffer associated with the formatter object.
  * The filter, if specified, is applied to each attribute and child object.
@@ -764,8 +760,8 @@ sdb_store_json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj);
  *  - a negative value else
  */
 int
-sdb_store_json_emit_full(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj,
-               sdb_store_matcher_t *filter);
+sdb_store_emit_full(sdb_store_obj_t *obj, sdb_store_matcher_t *filter,
+               sdb_store_writer_t *w, sdb_object_t *wd);
 
 /*
  * sdb_store_json_finish: