Make const versions of strings in structs to avoid string copying & pass objects to create/update instead of values
This commit is contained in:
@@ -14,7 +14,8 @@
|
||||
int tableRowsToMetadataList(column_data **col_data, size_t n_cols,
|
||||
struct metadata_t ***metadata_list, size_t *n_metadatas)
|
||||
{
|
||||
column_data *col_id, *col_title, *col_owner_id, *col_created, *col_updated, *col_deleted;
|
||||
column_data *col_id, *col_type, *col_title, *col_owner_id,
|
||||
*col_created, *col_updated, *col_deleted;
|
||||
size_t n_rows, idx;
|
||||
struct metadata_t *metadata;
|
||||
|
||||
@@ -24,6 +25,7 @@ int tableRowsToMetadataList(column_data **col_data, size_t n_cols,
|
||||
}
|
||||
|
||||
col_id = findColumnByName(col_data, n_cols, "mdo_id");
|
||||
col_type = findColumnByName(col_data, n_cols, "type");
|
||||
col_title = findColumnByName(col_data, n_cols, "title");
|
||||
col_owner_id = findColumnByName(col_data, n_cols, "owner_id");
|
||||
col_created = findColumnByName(col_data, n_cols, "created");
|
||||
@@ -46,10 +48,17 @@ int tableRowsToMetadataList(column_data **col_data, size_t n_cols,
|
||||
|
||||
metadata->id = *(col_id->data.ptr_uint32 + idx);
|
||||
|
||||
if (!moveColumnStrPointer(col_type, idx, 1, &metadata->type, &metadata->type_len)) {
|
||||
freeMetadataList(metadata_list, idx);
|
||||
return -1;
|
||||
}
|
||||
metadata->type_c = metadata->type;
|
||||
|
||||
if (!moveColumnStrPointer(col_title, idx, 1, &metadata->title, &metadata->title_len)) {
|
||||
freeMetadataList(metadata_list, idx);
|
||||
return -1;
|
||||
}
|
||||
metadata->title_c = metadata->title;
|
||||
|
||||
metadata->owner_id = *(col_owner_id->data.ptr_uint32 + idx);
|
||||
|
||||
@@ -304,8 +313,8 @@ int modbMetadataList(stored_conn *sconn, modb_ref *modb, int with_deleted,
|
||||
return res;
|
||||
}
|
||||
|
||||
int64_t modbMetadataCreate(stored_conn *sconn, modb_ref *modb,
|
||||
const struct metadata_t *const metadata)
|
||||
unsigned int modbMetadataCreate(stored_conn *sconn, modb_ref *modb,
|
||||
struct metadata_t *metadata)
|
||||
{
|
||||
str_builder *sb;
|
||||
char *table;
|
||||
@@ -314,6 +323,13 @@ int64_t modbMetadataCreate(stored_conn *sconn, modb_ref *modb,
|
||||
size_t qry_len;
|
||||
uint64_t qry_ret;
|
||||
|
||||
if (metadata->type_c == 0) {
|
||||
metadata->type_c = metadata->type;
|
||||
}
|
||||
if (metadata->title_c == 0) {
|
||||
metadata->title_c = metadata->title;
|
||||
}
|
||||
|
||||
if ((sb = strbld_create()) == 0) {
|
||||
return 0;
|
||||
}
|
||||
@@ -324,9 +340,9 @@ int64_t modbMetadataCreate(stored_conn *sconn, modb_ref *modb,
|
||||
strbld_str(sb, " (`mdo_id`, `type`, `title`, `owner_id`) VALUES (", 0);
|
||||
db_value_sb(sb, TYPE_ID, 1, metadata->id);
|
||||
strbld_char(sb, ',');
|
||||
db_value_sb(sb, TYPE_STRING, 2, metadata->type, metadata->type_len);
|
||||
db_value_sb(sb, TYPE_STRING, 2, metadata->type_c, metadata->type_len);
|
||||
strbld_char(sb, ',');
|
||||
db_value_sb(sb, TYPE_STRING, 2, metadata->title, metadata->title_len);
|
||||
db_value_sb(sb, TYPE_STRING, 2, metadata->title_c, metadata->title_len);
|
||||
strbld_char(sb, ',');
|
||||
if (metadata->owner != 0) {
|
||||
db_value_sb(sb, TYPE_ID, 1, metadata->owner->id);
|
||||
@@ -347,13 +363,20 @@ int64_t modbMetadataCreate(stored_conn *sconn, modb_ref *modb,
|
||||
}
|
||||
|
||||
int64_t modbMetadataReplace(stored_conn *sconn, modb_ref *modb, unsigned int id,
|
||||
const struct metadata_t *const metadata)
|
||||
struct metadata_t *metadata)
|
||||
{
|
||||
str_builder *sb;
|
||||
char *table, *set;
|
||||
size_t table_len, set_len;
|
||||
int64_t qry_ret;
|
||||
|
||||
if (metadata->type_c == 0) {
|
||||
metadata->type_c = metadata->type;
|
||||
}
|
||||
if (metadata->title_c == 0) {
|
||||
metadata->title_c = metadata->title;
|
||||
}
|
||||
|
||||
if ((sb = strbld_create()) == 0) {
|
||||
return 0;
|
||||
}
|
||||
@@ -361,13 +384,13 @@ int64_t modbMetadataReplace(stored_conn *sconn, modb_ref *modb, unsigned int id,
|
||||
strbld_char(sb, ',');
|
||||
columnSetValueStr_sb(sb, "mdo_id", TYPE_ID, 1, metadata->id);
|
||||
}
|
||||
if (metadata->type != 0) {
|
||||
if (metadata->type_c != 0) {
|
||||
strbld_char(sb, ',');
|
||||
columnSetValueStr_sb(sb, "type", TYPE_STRING, 2, metadata->type, metadata->type_len);
|
||||
columnSetValueStr_sb(sb, "type", TYPE_STRING, 2, metadata->type_c, metadata->type_len);
|
||||
}
|
||||
if (metadata->title != 0) {
|
||||
if (metadata->title_c != 0) {
|
||||
strbld_char(sb, ',');
|
||||
columnSetValueStr_sb(sb, "title", TYPE_STRING, 2, metadata->title, metadata->title_len);
|
||||
columnSetValueStr_sb(sb, "title", TYPE_STRING, 2, metadata->title_c, metadata->title_len);
|
||||
}
|
||||
if (metadata->owner != 0) {
|
||||
strbld_char(sb, ',');
|
||||
|
||||
Reference in New Issue
Block a user