From cc367d190afd6dbf6aa11f01ad71582a90a7c264 Mon Sep 17 00:00:00 2001 From: avsdev-cw Date: Mon, 5 Oct 2020 17:00:34 +0100 Subject: [PATCH] Moved the creation of the meta-extended table to the private implementation --- src/modb.c | 40 ++----------- src/modb.h | 3 +- src/modb_p.c | 157 ++++++++++++++++++++++++++++++++------------------- src/modb_p.h | 7 ++- 4 files changed, 108 insertions(+), 99 deletions(-) diff --git a/src/modb.c b/src/modb.c index 49c4f16..02818fb 100644 --- a/src/modb.c +++ b/src/modb.c @@ -4,10 +4,10 @@ #include #include "modb.h" -#include "modb_p.h" -#include "db_query.h" #include "strext.h" +#include "modb_p.h" + int modbCreate(struct stored_conn_t *sconn, struct modb_t *modb) { @@ -79,39 +79,9 @@ int modbAccountingDestroy(struct stored_conn_t *sconn, struct modb_t *modb) int modbMetaExtCreate(struct stored_conn_t *sconn, struct modb_t *modb, struct column_data_t **col_data, size_t cols) { - char *qry; - uint64_t res; - size_t qry_len; - str_builder *sb; - char *colstr; - - if ((sb = strbld_create()) == 0) { - return -1; - } - strbld_str(sb, "CREATE TABLE `", 0); - strbld_str(sb, modb->name, modb->name_len); - strbld_str(sb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE)); - strbld_str(sb, "` ", 2); - strbld_str(sb, "(", 1); - strbld_str(sb, "`mdo_id` INT UNSIGNED NOT NULL", 0); - for (size_t c = 0; c < cols; c++) { - struct column_data_t *col = *(col_data + c); - if ((colstr = createColString(col)) == 0) { - strbld_destroy(&sb); - return -1; - } - strbld_str(sb, colstr, 0); - free(colstr); - } - strbld_str(sb, ", INDEX (`mdo_id`))", 0); - if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { - return -1; - } - - res = simpleQuery(sconn, qry, qry_len); - free(qry); - - return (res == (uint64_t)-1) ? -1 : (int)res; + uint64_t err = 0 + | createMetaExtTable(sconn, modb, col_data, cols); + return err == 0; } int modbMetaExtExists(struct stored_conn_t *sconn, struct modb_t *modb) { diff --git a/src/modb.h b/src/modb.h index db628a4..a8a55b5 100644 --- a/src/modb.h +++ b/src/modb.h @@ -1,8 +1,7 @@ #ifndef H__MODB__ #define H__MODB__ -#include "db_connection.h" -#include "db_column.h" +#include "database.h" #include "modb_types.h" diff --git a/src/modb_p.c b/src/modb_p.c index 0a967fa..9ee57f6 100644 --- a/src/modb_p.c +++ b/src/modb_p.c @@ -4,7 +4,6 @@ #include #include "modb_p.h" -#include "db_query.h" #include "strext.h" @@ -219,64 +218,6 @@ uint64_t createUserGroupsTable(struct stored_conn_t *sconn, struct modb_t *modb) return res; } -int tableExists(struct stored_conn_t *sconn, struct modb_t *modb, - const char *suffix, size_t suffix_len) -{ - char *qry, *res; - size_t qry_len; - str_builder *sb; - int retval = 0; - - if ((sb = strbld_create()) == 0) { - return -errno; - } - retval += strbld_str(sb, "SHOW TABLES LIKE '", 0); - retval += strbld_str(sb, modb->name, modb->name_len); - retval += strbld_str(sb, suffix, suffix_len); - retval += strbld_char(sb, '\''); - if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { - return -errno; - } - - res = scalarString(sconn, qry, qry_len, "Z"); - if (res == 0 || strlen(res) != (modb->name_len + suffix_len)) { - retval = -1; - } else { - retval = strncmp(res, modb->name, modb->name_len) == 0; - } - - if (res != 0) { - free(res); - } - free(qry); - - return retval; -} - -uint64_t destroyTable(struct stored_conn_t *sconn, struct modb_t *modb, - const char *suffix, size_t suffix_len) -{ - char *qry; - uint64_t res; - size_t qry_len; - str_builder *sb; - - if ((sb = strbld_create()) == 0) { - return (uint64_t)-1; - } - strbld_str(sb, "DROP TABLE `", 0); - strbld_str(sb, modb->name, modb->name_len); - strbld_str(sb, suffix, suffix_len); - strbld_str(sb, "` ", 2); - if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { - return (uint64_t)-1; - } - - res = simpleQuery(sconn, qry, qry_len); - free(qry); - - return res; -} char *createColString(struct column_data_t *col) { @@ -346,4 +287,102 @@ char *createColString(struct column_data_t *col) return colstr; } +uint64_t createMetaExtTable(struct stored_conn_t *sconn, struct modb_t *modb, + struct column_data_t **col_data, size_t cols) +{ + char *qry; + uint64_t res; + size_t qry_len; + str_builder *sb; + char *colstr; + + if ((sb = strbld_create()) == 0) { + return (uint64_t)-1; + } + strbld_str(sb, "CREATE TABLE `", 0); + strbld_str(sb, modb->name, modb->name_len); + strbld_str(sb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE)); + strbld_str(sb, "` ", 2); + strbld_str(sb, "(", 1); + strbld_str(sb, "`mdo_id` INT UNSIGNED NOT NULL", 0); + for (size_t c = 0; c < cols; c++) { + struct column_data_t *col = *(col_data + c); + if ((colstr = createColString(col)) == 0) { + strbld_destroy(&sb); + return (uint64_t)-1; + } + strbld_str(sb, colstr, 0); + free(colstr); + } + strbld_str(sb, ", INDEX (`mdo_id`))", 0); + if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { + return (uint64_t)-1; + } + + res = simpleQuery(sconn, qry, qry_len); + free(qry); + + return res; +} + + +int tableExists(struct stored_conn_t *sconn, struct modb_t *modb, + const char *suffix, size_t suffix_len) +{ + char *qry, *res; + size_t qry_len; + str_builder *sb; + int retval = 0; + + if ((sb = strbld_create()) == 0) { + return -errno; + } + retval += strbld_str(sb, "SHOW TABLES LIKE '", 0); + retval += strbld_str(sb, modb->name, modb->name_len); + retval += strbld_str(sb, suffix, suffix_len); + retval += strbld_char(sb, '\''); + if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { + return -errno; + } + + res = scalarString(sconn, qry, qry_len, "Z"); + if (res == 0 || strlen(res) != (modb->name_len + suffix_len)) { + retval = -1; + } else { + retval = strncmp(res, modb->name, modb->name_len) == 0; + } + + if (res != 0) { + free(res); + } + free(qry); + + return retval; +} + + +uint64_t destroyTable(struct stored_conn_t *sconn, struct modb_t *modb, + const char *suffix, size_t suffix_len) +{ + char *qry; + uint64_t res; + size_t qry_len; + str_builder *sb; + + if ((sb = strbld_create()) == 0) { + return (uint64_t)-1; + } + strbld_str(sb, "DROP TABLE `", 0); + strbld_str(sb, modb->name, modb->name_len); + strbld_str(sb, suffix, suffix_len); + strbld_str(sb, "` ", 2); + if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { + return (uint64_t)-1; + } + + res = simpleQuery(sconn, qry, qry_len); + free(qry); + + return res; +} diff --git a/src/modb_p.h b/src/modb_p.h index 7e081cb..8ec43f1 100644 --- a/src/modb_p.h +++ b/src/modb_p.h @@ -4,8 +4,7 @@ #include #include -#include "db_connection.h" -#include "db_column.h" +#include "database.h" #include "modb_types.h" @@ -30,12 +29,14 @@ uint64_t createUsersTable(struct stored_conn_t *sconn, struct modb_t *modb); uint64_t createGroupsTable(struct stored_conn_t *sconn, struct modb_t *modb); uint64_t createUserGroupsTable(struct stored_conn_t *sconn, struct modb_t *modb); +uint64_t createMetaExtTable(struct stored_conn_t *sconn, struct modb_t *modb, + struct column_data_t **col_data, size_t cols); + int tableExists(struct stored_conn_t *sconn, struct modb_t *modb, const char *suffix, size_t suffix_len); uint64_t destroyTable(struct stored_conn_t *sconn, struct modb_t *modb, const char *suffix, size_t suffix_len); -char *createColString(struct column_data_t *col); #endif // H__MODB_P__