Query to get ID maps
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user