Moved createColString into db_column as createColumn

This commit is contained in:
2020-10-06 16:22:09 +01:00
parent 8bf9be5b83
commit e0b7e01ab1
3 changed files with 87 additions and 86 deletions

View File

@@ -372,7 +372,7 @@ int setColumnValue(struct column_data_t *col, uint64_t row, const char *value, s
return 0;
}
struct column_data_t *selectColumn(struct column_data_t **col_data, size_t n_cols, const char *name)
struct column_data_t *findColumn(struct column_data_t **col_data, size_t n_cols, const char *name)
{
struct column_data_t *col = 0;
size_t idx = 0;
@@ -388,3 +388,81 @@ struct column_data_t *selectColumn(struct column_data_t **col_data, size_t n_col
return 0;
}
char *createColumn(struct column_data_t *col, char **str, size_t *len)
{
str_builder *sb;
if ((sb = strbld_create()) == 0) {
return 0;
}
createColumn_sb(sb, col);
if (strbld_finalize_or_destroy(&sb, str, len) != 0) {
return 0;
}
return *str;
}
void createColumn_sb(str_builder *sb, struct column_data_t *col)
{
strbld_str(sb, ", `", 3);
strbld_str(sb, col->name, col->name_len);
strbld_str(sb, "` ", 2);
switch(col->type) {
case TYPE_RAW:
strbld_str(sb, "MEDIUMBLOB", 10);
break;
case TYPE_BOOL:
strbld_str(sb, "BOOLEAN", 7);
break;
case TYPE_INT8:
case TYPE_UINT8:
strbld_str(sb, "TINYINT", 7);
break;
case TYPE_INT16:
case TYPE_UINT16:
strbld_str(sb, "SMALLINT", 8);
break;
case TYPE_INT32:
case TYPE_UINT32:
strbld_str(sb, "INT", 3);
break;
case TYPE_INT64:
case TYPE_UINT64:
strbld_str(sb, "BIGINT", 6);
break;
case TYPE_FLOAT:
strbld_str(sb, "FLOAT", 5);
break;
case TYPE_DOUBLE:
strbld_str(sb, "DOUBLE", 6);
break;
case TYPE_STRING:
strbld_str(sb, "VARCHAR(4096)", 13);
break;
case TYPE_BLOB:
strbld_str(sb, "MEDIUMBLOB", 10);
break;
case TYPE_TIMESTAMP:
strbld_str(sb, "TIMESTAMP", 8);
break;
case TYPE_ID:
strbld_str(sb, "INT", 3);
break;
}
if (col->isUnsigned) {
strbld_str(sb, " UNSIGNED", 0);
}
if (col->isNullable) {
strbld_str(sb, " NULL", 0);
} else {
strbld_str(sb, " NOT NULL", 0);
}
if (col->isAutoIncrement) {
strbld_str(sb, " AUTO_INCREMENT", 0);
}
}

View File

@@ -6,6 +6,7 @@
#include <mysql.h>
#include "db_connection.h"
#include "strext.h"
enum e_column_type_t {
TYPE_RAW = 0 << 0,
@@ -100,7 +101,12 @@ void freeColumns(struct column_data_t **col_data, size_t n_cols);
int setColumnValue(struct column_data_t *col, uint64_t row, const char *value, size_t value_size);
struct column_data_t *selectColumn(struct column_data_t **col_data, size_t n_cols,
struct column_data_t *findColumn(struct column_data_t **col_data, size_t n_cols,
const char *name);
char *createColumn(struct column_data_t *col_data, char **str, size_t *len);
void createColumn_sb(str_builder *sb, struct column_data_t *col);
#endif // H__DB_COLUMN__

View File

@@ -221,82 +221,6 @@ uint64_t createUserGroupsTable(stored_conn *sconn, modb_ref *modb)
}
char *createColString(column_data *col)
{
char *colstr;
size_t colstr_len;
str_builder *sb;
if ((sb = strbld_create()) == 0) {
return 0;
}
strbld_str(sb, ", `", 3);
strbld_str(sb, col->name, col->name_len);
strbld_str(sb, "` ", 2);
switch(col->type) {
case TYPE_RAW:
strbld_str(sb, "MEDIUMBLOB", 10);
break;
case TYPE_BOOL:
strbld_str(sb, "BOOLEAN", 7);
break;
case TYPE_INT8:
case TYPE_UINT8:
strbld_str(sb, "TINYINT", 7);
break;
case TYPE_INT16:
case TYPE_UINT16:
strbld_str(sb, "SMALLINT", 8);
break;
case TYPE_INT32:
case TYPE_UINT32:
strbld_str(sb, "INT", 3);
break;
case TYPE_INT64:
case TYPE_UINT64:
strbld_str(sb, "BIGINT", 6);
break;
case TYPE_FLOAT:
strbld_str(sb, "FLOAT", 5);
break;
case TYPE_DOUBLE:
strbld_str(sb, "DOUBLE", 6);
break;
case TYPE_STRING:
strbld_str(sb, "VARCHAR(4096)", 13);
break;
case TYPE_BLOB:
strbld_str(sb, "MEDIUMBLOB", 10);
break;
case TYPE_TIMESTAMP:
strbld_str(sb, "TIMESTAMP", 8);
break;
case TYPE_ID:
strbld_str(sb, "INT", 3);
break;
}
if (col->isUnsigned) {
strbld_str(sb, " UNSIGNED", 0);
}
if (col->isNullable) {
strbld_str(sb, " NULL", 0);
} else {
strbld_str(sb, " NOT NULL", 0);
}
if (col->isAutoIncrement) {
strbld_str(sb, " AUTO_INCREMENT", 0);
}
if (strbld_finalize_or_destroy(&sb, &colstr, &colstr_len) != 0) {
return 0;
}
return colstr;
}
uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
column_data **col_data, size_t cols)
{
@@ -304,7 +228,6 @@ uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
uint64_t res;
size_t qry_len;
str_builder *sb;
char *colstr;
if ((sb = strbld_create()) == 0) {
return (uint64_t)-1;
@@ -314,13 +237,7 @@ uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
strbld_str(sb, "` ("
"`mdo_id` INT UNSIGNED NOT NULL", 0);
for (size_t c = 0; c < cols; c++) {
column_data *col = *(col_data + c);
if ((colstr = createColString(col)) == 0) {
strbld_destroy(&sb);
return (uint64_t)-1;
}
strbld_str(sb, colstr, 0);
free(colstr);
createColumn_sb(sb, *(col_data + c));
}
strbld_str(sb, ", INDEX (`mdo_id`))", 0);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {