Simplified database creation

This commit is contained in:
2020-10-07 15:09:29 +01:00
parent 19cac8d09f
commit 022bc6a35d
4 changed files with 31 additions and 92 deletions

View File

@@ -1,13 +1,6 @@
#include <stdlib.h> #include "modb_database.h"
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "modb_management.h"
#include "strext.h"
#include "modb_p.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) 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) { int err = (createSysTable(sconn, modb) == (uint64_t)-1)
return 0; || (createMetaTable(sconn, modb) == (uint64_t)-1)
} || (createObjectsTable(sconn, modb) == (uint64_t)-1)
if (createMetaTable(sconn, modb) == (uint64_t)-1) { || (createMDOGroupsTable(sconn, modb) == (uint64_t)-1)
destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)); || (createUsersTable(sconn, modb) == (uint64_t)-1)
return 0; || (createGroupsTable(sconn, modb) == (uint64_t)-1)
} || (createUserGroupsTable(sconn, modb) == (uint64_t)-1);
if (createObjectsTable(sconn, modb) == (uint64_t)-1) {
destroyMODBTable(sconn, modb, META_TABLE, STR_LEN(META_TABLE)); if (col_data != 0) {
destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_TABLE)); err = err || createMetaExtTable(sconn, modb, col_data, n_cols);
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;
} }
return 1; return !err;
} }
int modbExists(stored_conn *sconn, modb_ref *modb) int modbExists(stored_conn *sconn, modb_ref *modb)
{ {
return MODBTableExists(sconn, modb, META_TABLE, STR_LEN(META_TABLE)); 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) int modbDestroy(stored_conn *sconn, modb_ref *modb)
{ {
uint64_t err = 0 uint64_t err = 0
| destroyMODBTable(sconn, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE)) | destroyMODBTable(sconn, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE))
| destroyMODBTable(sconn, modb, OBJECTS_TABLE, STR_LEN(OBJECTS_TABLE)) | destroyMODBTable(sconn, modb, OBJECTS_TABLE, STR_LEN(OBJECTS_TABLE))
| destroyMODBTable(sconn, modb, META_TABLE, STR_LEN(META_TABLE)) | destroyMODBTable(sconn, modb, META_TABLE, STR_LEN(META_TABLE))
| destroyMODBTable(sconn, modb, SYS_TABLE, STR_LEN(SYS_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, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE)) | destroyMODBTable(sconn, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))
| destroyMODBTable(sconn, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE)) | destroyMODBTable(sconn, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE))
| destroyMODBTable(sconn, modb, USERS_TABLE, STR_LEN(USERS_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, META_EXT_TABLE, STR_LEN(META_EXT_TABLE)); | destroyMODBTable(sconn, modb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE));
return err == 0; return err == 0;
} }

View File

@@ -1,5 +1,5 @@
#ifndef H__MODB_MANAGEMENT__ #ifndef H__MODB_DATABASE__
#define H__MODB_MANAGEMENT__ #define H__MODB_DATABASE__
#include "database.h" #include "database.h"
#include "modb_types.h" #include "modb_types.h"
@@ -12,18 +12,10 @@ void modbReleaseUse(stored_conn *sconn);
// MODB instance // 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 modbExists(stored_conn *sconn, modb_ref *modb);
int modbHasExtendedMetadata(stored_conn *sconn, modb_ref *modb);
int modbDestroy(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, #endif // H__MODB_DATABASE__
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__

View File

@@ -3,7 +3,7 @@
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include "modb_management_p.h" #include "modb_database_p.h"
#include "modb_p.h" #include "modb_p.h"
#include "strext.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) { if ((sb = strbld_create()) == 0) {
return (uint64_t)-1; 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, '`'); modbTableName_sb(sb, modb, suffix, suffix_len, '`');
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return (uint64_t)-1; return (uint64_t)-1;

View File

@@ -1,5 +1,5 @@
#ifndef H__MODB_MANAGEMENT_P__ #ifndef H__MODB_DATABASE_P__
#define H__MODB_MANAGEMENT_P__ #define H__MODB_DATABASE_P__
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
@@ -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); 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 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 createSysTable(stored_conn *sconn, modb_ref *modb);
uint64_t createMetaTable(stored_conn *sconn, modb_ref *modb); uint64_t createMetaTable(stored_conn *sconn, modb_ref *modb);
uint64_t createObjectsTable(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, uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
column_data **col_data, size_t cols); column_data **col_data, size_t cols);
#endif // H__MODB_MANAGEMENT_P__ #endif // H__MODB_DATABASE_P__