Flag to free the where builder when compiling
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user