summaryrefslogtreecommitdiffstats
path: root/database/sqlite/sqlite_functions.c
diff options
context:
space:
mode:
authorStelios Fragkakis <52996999+stelfrag@users.noreply.github.com>2021-06-01 14:26:22 +0300
committerGitHub <noreply@github.com>2021-06-01 14:26:22 +0300
commit37bee1d197229a4de1d6eac9942fc626f1da8ee3 (patch)
treef975420d4f6cd6c47dbd5c8735a71e649041a281 /database/sqlite/sqlite_functions.c
parent0d96e0a187ee3419a9939b56970248356d05c1e7 (diff)
Store uuid_t metric_uuid in the dimension state structure instead of uuid_t * (#11212)
Diffstat (limited to 'database/sqlite/sqlite_functions.c')
-rw-r--r--database/sqlite/sqlite_functions.c55
1 files changed, 15 insertions, 40 deletions
diff --git a/database/sqlite/sqlite_functions.c b/database/sqlite/sqlite_functions.c
index 46fce11fa3..b7c997ae9a 100644
--- a/database/sqlite/sqlite_functions.c
+++ b/database/sqlite/sqlite_functions.c
@@ -246,20 +246,20 @@ bind_fail:
return 0;
}
-uuid_t *find_dimension_uuid(RRDSET *st, RRDDIM *rd)
+int find_dimension_uuid(RRDSET *st, RRDDIM *rd, uuid_t *store_uuid)
{
static __thread sqlite3_stmt *res = NULL;
- uuid_t *uuid = NULL;
int rc;
+ int status = 1;
if (unlikely(!db_meta) && default_rrd_memory_mode != RRD_MEMORY_MODE_DBENGINE)
- return NULL;
+ return 1;
if (unlikely(!res)) {
rc = prepare_statement(db_meta, SQL_FIND_DIMENSION_UUID, &res);
if (rc != SQLITE_OK) {
error_report("Failed to bind prepare statement to lookup dimension UUID in the database");
- return NULL;
+ return 1;
}
}
@@ -277,49 +277,24 @@ uuid_t *find_dimension_uuid(RRDSET *st, RRDDIM *rd)
rc = sqlite3_step(res);
if (likely(rc == SQLITE_ROW)) {
- uuid = mallocz(sizeof(uuid_t));
- uuid_copy(*uuid, sqlite3_column_blob(res, 0));
+ uuid_copy(*store_uuid, *((uuid_t *) sqlite3_column_blob(res, 0)));
+ status = 0;
+ }
+ else {
+ uuid_generate(*store_uuid);
+ status = sql_store_dimension(store_uuid, st->chart_uuid, rd->id, rd->name, rd->multiplier, rd->divisor, rd->algorithm);
+ if (unlikely(status))
+ error_report("Failed to store dimension metadata in the database");
}
rc = sqlite3_reset(res);
if (unlikely(rc != SQLITE_OK))
error_report("Failed to reset statement find dimension uuid, rc = %d", rc);
-
-#ifdef NETDATA_INTERNAL_CHECKS
- char uuid_str[GUID_LEN + 1];
- if (likely(uuid)) {
- uuid_unparse_lower(*uuid, uuid_str);
- debug(D_METADATALOG, "Found UUID %s for dimension %s", uuid_str, rd->name);
- }
- else
- debug(D_METADATALOG, "UUID not found for dimension %s", rd->name);
-#endif
- return uuid;
+ return status;
bind_fail:
error_report("Failed to bind input parameter to perform dimension UUID database lookup, rc = %d", rc);
- return NULL;
-}
-
-uuid_t *create_dimension_uuid(RRDSET *st, RRDDIM *rd)
-{
- uuid_t *uuid = NULL;
- int rc;
-
- uuid = mallocz(sizeof(uuid_t));
- uuid_generate(*uuid);
-
-#ifdef NETDATA_INTERNAL_CHECKS
- char uuid_str[GUID_LEN + 1];
- uuid_unparse_lower(*uuid, uuid_str);
- debug(D_METADATALOG,"Generating uuid [%s] for dimension %s under chart %s", uuid_str, rd->name, st->id);
-#endif
-
- rc = sql_store_dimension(uuid, st->chart_uuid, rd->id, rd->name, rd->multiplier, rd->divisor, rd->algorithm);
- if (unlikely(rc))
- error_report("Failed to store dimension metadata in the database");
-
- return uuid;
+ return 1;
}
#define DELETE_DIMENSION_UUID "delete from dimension where dim_id = @uuid;"
@@ -1206,7 +1181,7 @@ static RRDDIM *create_rrdim_entry(RRDSET *st, char *id, char *name, uuid_t *metr
rd->state->query_ops.oldest_time = rrdeng_metric_oldest_time;
rd->state->rrdeng_uuid = mallocz(sizeof(uuid_t));
uuid_copy(*rd->state->rrdeng_uuid, *metric_uuid);
- rd->state->metric_uuid = rd->state->rrdeng_uuid;
+ uuid_copy(rd->state->metric_uuid, *metric_uuid);
rd->id = strdupz(id);
rd->name = strdupz(name);
return rd;