Code

frontend: Drop sdb_fe_exec_* in favor of sdb_store_query_execute.
[sysdb.git] / src / frontend / store.c
index 7285b349b39be9994b92add89167bb3aaaacb174..3d1a847b00b61f236c2d9d8ae914d7fa847ff3b1 100644 (file)
@@ -73,6 +73,10 @@ store_reply(sdb_conn_t *conn, int type, const char *name, int status)
  * public API
  */
 
+/*
+ * TODO: move sdb_fe_store to frontend/query.c and let it build an AST
+ */
+
 int
 sdb_fe_store(sdb_conn_t *conn)
 {
@@ -124,16 +128,18 @@ sdb_fe_store(sdb_conn_t *conn)
                        }
                        return sdb_fe_store_metric(conn, &metric);
                }
-               case SDB_ATTRIBUTE:
-               {
-                       sdb_proto_attribute_t attr;
-                       if (sdb_proto_unmarshal_attribute(buf, len, &attr) < 0) {
-                               sdb_strbuf_sprintf(conn->errbuf,
-                                               "STORE: Failed to unmarshal attribute object");
-                               return -1;
-                       }
-                       return sdb_fe_store_attribute(conn, &attr);
+       }
+       if (type & SDB_ATTRIBUTE) {
+               sdb_proto_attribute_t attr;
+               int status;
+               if (sdb_proto_unmarshal_attribute(buf, len, &attr) < 0) {
+                       sdb_strbuf_sprintf(conn->errbuf,
+                                       "STORE: Failed to unmarshal attribute object");
+                       return -1;
                }
+               status = sdb_fe_store_attribute(conn, &attr);
+               sdb_data_free_datum(&attr.value);
+               return status;
        }
 
        sdb_log(SDB_LOG_ERR, "frontend: Invalid object type %d for "
@@ -160,7 +166,7 @@ sdb_fe_store_service(sdb_conn_t *conn, const sdb_proto_service_t *svc)
        if ((! conn) || (! svc) || (! svc->hostname) || (! svc->name))
                return -1;
 
-       snprintf(name, sizeof(name), svc->hostname, svc->name);
+       snprintf(name, sizeof(name), "%s.%s", svc->hostname, svc->name);
        return store_reply(conn, SDB_SERVICE, name,
                        sdb_store_service(svc->hostname, svc->name, svc->last_update));
 } /* sdb_fe_store_service */
@@ -176,7 +182,7 @@ sdb_fe_store_metric(sdb_conn_t *conn, const sdb_proto_metric_t *metric)
 
        store.type = metric->store_type;
        store.id = metric->store_id;
-       snprintf(name, sizeof(name), metric->hostname, metric->name);
+       snprintf(name, sizeof(name), "%s.%s", metric->hostname, metric->name);
        return store_reply(conn, SDB_METRIC, name,
                        sdb_store_metric(metric->hostname, metric->name,
                                &store, metric->last_update));