modbTableName now takes an optional encapsulation char

This commit is contained in:
2020-10-07 14:37:39 +01:00
parent 0ab65604e0
commit 3847818116
5 changed files with 88 additions and 88 deletions

View File

@@ -137,9 +137,9 @@ int64_t modbUserCreate(stored_conn *sconn, modb_ref *modb,
if ((sb = strbld_create()) == 0) {
return -1;
}
strbld_str(sb, "INSERT INTO `", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE));
strbld_str(sb, "` (`id`, `username`, `email`) VALUES(", 0);
strbld_str(sb, "INSERT INTO ", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE), '`');
strbld_str(sb, " (`id`, `username`, `email`) VALUES(", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
strbld_str(sb, ", ", 0);
db_value_sb(sb, TYPE_STRING, 1, user_name);
@@ -166,9 +166,9 @@ int64_t modbUserUpdate(stored_conn *sconn, modb_ref *modb, unsigned int id,
if ((sb = strbld_create()) == 0) {
return 0;
}
strbld_str(sb, "UPDATE `", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE));
strbld_str(sb, "` SET `id` = ", 0);
strbld_str(sb, "UPDATE ", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE), '`');
strbld_str(sb, " SET `id` = ", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
if (username != 0) {
@@ -207,8 +207,8 @@ int modbUserDelete(stored_conn *sconn, modb_ref *modb, int id)
return 0;
}
strbld_str(sb, "UPDATE`", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE));
strbld_str(sb, "` SET `deleted` = CURRENT_TIMESTAMP() WHERE `id` = ", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE), '`');
strbld_str(sb, " SET `deleted` = CURRENT_TIMESTAMP() WHERE `id` = ", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return 0;
@@ -234,9 +234,9 @@ int modbUserDestroy(stored_conn *sconn, modb_ref *modb, int id)
if ((sb = strbld_create()) == 0) {
return 0;
}
strbld_str(sb, "DELETE FROM `", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE));
strbld_str(sb, "` WHERE `id` = ", 0);
strbld_str(sb, "DELETE FROM ", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE), '`');
strbld_str(sb, " WHERE `id` = ", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return 0;
@@ -344,8 +344,8 @@ int64_t modbGroupCreate(stored_conn *sconn, modb_ref *modb,
return -1;
}
strbld_str(sb, "INSERT INTO`", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE));
strbld_str(sb, "` (`id`, `name`) VALUES(", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE), '`');
strbld_str(sb, " (`id`, `name`) VALUES(", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
strbld_str(sb, ", ", 0);
db_value_sb(sb, TYPE_STRING, 1, name);
@@ -370,9 +370,9 @@ int64_t modbGroupUpdate(stored_conn *sconn, modb_ref *modb, unsigned int id,
if ((sb = strbld_create()) == 0) {
return 0;
}
strbld_str(sb, "UPDATE `", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE));
strbld_str(sb, "` SET `id` = ", 0);
strbld_str(sb, "UPDATE ", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE), '`');
strbld_str(sb, " SET `id` = ", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
if (name == 0) {
@@ -407,9 +407,9 @@ int modbGroupDelete(stored_conn *sconn, modb_ref *modb, int id)
if ((sb = strbld_create()) == 0) {
return 0;
}
strbld_str(sb, "UPDATE `", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE));
strbld_str(sb, "` SET `deleted` = CURRENT_TIMESTAMP() WHERE `id` = ", 0);
strbld_str(sb, "UPDATE ", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE), '`');
strbld_str(sb, " SET `deleted` = CURRENT_TIMESTAMP() WHERE `id` = ", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return 0;
@@ -435,9 +435,9 @@ int modbGroupDestroy(stored_conn *sconn, modb_ref *modb, int id)
if ((sb = strbld_create()) == 0) {
return 0;
}
strbld_str(sb, "DELETE FROM `", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE));
strbld_str(sb, "` WHERE `id` = ", 0);
strbld_str(sb, "DELETE FROM ", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE), '`');
strbld_str(sb, " WHERE `id` = ", 0);
db_value_sb(sb, TYPE_UINT32, 1, id);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return 0;
@@ -463,7 +463,7 @@ int modbSyncGroupsUser(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}
@@ -479,7 +479,7 @@ int modbSyncUserGroups_va(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}
@@ -497,7 +497,7 @@ int modbSyncGroupUsers(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}
@@ -513,7 +513,7 @@ int modbSyncGroupUsers_va(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}
@@ -545,16 +545,16 @@ int modbFetchUserGroupIds(stored_conn *sconn, modb_ref *modb, int with_deleted,
if ((sb = strbld_create()) == 0) {
return -errno;
}
strbld_str(sb, "SELECT `group_id` FROM `", 0);
modbTableName_sb(sb, modb, USER_GROUPS_TABLE, strlen(USER_GROUPS_TABLE));
strbld_str(sb, "` ", 2);
strbld_str(sb, "SELECT `group_id` FROM ", 0);
modbTableName_sb(sb, modb, USER_GROUPS_TABLE, strlen(USER_GROUPS_TABLE), '`');
strbld_char(sb, ' ');
modbJoin_sb(sb, modb, "LEFT", 4, 1,
GROUPS_TABLE, strlen(GROUPS_TABLE), "id", 2,
USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), "group_id", 8);
strbld_str(sb, " WHERE ", 0);
wb = where(0, "user_id", EQ, TYPE_ID, 1, user_id);
if (!with_deleted) {
table = modbTableName(modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE));
table = modbTableName(modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE), 0);
wb = whereAnd(wb, where(table, "deleted", IS_NULL, TYPE_RAW, 0));
free(table);
}
@@ -603,16 +603,16 @@ int modbFetchGroupUserIds(stored_conn *sconn, modb_ref *modb, int with_deleted,
if ((sb = strbld_create()) == 0) {
return -errno;
}
strbld_str(sb, "SELECT `user_id` FROM `", 0);
modbTableName_sb(sb, modb, USER_GROUPS_TABLE, strlen(USER_GROUPS_TABLE));
strbld_str(sb, "` ", 2);
strbld_str(sb, "SELECT `user_id` FROM ", 0);
modbTableName_sb(sb, modb, USER_GROUPS_TABLE, strlen(USER_GROUPS_TABLE), '`');
strbld_char(sb, ' ');
modbJoin_sb(sb, modb, "LEFT", 4, 1,
USERS_TABLE, strlen(USERS_TABLE), "id", 2,
USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), "user_id", 8);
strbld_str(sb, " WHERE ", 0);
wb = where(0, "group_id", EQ, TYPE_ID, 1, group_id);
if (!with_deleted) {
table = modbTableName(modb, USERS_TABLE, STR_LEN(USERS_TABLE));
table = modbTableName(modb, USERS_TABLE, STR_LEN(USERS_TABLE), 0);
wb = whereAnd(wb, where(table, "deleted", IS_NULL, TYPE_RAW, 0));
free(table);
}
@@ -709,7 +709,7 @@ int modbIsLinked_Group_User(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}
@@ -724,7 +724,7 @@ int modbLink_Group_User(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}
@@ -739,7 +739,7 @@ int modbUnlink_Group_User(stored_conn *sconn, modb_ref *modb,
int qry_ret;
char *table;
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE))) == 0) {
if ((table = modbTableName(modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), 0)) == 0) {
return 0;
}

View File

@@ -83,9 +83,8 @@ int doUsersQuery(stored_conn *sconn, modb_ref *modb, where_builder *wb,
if ((sb = strbld_create()) == 0) {
return -errno;
}
strbld_str(sb, "SELECT * FROM `", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE));
strbld_char(sb, '`');
strbld_str(sb, "SELECT * FROM ", 0);
modbTableName_sb(sb, modb, USERS_TABLE, strlen(USERS_TABLE), '`');
if (wb != 0) {
strbld_str(sb, " WHERE ", 0);
compileWhereBuilder_sb(wb, sb, 0);
@@ -207,9 +206,8 @@ int doGroupsQuery(stored_conn *sconn, modb_ref *modb, where_builder *wb,
if ((sb = strbld_create()) == 0) {
return -1;
}
strbld_str(sb, "SELECT * FROM `", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE));
strbld_char(sb, '`');
strbld_str(sb, "SELECT * FROM ", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, strlen(GROUPS_TABLE), '`');
if (wb != 0) {
strbld_str(sb, " WHERE ", 0);
compileWhereBuilder_sb(wb, sb, 0);

View File

@@ -30,9 +30,9 @@ uint64_t createSysTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, SYS_TABLE, STR_LEN(SYS_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, SYS_TABLE, STR_LEN(SYS_TABLE), '`');
strbld_str(sb, " ("
"`key` VARCHAR(255) NULL, "
"`value` VARCHAR(255) NULL, "
"UNIQUE(`key`)"
@@ -56,9 +56,9 @@ uint64_t createMetaTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, META_TABLE, STR_LEN(META_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, META_TABLE, STR_LEN(META_TABLE), '`');
strbld_str(sb, " ("
"`mdo_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, "
"`title` VARCHAR(255) NOT NULL, "
"`owner` INT UNSIGNED NOT NULL, "
@@ -86,9 +86,9 @@ uint64_t createObjectsTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, OBJECTS_TABLE, STR_LEN(OBJECTS_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, OBJECTS_TABLE, STR_LEN(OBJECTS_TABLE), '`');
strbld_str(sb, " ("
"`mdo_id` INT UNSIGNED NOT NULL, "
"`object` MEDIUMBLOB NOT NULL, "
"PRIMARY KEY (`mdo_id`)"
@@ -112,9 +112,9 @@ uint64_t createMDOGroupsTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, MDO_GROUPS_TABLE, STR_LEN(MDO_GROUPS_TABLE), '`');
strbld_str(sb, " ("
"`mdo_id` INT UNSIGNED NOT NULL, "
"`group_id` INT UNSIGNED NOT NULL, "
"INDEX(`mdo_id`), "
@@ -140,9 +140,9 @@ uint64_t createUsersTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, USERS_TABLE, STR_LEN(USERS_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, USERS_TABLE, STR_LEN(USERS_TABLE), '`');
strbld_str(sb, " ("
"`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, "
"`username` VARCHAR(255) NOT NULL, "
"`email` VARCHAR(255) NOT NULL, "
@@ -172,9 +172,9 @@ uint64_t createGroupsTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, GROUPS_TABLE, STR_LEN(GROUPS_TABLE), '`');
strbld_str(sb, " ("
"`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, "
"`name` VARCHAR(255) NOT NULL, "
"`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "
@@ -202,9 +202,9 @@ uint64_t createUserGroupsTable(stored_conn *sconn, modb_ref *modb)
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, USER_GROUPS_TABLE, STR_LEN(USER_GROUPS_TABLE), '`');
strbld_str(sb, " ("
"`user_id` INT UNSIGNED NOT NULL, "
"`group_id` INT UNSIGNED NOT NULL, "
"INDEX(`user_id`), "
@@ -232,9 +232,9 @@ uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "CREATE TABLE `", 0);
modbTableName_sb(sb, modb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE));
strbld_str(sb, "` ("
strbld_str(sb, "CREATE TABLE ", 0);
modbTableName_sb(sb, modb, META_EXT_TABLE, STR_LEN(META_EXT_TABLE), '`');
strbld_str(sb, " ("
"`mdo_id` INT UNSIGNED NOT NULL", 0);
for (size_t c = 0; c < cols; c++) {
createColumn_sb(sb, *(col_data + c));
@@ -261,9 +261,8 @@ int tableExists(stored_conn *sconn, modb_ref *modb, const char *suffix, size_t s
if ((sb = strbld_create()) == 0) {
return -errno;
}
strbld_str(sb, "SHOW TABLES LIKE '", 0);
modbTableName_sb(sb, modb, suffix, suffix_len);
strbld_char(sb, '\'');
strbld_str(sb, "SHOW TABLES LIKE ", 0);
modbTableName_sb(sb, modb, suffix, suffix_len, '\'');
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return -errno;
}
@@ -304,9 +303,8 @@ uint64_t destroyTable(stored_conn *sconn, modb_ref *modb, const char *suffix, si
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
}
strbld_str(sb, "DROP TABLE `", 0);
modbTableName_sb(sb, modb, suffix, suffix_len);
strbld_char(sb, '`');
strbld_str(sb, "DROP TABLE ", 0);
modbTableName_sb(sb, modb, suffix, suffix_len, '`');
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return (uint64_t)-1;
}

View File

@@ -1,7 +1,7 @@
#include "modb_p.h"
#include "strext.h"
char *modbTableName(modb_ref *modb, const char *suffix, size_t suffix_len)
char *modbTableName(modb_ref *modb, const char *suffix, size_t suffix_len, char encap)
{
str_builder *sb;
char *str;
@@ -11,7 +11,7 @@ char *modbTableName(modb_ref *modb, const char *suffix, size_t suffix_len)
return 0;
}
modbTableName_sb(sb, modb, suffix, suffix_len);
modbTableName_sb(sb, modb, suffix, suffix_len, encap);
if (strbld_finalize_or_destroy(&sb, &str, &len) != 0) {
return 0;
@@ -20,10 +20,17 @@ char *modbTableName(modb_ref *modb, const char *suffix, size_t suffix_len)
return str;
}
void modbTableName_sb(str_builder *sb, modb_ref *modb, const char *suffix, size_t suffix_len)
void modbTableName_sb(str_builder *sb, modb_ref *modb, const char *suffix, size_t suffix_len,
char encap)
{
if (encap != 0) {
strbld_char(sb, encap);
}
strbld_str(sb, modb->name, modb->name_len);
strbld_str(sb, suffix, suffix_len);
if (encap != 0) {
strbld_char(sb, encap);
}
}
@@ -58,10 +65,10 @@ void modbJoin_sb(str_builder *sb, modb_ref *modb,
{
strbld_str(sb, join, join_len);
strbld_str(sb, " JOIN ", 6);
modbTableName_sb(sb, modb, tableA, tableA_len);
modbTableName_sb(sb, modb, tableA, tableA_len, '`');
strbld_str(sb, " ON ", 4);
modbColumnName_sb(sb, modb, tableA, tableA_len, colA, colA_len);
strbld_str(sb, equals ? " = " : " != ", 4);
strbld_str(sb, (equals ? " = " : " != "), (equals ? 3 : 4));
modbColumnName_sb(sb, modb, tableB, tableB_len, colB, colB_len);
}
@@ -91,9 +98,7 @@ void modbColumnName_sb(str_builder *sb, modb_ref *modb,
const char *column, size_t column_len)
{
if (table != 0) {
strbld_char(sb, '`');
modbTableName_sb(sb, modb, table, table_len);
strbld_char(sb, '`');
modbTableName_sb(sb, modb, table, table_len, '`');
strbld_char(sb, '.');
}
strbld_char(sb, '`');
@@ -128,9 +133,7 @@ void modbColumnNameAs_sb(str_builder *sb, modb_ref *modb,
const char *as_column, size_t as_column_len)
{
if (table != 0) {
strbld_char(sb, '`');
modbTableName_sb(sb, modb, table, table_len);
strbld_char(sb, '`');
modbTableName_sb(sb, modb, table, table_len, '`');
strbld_char(sb, '.');
}
strbld_char(sb, '`');

View File

@@ -19,8 +19,9 @@
#define META_EXT_TABLE "_meta_ext"
char *modbTableName(modb_ref *modb, const char *suffix, size_t suffix_len);
void modbTableName_sb(str_builder *sb, modb_ref *modb, const char *suffix, size_t suffix_len);
char *modbTableName(modb_ref *modb, const char *suffix, size_t suffix_len, char encap);
void modbTableName_sb(str_builder *sb, modb_ref *modb, const char *suffix, size_t suffix_len,
char encap);
char *modbJoin(modb_ref *modb,
const char *join, size_t join_len, int equals,