From c888e48b2b95447c63d8961fb4007b49cfddd48b Mon Sep 17 00:00:00 2001 From: alexhudson Date: Thu, 24 Jun 2010 12:58:43 +0000 Subject: [PATCH] Correctly find indexes for properties we're searching for in query builder. --- src/agents/store/query-builder.c | 43 ++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/agents/store/query-builder.c b/src/agents/store/query-builder.c index 3947d92..3e1809e 100644 --- a/src/agents/store/query-builder.c +++ b/src/agents/store/query-builder.c @@ -8,6 +8,7 @@ #include #include +#include #include "query-builder.h" #include "query-parser.h" #include "properties.h" @@ -444,11 +445,22 @@ QueryExpressionToSQL(QueryBuilder *builder, struct expression *exp, BongoStringB BongoStringBuilderAppend(sb, "("); if (exp->exp1_const) { if (QueryParser_IsProperty((char *)exp->exp1) == 0) { - StorePropInfo prop; - prop.type = 0; - prop.name = (char *)exp->exp1; - StorePropertyFixup(&prop); - QueryBuilderPropertyToColumn(builder, sb, &prop); + StorePropInfo *prop = NULL; + + // FIXME: this is a slow way of finding our + // property again. + for (i=0; i < builder->properties->len; i++) { + StorePropInfo *p = g_array_index(builder->properties, StorePropInfo *, i); + + if (strcmp(p->name, (char *)exp->exp1) == 0) prop = p; + } + + if (prop == NULL) { + Log(LOG_CRIT, "BUG: Unable to find property '%s'", (char *)exp->exp1); + return -1; + } + + QueryBuilderPropertyToColumn(builder, sb, prop); } else { BongoStringBuilderAppend(sb, (char *)exp->exp1); } @@ -480,11 +492,22 @@ QueryExpressionToSQL(QueryBuilder *builder, struct expression *exp, BongoStringB } if (exp->exp2_const) { if (QueryParser_IsProperty((char *)exp->exp2) == 0) { - StorePropInfo prop; - prop.type = 0; - prop.name = (char *)exp->exp2; - StorePropertyFixup(&prop); - QueryBuilderPropertyToColumn(builder, sb, &prop); + StorePropInfo *prop = NULL; + + // FIXME: this is a slow way of finding our + // property again. + for (i=0; i < builder->properties->len; i++) { + StorePropInfo *p = g_array_index(builder->properties, StorePropInfo *, i); + + if (strcmp(p->name, (char *)exp->exp2) == 0) prop = p; + } + + if (prop == NULL) { + Log(LOG_CRIT, "BUG: Unable to find property '%s'", (char *)exp->exp2); + return -1; + } + + QueryBuilderPropertyToColumn(builder, sb, prop); } else { BongoStringBuilderAppend(sb, (char *)exp->exp2); }