Flipped params of wherebuilder (breaking commit)

This commit is contained in:
2020-10-08 16:06:11 +01:00
parent ae61432beb
commit f3a15fddc8
6 changed files with 44 additions and 18 deletions

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 free_wb) int compileWhereBuilder(char **str, size_t *str_len, where_builder *wb, int free_wb)
{ {
struct str_builder_t *sb; struct str_builder_t *sb;
@@ -32,14 +32,21 @@ int compileWhereBuilder(where_builder *wb, char **str, size_t *str_len, int free
return -1; return -1;
} }
compileWhereBuilder_sb(wb, sb, free_wb); compileWhereBuilder_sb(sb, wb, 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, int free_wb) void compileWhereBuilder_sb(str_builder *sb, where_builder *wb, int free_wb)
{ {
wb = finalizeWhere(wb);
strbld_str(sb, " WHERE ", 7); strbld_str(sb, " WHERE ", 7);
do_compileWhereBuilder_sb(wb, sb, free_wb); do_compileWhereBuilder_sb(sb, wb);
if (strbld_len(sb) == 7) {
strbld_seek(sb, 0, 1);
}
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 free_wb); int compileWhereBuilder(char **str, size_t *str_len, where_builder *wb, int free_wb);
void compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb); void compileWhereBuilder_sb(str_builder *sb, where_builder *wb, int free_wb);
void freeWhereBuilder(where_builder **wb_ptr); void freeWhereBuilder(where_builder **wb_ptr);

View File

@@ -4,18 +4,18 @@
#include "db_where-builder_p.h" #include "db_where-builder_p.h"
void do_compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb) void do_compileWhereBuilder_sb(str_builder *sb, where_builder *wb)
{ {
switch(wb->logic_type) { switch(wb->logic_type) {
case CLAUSE: case CLAUSE:
{ {
compileWhere_sb((where_clause *)wb, sb); compileWhere_sb(sb, (where_clause *)wb);
break; break;
} }
case OR: case OR:
case AND: case AND:
{ {
compileLogic_sb((where_logic *)wb, sb); compileLogic_sb(sb, (where_logic *)wb);
break; break;
} }
default: default:
@@ -23,9 +23,6 @@ void do_compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb)
break; break;
} }
} }
if (free_wb) {
freeWhereBuilder(&wb);
}
} }
where_logic *createLogic(e_where_logic type, size_t initial_size) where_logic *createLogic(e_where_logic type, size_t initial_size)
@@ -55,7 +52,7 @@ where_logic *createLogic(e_where_logic type, size_t initial_size)
return logic; return logic;
} }
void compileLogic_sb(where_logic *logic, str_builder *sb) void compileLogic_sb(str_builder *sb, where_logic *logic)
{ {
if (logic->n_clauses == 0) { if (logic->n_clauses == 0) {
return; return;
@@ -63,7 +60,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++) {
do_compileWhereBuilder_sb(logic->clauses[i], sb, 0); do_compileWhereBuilder_sb(sb, logic->clauses[i]);
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);
@@ -165,7 +162,7 @@ where_clause *createWhere(const char *tbl, const char *col, e_where_op op)
return clause; return clause;
} }
void compileWhere_sb(where_clause *clause, str_builder *sb) void compileWhere_sb(str_builder *sb, where_clause *clause)
{ {
size_t idx; size_t idx;

View File

@@ -50,12 +50,12 @@ struct where_clause_t {
typedef struct where_clause_t where_clause; typedef struct where_clause_t where_clause;
DLL_LOCAL DLL_LOCAL
void do_compileWhereBuilder_sb(where_builder *wb, str_builder *sb, int free_wb); void do_compileWhereBuilder_sb(str_builder *sb, where_builder *wb);
DLL_LOCAL DLL_LOCAL
where_logic *createLogic(e_where_logic type, size_t initial_size); where_logic *createLogic(e_where_logic type, size_t initial_size);
DLL_LOCAL DLL_LOCAL
void compileLogic_sb(where_logic *logic, str_builder *sb); void compileLogic_sb(str_builder *sb, where_logic *logic);
DLL_LOCAL DLL_LOCAL
void freeLogic(where_logic **logic_ptr); void freeLogic(where_logic **logic_ptr);
@@ -65,7 +65,7 @@ where_builder *appendLogicClause(where_builder *wb, where_builder *wb_clause);
DLL_LOCAL DLL_LOCAL
where_clause *createWhere(const char *tbl, const char *col, e_where_op op); where_clause *createWhere(const char *tbl, const char *col, e_where_op op);
DLL_LOCAL DLL_LOCAL
void compileWhere_sb(where_clause *clause, str_builder *sb); void compileWhere_sb(str_builder *sb, where_clause *clause);
DLL_LOCAL DLL_LOCAL
void freeWhere(where_clause **where_ptr); void freeWhere(where_clause **where_ptr);

View File

@@ -184,6 +184,25 @@ int strbld_ensure_len(str_builder *sb, size_t len, int absolute)
return 1; return 1;
} }
int strbld_seek(str_builder *sb, size_t to, int zero)
{
if (to > sb->alloc) {
return 0;
}
if (zero && to < sb->len) {
memset(sb->str + to, 0, sb->len - to);
}
sb->len = to;
return 1;
}
size_t strbld_len(str_builder *sb)
{
return sb->len;
}
int strbld_str(str_builder *sb, const char *str, size_t len) int strbld_str(str_builder *sb, const char *str, size_t len)
{ {
if (sb->fails > 0) { if (sb->fails > 0) {

View File

@@ -26,6 +26,9 @@ int strbld_finalize_or_destroy(str_builder **sb, char **str, size_t *len);
int strbld_ensure_len(str_builder *sb, size_t len, int absolute); int strbld_ensure_len(str_builder *sb, size_t len, int absolute);
int strbld_seek(str_builder *sb, size_t to, int zero);
size_t strbld_len(str_builder *sb);
int strbld_str(str_builder *sb, const char *str, size_t len); int strbld_str(str_builder *sb, const char *str, size_t len);
int strbld_char(str_builder *sb, const char c); int strbld_char(str_builder *sb, const char c);