diff --git a/src/db_column.c b/src/db_column.c index e62a3f3..7e2c9df 100644 --- a/src/db_column.c +++ b/src/db_column.c @@ -147,6 +147,9 @@ struct column_data_t *initEmptyColumn(e_column_type type, int nullable, const ch col->type = type; col->type_bytes = columnTypeToByteSize(col->type); + if (col->type == TYPE_STRING) { + col->max_len = 255; + } col->n_values = 0; @@ -462,11 +465,18 @@ void escapeColumnName_sb(str_builder *sb, strbld_char(sb,'`'); strbld_char(sb,'.'); } - strbld_char(sb,'`'); - if (col != 0) { - strbld_str(sb, col, col_len); + if (col_len == 0) { + col_len = strlen(col); + } + if (col_len == 1 && col[0] == '*') { + strbld_char(sb, '*'); + } else { + strbld_char(sb,'`'); + if (col != 0) { + strbld_str(sb, col, col_len); + } + strbld_char(sb,'`'); } - strbld_char(sb,'`'); } char *escapeColumnNameAs(char **str, size_t *len, const char *tbl, size_t tbl_len, @@ -551,7 +561,9 @@ void columnCreateStr_sb(str_builder *sb, struct column_data_t *col) strbld_str(sb, "DOUBLE", 6); break; case TYPE_STRING: - strbld_str(sb, "VARCHAR(4096)", 13); + strbld_str(sb, "VARCHAR(", 8); + db_value_sb(sb, TYPE_UINT32, 1, col->max_len); + strbld_char(sb, ')'); break; case TYPE_BLOB: strbld_str(sb, "MEDIUMBLOB", 10); diff --git a/src/db_column.h b/src/db_column.h index c993cc4..445dfaf 100644 --- a/src/db_column.h +++ b/src/db_column.h @@ -37,6 +37,7 @@ struct column_data_t { enum e_column_type_t type; size_t type_bytes; + size_t max_len; size_t n_values;