From b62a3f0c99e91d31b92a24e26dfd182101c67ee1 Mon Sep 17 00:00:00 2001 From: avsdev-cw Date: Wed, 7 Oct 2020 12:40:04 +0100 Subject: [PATCH] Flag to free the where builder when compiling --- src/db_query.c | 6 ++---- src/db_where-builder.c | 9 ++++++--- src/db_where-builder.h | 4 ++-- src/db_where-builder_p.c | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/db_query.c b/src/db_query.c index 919913d..b7b2f32 100644 --- a/src/db_query.c +++ b/src/db_query.c @@ -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, table, 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) { - freeWhereBuilder(&wb); return -1; } - freeWhereBuilder(&wb); qry_ret = scalarInt(sconn, qry, qry_len, 0); 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, table, 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) { return -1; } diff --git a/src/db_where-builder.c b/src/db_where-builder.c index 85754bd..822ad83 100644 --- a/src/db_where-builder.c +++ b/src/db_where-builder.c @@ -24,7 +24,7 @@ where_builder *createWhereBuilder(where_builder *initial_clause) 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; @@ -32,11 +32,11 @@ int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len) return -1; } - compileWhereBuilder_sb(wb, sb); + compileWhereBuilder_sb(wb, sb, free_wb); 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) { case CLAUSE: @@ -55,6 +55,9 @@ void compileWhereBuilder_sb(where_builder *wb, str_builder *sb) break; } } + if (free_wb) { + freeWhereBuilder(&wb); + } } void freeWhereBuilder(where_builder **wb_ptr) { diff --git a/src/db_where-builder.h b/src/db_where-builder.h index 4d18dec..ee85a0c 100644 --- a/src/db_where-builder.h +++ b/src/db_where-builder.h @@ -40,8 +40,8 @@ typedef struct where_builder_t where_builder; where_builder *createWhereBuilder(where_builder *initial_clause); -int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len); -void compileWhereBuilder_sb(where_builder *wb, str_builder *sb); +int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len, int free_wb); +void compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb); void freeWhereBuilder(where_builder **wb_ptr); diff --git a/src/db_where-builder_p.c b/src/db_where-builder_p.c index caff4a4..1f683fc 100644 --- a/src/db_where-builder_p.c +++ b/src/db_where-builder_p.c @@ -52,7 +52,7 @@ void compileLogic_sb(where_logic *logic, str_builder *sb) strbld_char(sb, '('); 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 (logic->logic_type == OR) { strbld_str(sb, " OR ", 4);