From 022bc6a35def99cb2fe0adaf4e6c36c8fbbf44d4 Mon Sep 17 00:00:00 2001 From: avsdev-cw Date: Wed, 7 Oct 2020 15:09:29 +0100 Subject: [PATCH] Simplified database creation --- src/modb_database.c | 94 +++++++++---------------------------------- src/modb_database.h | 18 +++------ src/modb_database_p.c | 4 +- src/modb_database_p.h | 7 ++-- 4 files changed, 31 insertions(+), 92 deletions(-) diff --git a/src/modb_database.c b/src/modb_database.c index 8569901..ec36e37 100644 --- a/src/modb_database.c +++ b/src/modb_database.c @@ -1,13 +1,6 @@ -#include -#include -#include -#include - -#include "modb_management.h" -#include "strext.h" - +#include "modb_database.h" #include "modb_p.h" -#include "modb_management_p.h" +#include "modb_database_p.h" int modbUse(stored_conn *sconn, modb_ref *modb, int override) @@ -24,87 +17,40 @@ void modbReleaseUse(stored_conn *sconn) } -int modbCreate(stored_conn *sconn, modb_ref *modb) +int modbCreate(stored_conn *sconn, modb_ref *modb, column_data **col_data, size_t n_cols) { - if (createSysTable(sconn, modb) == (uint64_t)-1) { - return 0; - } - if (createMetaTable(sconn, modb) == (uint64_t)-1) { - destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)); - return 0; - } - if (createObjectsTable(sconn, modb) == (uint64_t)-1) { - destroyMODBTable(sconn, modb, META_TABLE, STR_LEN(META_TABLE)); - destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)); - return 0; - } - if (createMDOGroupsTable(sconn, modb) == (uint64_t)-1) { - destroyMODBTable(sconn, modb, OBJECTS_TABLE, STR_LEN(OBJECTS_TABLE)); - destroyMODBTable(sconn, modb, META_TABLE, STR_LEN(META_TABLE)); - destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)); - return 0; + int err = (createSysTable(sconn, modb) == (uint64_t)-1) + || (createMetaTable(sconn, modb) == (uint64_t)-1) + || (createObjectsTable(sconn, modb) == (uint64_t)-1) + || (createMDOGroupsTable(sconn, modb) == (uint64_t)-1) + || (createUsersTable(sconn, modb) == (uint64_t)-1) + || (createGroupsTable(sconn, modb) == (uint64_t)-1) + || (createUserGroupsTable(sconn, modb) == (uint64_t)-1); + + if (col_data != 0) { + err = err || createMetaExtTable(sconn, modb, col_data, n_cols); } - return 1; + return !err; } int modbExists(stored_conn *sconn, modb_ref *modb) { return MODBTableExists(sconn, modb, META_TABLE, STR_LEN(META_TABLE)); } +int modbHasExtendedMetadata(stored_conn *sconn, modb_ref *modb) +{ + return MODBTableExists(sconn, modb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE)); +} int modbDestroy(stored_conn *sconn, modb_ref *modb) { uint64_t err = 0 | destroyMODBTable(sconn, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE)) | destroyMODBTable(sconn, modb, OBJECTS_TABLE, STR_LEN(OBJECTS_TABLE)) | destroyMODBTable(sconn, modb, META_TABLE, STR_LEN(META_TABLE)) - | destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)); - return err == 0; -} - -int modbAccountingCreate(stored_conn *sconn, modb_ref *modb) -{ - if (createUsersTable(sconn, modb) == (uint64_t)-1) { - return 0; - } - if (createGroupsTable(sconn, modb) == (uint64_t)-1) { - destroyMODBTable(sconn, modb, USERS_TABLE, STR_LEN(USERS_TABLE)); - return 0; - } - if (createUserGroupsTable(sconn, modb) == (uint64_t)-1) { - destroyMODBTable(sconn, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE)); - destroyMODBTable(sconn, modb, USERS_TABLE, STR_LEN(USERS_TABLE)); - return 0; - } - - return 1; -} -int modbAccountingExists(stored_conn *sconn, modb_ref *modb) -{ - return MODBTableExists(sconn, modb, USERS_TABLE, STR_LEN(USERS_TABLE)); -} -int modbAccountingDestroy(stored_conn *sconn, modb_ref *modb) -{ - uint64_t err = 0 + | destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)) | destroyMODBTable(sconn, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE)) | destroyMODBTable(sconn, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE)) - | destroyMODBTable(sconn, modb, USERS_TABLE, STR_LEN(USERS_TABLE)); - return err == 0; -} - -int modbMetaExtCreate(stored_conn *sconn, modb_ref *modb, - column_data **col_data, size_t cols) -{ - uint64_t err = 0 - | createMetaExtTable(sconn, modb, col_data, cols); - return err == 0; -} -int modbMetaExtExists(stored_conn *sconn, modb_ref *modb) -{ - return MODBTableExists(sconn, modb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE)); -} -int modbMetaExtDestroy(stored_conn *sconn, modb_ref *modb) -{ - uint64_t err = 0 + | destroyMODBTable(sconn, modb, USERS_TABLE, STR_LEN(USERS_TABLE)) | destroyMODBTable(sconn, modb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE)); return err == 0; } diff --git a/src/modb_database.h b/src/modb_database.h index 9b59883..0680940 100644 --- a/src/modb_database.h +++ b/src/modb_database.h @@ -1,5 +1,5 @@ -#ifndef H__MODB_MANAGEMENT__ -#define H__MODB_MANAGEMENT__ +#ifndef H__MODB_DATABASE__ +#define H__MODB_DATABASE__ #include "database.h" #include "modb_types.h" @@ -12,18 +12,10 @@ void modbReleaseUse(stored_conn *sconn); // MODB instance -int modbCreate(stored_conn *sconn, modb_ref *modb); +int modbCreate(stored_conn *sconn, modb_ref *modb, column_data **col_data, size_t n_cols); int modbExists(stored_conn *sconn, modb_ref *modb); +int modbHasExtendedMetadata(stored_conn *sconn, modb_ref *modb); int modbDestroy(stored_conn *sconn, modb_ref *modb); -int modbAccountingCreate(stored_conn *sconn, modb_ref *modb); -int modbAccountingExists(stored_conn *sconn, modb_ref *modb); -int modbAccountingDestroy(stored_conn *sconn, modb_ref *modb); -int modbMetaExtCreate(stored_conn *sconn, modb_ref *modb, - column_data **col_data, size_t cols); -int modbMetaExtExists(stored_conn *sconn, modb_ref *modb); -int modbMetaExtDestroy(stored_conn *sconn, modb_ref *modb); - - -#endif // H__MODB_MANAGEMENT__ +#endif // H__MODB_DATABASE__ diff --git a/src/modb_database_p.c b/src/modb_database_p.c index 22499e7..edff6c4 100644 --- a/src/modb_database_p.c +++ b/src/modb_database_p.c @@ -3,7 +3,7 @@ #include #include -#include "modb_management_p.h" +#include "modb_database_p.h" #include "modb_p.h" #include "strext.h" @@ -224,7 +224,7 @@ uint64_t destroyMODBTable(stored_conn *sconn, modb_ref *modb, const char *suffix if ((sb = strbld_create()) == 0) { return (uint64_t)-1; } - strbld_str(sb, "DROP TABLE ", 0); + strbld_str(sb, "DROP TABLE IF EXISTS ", 0); modbTableName_sb(sb, modb, suffix, suffix_len, '`'); if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { return (uint64_t)-1; diff --git a/src/modb_database_p.h b/src/modb_database_p.h index 451b228..d9dc199 100644 --- a/src/modb_database_p.h +++ b/src/modb_database_p.h @@ -1,5 +1,5 @@ -#ifndef H__MODB_MANAGEMENT_P__ -#define H__MODB_MANAGEMENT_P__ +#ifndef H__MODB_DATABASE_P__ +#define H__MODB_DATABASE_P__ #include #include @@ -17,6 +17,7 @@ uint64_t createMODBTable(stored_conn *sconn, modb_ref *modb, const char *suffix, int MODBTableExists(stored_conn *sconn, modb_ref *modb, const char *suffix, size_t suffix_len); uint64_t destroyMODBTable(stored_conn *sconn, modb_ref *modb, const char *suffix, size_t suffix_len); + uint64_t createSysTable(stored_conn *sconn, modb_ref *modb); uint64_t createMetaTable(stored_conn *sconn, modb_ref *modb); uint64_t createObjectsTable(stored_conn *sconn, modb_ref *modb); @@ -29,4 +30,4 @@ uint64_t createUserGroupsTable(stored_conn *sconn, modb_ref *modb); uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb, column_data **col_data, size_t cols); -#endif // H__MODB_MANAGEMENT_P__ +#endif // H__MODB_DATABASE_P__