src/utils_db_query.[ch]: Allow a callback function to be passed to udb_query_create.
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Thu, 5 Feb 2009 19:21:20 +0000 (20:21 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Thu, 5 Feb 2009 19:21:20 +0000 (20:21 +0100)
This allows plugins to handle custom options in the <Query> blocks.

src/dbi.c
src/oracle.c
src/utils_db_query.c
src/utils_db_query.h

index a542df3..d970938 100644 (file)
--- a/src/dbi.c
+++ b/src/dbi.c
@@ -356,7 +356,8 @@ static int cdbi_config (oconfig_item_t *ci) /* {{{ */
   {
     oconfig_item_t *child = ci->children + i;
     if (strcasecmp ("Query", child->key) == 0)
-      udb_query_create (&queries, &queries_num, child);
+      udb_query_create (&queries, &queries_num, child,
+          /* callback = */ NULL);
     else if (strcasecmp ("Database", child->key) == 0)
       cdbi_config_add_database (child);
     else
index accaee3..b008e5c 100644 (file)
@@ -294,7 +294,8 @@ static int o_config (oconfig_item_t *ci) /* {{{ */
   {
     oconfig_item_t *child = ci->children + i;
     if (strcasecmp ("Query", child->key) == 0)
-      udb_query_create (&queries, &queries_num, child);
+      udb_query_create (&queries, &queries_num, child,
+          /* callback = */ NULL);
     else if (strcasecmp ("Database", child->key) == 0)
       o_config_add_database (child);
     else
index 868b53b..3229d64 100644 (file)
@@ -540,7 +540,8 @@ void udb_query_free_one (udb_query_t *q) /* {{{ */
  * Query public functions
  */
 int udb_query_create (udb_query_t ***ret_query_list, /* {{{ */
-    size_t *ret_query_list_len, oconfig_item_t *ci)
+    size_t *ret_query_list_len, oconfig_item_t *ci,
+    udb_query_create_callback_t cb)
 {
   udb_query_t **query_list;
   size_t        query_list_len;
@@ -607,6 +608,15 @@ int udb_query_create (udb_query_t ***ret_query_list, /* {{{ */
           q->name);
       status = udb_config_set_uint (&q->max_version, child);
     }
+    else if (cb != NULL)
+    {
+      status = (*cb) (q, child);
+      if (status != 0)
+      {
+        WARNING ("db query utils: The configuration callback failed "
+            "to handle `%s'.", child->key);
+      }
+    }
     else
     {
       WARNING ("db query utils: Query `%s': Option `%s' not allowed here.",
index 4e12ced..3959e88 100644 (file)
 struct udb_query_s;
 typedef struct udb_query_s udb_query_t;
 
+typedef int (*udb_query_create_callback_t) (udb_query_t *q,
+    oconfig_item_t *ci);
+
 /* 
  * Public functions
  */
 int udb_query_create (udb_query_t ***ret_query_list,
-    size_t *ret_query_list_len, oconfig_item_t *ci);
+    size_t *ret_query_list_len, oconfig_item_t *ci,
+    udb_query_create_callback_t cb);
 void udb_query_free (udb_query_t **query_list, size_t query_list_len);
 
 int udb_query_pick_from_list (oconfig_item_t *ci,