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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list