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; 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; struct column_data_t *col = 0;
size_t idx = 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; 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 <mysql.h>
#include "db_connection.h" #include "db_connection.h"
#include "strext.h"
enum e_column_type_t { enum e_column_type_t {
TYPE_RAW = 0 << 0, 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); 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); 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__ #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, uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
column_data **col_data, size_t cols) column_data **col_data, size_t cols)
{ {
@@ -304,7 +228,6 @@ uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
uint64_t res; uint64_t res;
size_t qry_len; size_t qry_len;
str_builder *sb; str_builder *sb;
char *colstr;
if ((sb = strbld_create()) == 0) { if ((sb = strbld_create()) == 0) {
return (uint64_t)-1; return (uint64_t)-1;
@@ -314,13 +237,7 @@ uint64_t createMetaExtTable(stored_conn *sconn, modb_ref *modb,
strbld_str(sb, "` (" strbld_str(sb, "` ("
"`mdo_id` INT UNSIGNED NOT NULL", 0); "`mdo_id` INT UNSIGNED NOT NULL", 0);
for (size_t c = 0; c < cols; c++) { for (size_t c = 0; c < cols; c++) {
column_data *col = *(col_data + c); createColumn_sb(sb, *(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); strbld_str(sb, ", INDEX (`mdo_id`))", 0);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {