index ea0cd97e06ff4c5e198e93e3290ea1918e3b4456..4038fe4da91c0fc0c70a68b4ba833e3cba67da5c 100644 (file)
--- a/src/include/core/store.h
+++ b/src/include/core/store.h
const char * const *backends;
size_t backends_num;
} sdb_store_host_t;
+#define SDB_STORE_HOST_INIT { NULL, 0, 0, NULL, 0 }
/*
* sdb_store_service_t represents the meta-data of a stored service object.
const char * const *backends;
size_t backends_num;
} sdb_store_service_t;
+#define SDB_STORE_SERVICE_INIT { NULL, NULL, 0, 0, NULL, 0 }
/*
* sdb_metric_store_t specifies how to access a metric's data.
const char * const *backends;
size_t backends_num;
} sdb_store_metric_t;
+#define SDB_STORE_METRIC_INIT { NULL, NULL, { NULL, NULL }, 0, 0, NULL, 0 }
/*
* sdb_store_attribute_t represents a stored attribute.
const char * const *backends;
size_t backends_num;
} sdb_store_attribute_t;
+#define SDB_STORE_ATTRIBUTE_INIT { NULL, 0, NULL, NULL, SDB_DATA_INIT, 0, 0, NULL, 0 }
/*
* Expressions represent arithmetic expressions based on stored objects and
* 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;
/*
*/
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:
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().
* - 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.
* - 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:
int
sdb_store_json_finish(sdb_store_json_formatter_t *f);
+/*
+ * sdb_store_json_writer:
+ * A store writer implementation that generates JSON output. It expects a
+ * store JSON formatter as its user-data argument.
+ */
+extern sdb_store_writer_t sdb_store_json_writer;
+
#ifdef __cplusplus
} /* extern "C" */
#endif