Changeset: f7294db4bd93 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7294db4bd93
Modified Files:
monetdb5/modules/atoms/nested_table.c
monetdb5/modules/atoms/nested_table.mal
sql/server/rel_dump.c
sql/server/rel_optimizer.c
Branch: graph0
Log Message:
QRW: push down of selects over the UNNEST operator
diffs (82 lines):
diff --git a/monetdb5/modules/atoms/nested_table.c
b/monetdb5/modules/atoms/nested_table.c
--- a/monetdb5/modules/atoms/nested_table.c
+++ b/monetdb5/modules/atoms/nested_table.c
@@ -29,6 +29,7 @@
mal_export str NESTEDTABLEnest1_oid(bat*, const bat*, const bat*);
mal_export str NESTEDTABLEunnest101_oid(bat*, bat*, const bat*);
mal_export void NESTEDTABLEheap(Heap*, size_t);
+mal_export void* NESTEDTABLEnull(void);
mal_export var_t NESTEDTABLEput(Heap *h, var_t *bun, nested_table *val);
mal_export str NESTEDTABLEprelude(void*);
@@ -40,6 +41,12 @@ void NESTEDTABLEheap(Heap* heap, size_t
HEAP_initialize(heap, 0, 0, sizeof(oid));
}
+// make GDK happy
+static oid nil_instance = -1;
+void* NESTEDTABLEnull(void){
+ return &nil_instance;
+}
+
// initializer
str NESTEDTABLEprelude(void* ret) {
(void) ret;
diff --git a/monetdb5/modules/atoms/nested_table.mal
b/monetdb5/modules/atoms/nested_table.mal
--- a/monetdb5/modules/atoms/nested_table.mal
+++ b/monetdb5/modules/atoms/nested_table.mal
@@ -9,6 +9,7 @@ module nestedtable;
atom nestedtable;
command heap() address NESTEDTABLEheap;
+command null() address NESTEDTABLEnull;
command prelude() address NESTEDTABLEprelude;
command put() address NESTEDTABLEput;
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -487,12 +487,11 @@ rel_print_(mvc *sql, stream *fout, sql_
mnstr_printf(fout, "& REF %d ", nr);
} else
rel_print_(sql, fout, rel->l, depth+1, refs, decorate);
- mnstr_printf(fout, ",");
+ print_indent(sql, fout, depth, decorate);
+ mnstr_printf(fout, ")");
// rhs
exps_print(sql, fout, rel->exps, depth, 1, 0);
-
- mnstr_printf(fout, ")");
break;
}
case op_insert:
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -3888,10 +3888,10 @@ rel_push_select_down(int *changes, mvc *
return rel_merge_projects(changes, sql, rel);
/* push select through join */
- if (is_select(rel->op) && r && (is_join(r->op) || is_apply(r->op)) &&
!(rel_is_ref(r))) {
+ if (is_select(rel->op) && r && (is_join(r->op) || is_apply(r->op) ||
is_unnest(r->op)) && !(rel_is_ref(r))) {
sql_rel *jl = r->l;
sql_rel *jr = r->r;
- int left = r->op == op_join || r->op == op_left;
+ int left = r->op == op_join || r->op == op_left || r->op ==
op_unnest;
int right = r->op == op_join || r->op == op_right;
if (is_apply(r->op)) {
@@ -3904,10 +3904,10 @@ rel_push_select_down(int *changes, mvc *
/* introduce selects under the join (if needed) */
set_processed(jl);
- set_processed(jr);
+ if(jr) set_processed(jr);
if (!is_select(jl->op))
r->l = jl = rel_select(sql->sa, jl, NULL);
- if (!is_select(jr->op))
+ if (jr && !is_select(jr->op))
r->r = jr = rel_select(sql->sa, jr, NULL);
rel->exps = new_exp_list(sql->sa);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list