Changeset: 90181b320f0a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=90181b320f0a
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_gencode.c
sql/server/rel_select.c
Branch: arrays
Log Message:
handling queries with tunion (e.g. select * from a where v=0 OR v=2)
diffs (72 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -58,6 +58,7 @@ static stmt* find_e_column_uselect(sql_a
switch(joins->type) {
case st_mbrselect:
return find_e_column_uselect(sa, joins->op3, col);
+ case st_tunion:
case st_uselect:
//only the cells that qualify for the uselect shoudl
have values
// if(joins->op1->type == st_bat) {
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -755,7 +755,7 @@ pushSchema(MalBlkPtr mb, InstrPtr q, sql
static int find_uselect(stmt *s){
if(!s)
return -1;
- if(s->type == st_uselect)
+ if(s->type == st_uselect || s->type == st_tunion)
return s->nr;
return find_uselect(s->op3);
}
@@ -1217,7 +1217,7 @@ static int
q = newStmt2(mb, "algebra", "mbrsubselect");
q = pushArgument(mb, q, l);
- if(s->op3->type == st_uselect)
+ if(s->op3->type == st_uselect || s->op3->type ==
st_tunion)
q = pushArgument(mb, q, sub);
else {
int cand = find_uselect(s->op3);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -5331,6 +5331,14 @@ rel_remove_internal_exp(sql_rel *rel)
}
}
+static bool isColumn(sql_exp* exp) {
+ if(exp->type == e_cmp && ((sql_exp*)exp->l)->type == e_column)
+ return true;
+ if(exp->f)
+ return isColumn(exp->f);
+ return false;
+}
+
static sql_rel *
rel_select_exp(mvc *sql, sql_rel *rel, SelectNode *sn, exp_kind ek)
{
@@ -5362,9 +5370,9 @@ rel_select_exp(mvc *sql, sql_rel *rel, S
list *newFilters = new_exp_list(sql->sa);
for(whereExpNode=r->exps->h; whereExpNode;
whereExpNode=whereExpNode->next) {
sql_exp *whereExp = whereExpNode->data;
- if(whereExp->type == e_cmp) {
- sql_exp *innerExp = whereExp->l;
- if(innerExp->type == e_column) {
+ if(isColumn(whereExp)) {
+// sql_exp *innerExp = whereExp->l;
+// if(innerExp->type == e_column) {
if(!newFilters->cnt) {
//found a
filter on a non-dimensinal column
/*Assuming a
single array add all dimensions of it to the filtering condition*/
@@ -5376,7 +5384,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, S
}
}
}
- }
+// }
} else {
fprintf(stderr, "Unrecognised
exp->type\n");
return NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list