Flag to free the where builder when compiling

This commit is contained in:
2020-10-07 12:40:04 +01:00
parent 12db8ea12c
commit b62a3f0c99
4 changed files with 11 additions and 10 deletions

View File

@@ -284,12 +284,10 @@ int64_t countQuery(struct stored_conn_t *sconn, const char *table, where_builder
strbld_str(sb, "SELECT COUNT(*) AS `C` FROM `", 0); strbld_str(sb, "SELECT COUNT(*) AS `C` FROM `", 0);
strbld_str(sb, table, 0); strbld_str(sb, table, 0);
strbld_str(sb, "` WHERE ", 0); strbld_str(sb, "` WHERE ", 0);
compileWhereBuilder_sb(wb, sb); compileWhereBuilder_sb(wb, sb, 0);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
freeWhereBuilder(&wb);
return -1; return -1;
} }
freeWhereBuilder(&wb);
qry_ret = scalarInt(sconn, qry, qry_len, 0); qry_ret = scalarInt(sconn, qry, qry_len, 0);
free(qry); free(qry);
@@ -310,7 +308,7 @@ int deleteQuery(struct stored_conn_t *sconn, const char *table, where_builder *w
strbld_str(sb, "DELETE FROM `", 0); strbld_str(sb, "DELETE FROM `", 0);
strbld_str(sb, table, 0); strbld_str(sb, table, 0);
strbld_str(sb, "` WHERE ", 0); strbld_str(sb, "` WHERE ", 0);
compileWhereBuilder_sb(wb, sb); compileWhereBuilder_sb(wb, sb, 0);
if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) { if (strbld_finalize_or_destroy(&sb, &qry, &qry_len) != 0) {
return -1; return -1;
} }

View File

@@ -24,7 +24,7 @@ where_builder *createWhereBuilder(where_builder *initial_clause)
return wb; return wb;
} }
int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len) int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len, int free_wb)
{ {
struct str_builder_t *sb; struct str_builder_t *sb;
@@ -32,11 +32,11 @@ int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len)
return -1; return -1;
} }
compileWhereBuilder_sb(wb, sb); compileWhereBuilder_sb(wb, sb, free_wb);
return strbld_finalize_or_destroy(&sb, str, str_len); return strbld_finalize_or_destroy(&sb, str, str_len);
} }
void compileWhereBuilder_sb(where_builder *wb, str_builder *sb) void compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb)
{ {
switch(wb->logic_type) { switch(wb->logic_type) {
case CLAUSE: case CLAUSE:
@@ -55,6 +55,9 @@ void compileWhereBuilder_sb(where_builder *wb, str_builder *sb)
break; break;
} }
} }
if (free_wb) {
freeWhereBuilder(&wb);
}
} }
void freeWhereBuilder(where_builder **wb_ptr) void freeWhereBuilder(where_builder **wb_ptr)
{ {

View File

@@ -40,8 +40,8 @@ typedef struct where_builder_t where_builder;
where_builder *createWhereBuilder(where_builder *initial_clause); where_builder *createWhereBuilder(where_builder *initial_clause);
int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len); int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len, int free_wb);
void compileWhereBuilder_sb(where_builder *wb, str_builder *sb); void compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb);
void freeWhereBuilder(where_builder **wb_ptr); void freeWhereBuilder(where_builder **wb_ptr);

View File

@@ -52,7 +52,7 @@ void compileLogic_sb(where_logic *logic, str_builder *sb)
strbld_char(sb, '('); strbld_char(sb, '(');
for (size_t i = 0; i < logic->n_clauses; i++) { for (size_t i = 0; i < logic->n_clauses; i++) {
compileWhereBuilder_sb(logic->clauses[i], sb); compileWhereBuilder_sb(logic->clauses[i], sb, 0);
if (i < (logic->n_clauses - 1)) { if (i < (logic->n_clauses - 1)) {
if (logic->logic_type == OR) { if (logic->logic_type == OR) {
strbld_str(sb, " OR ", 4); strbld_str(sb, " OR ", 4);