Query to get ID maps

This commit is contained in:
2020-10-15 12:07:03 +01:00
parent 663d8e4f28
commit f0df7a64bb
2 changed files with 57 additions and 0 deletions

View File

@@ -471,6 +471,59 @@ int64_t syncIdMap_va(struct stored_conn_t *sconn, const char *table, size_t tabl
return ret_val;
}
int64_t getIdMaps(struct stored_conn_t *sconn, const char *table, size_t table_len,
const char *primary_col, const char *map_col,
unsigned int primary_id, size_t *n_maps, unsigned int **map_ids)
{
char *qry;
size_t qry_len;
uint64_t qry_ret;
str_builder *sb;
where_builder *wb;
column_data **col_data;
size_t n_cols;
if ((sb = strbld_create()) == 0) {
return -1;
}
strbld_str(sb, "SELECT ", 7);
escapeColumnName_sb(sb, 0, 0, map_col, 0);
strbld_str(sb, " FROM ", 6);
escapeTableName_sb(sb, table, table_len);
wb = where(0, primary_col, EQ, TYPE_ID, 1, primary_id);
compileWhereBuilder_sb(sb, wb, 1);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return -1;
}
qry_ret = tableQuery(sconn, qry, qry_len, 0, &col_data, &n_cols);
free(qry);
// Query failed
if (qry_ret == (uint64_t)-1) {
return -1;
}
// Zero row result
if (qry_ret == 0) {
freeColumns(col_data, n_cols);
*n_maps = 0;
*map_ids = 0;
return 0;
}
*map_ids = (*col_data)->data.ptr_uint32;
*n_maps = (*col_data)->n_values;
(*col_data)->data.ptr_uint32 = 0;
freeColumns(col_data, n_cols);
return (int64_t)n_maps;
}
int64_t hasIdMap(struct stored_conn_t *sconn, const char *table, size_t table_len,
const char *primary_col, const char *map_col,

View File

@@ -55,6 +55,10 @@ int64_t syncIdMap_va(struct stored_conn_t *sconn, const char *table, size_t tabl
const char *primary_col, const char *map_col,
unsigned int primary_id, size_t n_maps, va_list args);
int64_t getIdMaps(struct stored_conn_t *sconn, const char *table, size_t table_len,
const char *primary_col, const char *map_col,
unsigned int primary_id, size_t *n_maps, unsigned int **map_ids);
int64_t hasIdMap(struct stored_conn_t *sconn, const char *table, size_t table_len,
const char *primary_col, const char *map_col,
unsigned int primary_id, unsigned int map_id);