Changeset: b8dae0073c58 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b8dae0073c58 Branch: literal_features Log Message:
Merge with default diffs (202 lines): diff --git a/documentation/index.rst b/documentation/index.rst --- a/documentation/index.rst +++ b/documentation/index.rst @@ -31,6 +31,7 @@ Welcome to MonetDB's documentation! source/cmake source/release source/developers_handbook + source/binary-resultset Indices and tables ================== diff --git a/monetdb5/mal/Tests/All b/monetdb5/mal/Tests/All --- a/monetdb5/mal/Tests/All +++ b/monetdb5/mal/Tests/All @@ -46,7 +46,7 @@ tst045 tst046 tst047 tst048 -tst049 +HAVE_LIBPCRE?tst049 tst050 tst051 tst052 diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c --- a/sql/server/rel_optimize_proj.c +++ b/sql/server/rel_optimize_proj.c @@ -3069,6 +3069,20 @@ rel_push_join_down_union(visitor *v, sql list *exps = rel->exps, *attr = rel->attr; sql_exp *je = NULL; + /* we would like to optimize in place reference rels which point + * to replica tables and let the replica optimizer handle those + * later. otherwise we miss the push join down optimization due + * to the rel_is_ref bailout + */ + if (rel_is_ref(l) && is_basetable(l->op) && l->l && isReplicaTable((sql_table*)l->l)) { + rel->l = rel_copy(v->sql, l, true); + rel_destroy(l); + } + if (rel_is_ref(r) && is_basetable(r->op) && r->l && isReplicaTable((sql_table*)r->l)) { + rel->r = rel_copy(v->sql, r, true); + rel_destroy(r); + } + if (!l || !r || need_distinct(l) || need_distinct(r) || rel_is_ref(l) || rel_is_ref(r)) return rel; if (l->op == op_project) diff --git a/sql/test/BugTracker-2008/Tests/All b/sql/test/BugTracker-2008/Tests/All --- a/sql/test/BugTracker-2008/Tests/All +++ b/sql/test/BugTracker-2008/Tests/All @@ -35,7 +35,7 @@ col_from_another_inside_function_body.SF is_distinct_broken.SF-2430201 blob_insert_crash.SF-2388542 subselect_with_or.SF-2466725 -OOM_query.SF-2457195 +HAVE_LIBPCRE?OOM_query.SF-2457195 copy-format.SF-2468513 copy-count.SF-2485215 About_CHAR.SF-2075268 diff --git a/sql/test/BugTracker-2013/Tests/All b/sql/test/BugTracker-2013/Tests/All --- a/sql/test/BugTracker-2013/Tests/All +++ b/sql/test/BugTracker-2013/Tests/All @@ -40,7 +40,7 @@ sort_void_crash.Bug-3341 bogus_aggregation_casts.Bug-3342 recursion # remind us that it should work nestedcalls -like_pcre_or.Bug-3348 +HAVE_LIBPCRE?like_pcre_or.Bug-3348 duplicate_column_name.Bug-3349 binary_copy_into.Bug-3345 copy-into-compressed.Bug-3351 diff --git a/sql/test/BugTracker-2019/Tests/All b/sql/test/BugTracker-2019/Tests/All --- a/sql/test/BugTracker-2019/Tests/All +++ b/sql/test/BugTracker-2019/Tests/All @@ -6,7 +6,7 @@ subselect-contradiction.Bug-6683 insert-replica-table.Bug-6684 subselect-count.Bug-6686 subselect.Bug-6688 -duplicates-not-eliminated-long-CASE-stmt.Bug-6697 +HAVE_LIBPCRE?duplicates-not-eliminated-long-CASE-stmt.Bug-6697 subselect.Bug-6700 alter_table_set_schema.Bug-6701 crash-in-rel_dependencies.Bug-6703 diff --git a/sql/test/Tests/All b/sql/test/Tests/All --- a/sql/test/Tests/All +++ b/sql/test/Tests/All @@ -55,7 +55,7 @@ joins default HAVE_GEOM?keys -like_tests +HAVE_LIBPCRE?like_tests more_like_tests news diff --git a/sql/test/VOC/Tests/All b/sql/test/VOC/Tests/All --- a/sql/test/VOC/Tests/All +++ b/sql/test/VOC/Tests/All @@ -1,8 +1,8 @@ VOCcreate_user USER=voc&PASSWD=voc?VOCschema USER=voc&PASSWD=voc?VOCinsert -USER=voc&PASSWD=voc?VOCquery -USER=voc&PASSWD=voc?VOCmanual_examples +USER=voc&PASSWD=voc&HAVE_LIBPCRE?VOCquery +USER=voc&PASSWD=voc&HAVE_LIBPCRE?VOCmanual_examples USER=voc&PASSWD=voc?VOCdrop VOCdrop_user median.Bug-3096 diff --git a/sql/test/rel-optimizers/Tests/join-merge-remote-replica.test b/sql/test/rel-optimizers/Tests/join-merge-remote-replica.test --- a/sql/test/rel-optimizers/Tests/join-merge-remote-replica.test +++ b/sql/test/rel-optimizers/Tests/join-merge-remote-replica.test @@ -5,7 +5,10 @@ statement ok insert into foo_p1 values (1, 'hello'), (2, 'world'), (3, '!!') statement ok -create remote table foo_p2 (n int, m text) on 'mapi:monetdb://localhost:50001/node2' +create remote table foo_p2 (n int, m text) on 'mapi:monetdb://localhost:50002/node2' + +statement ok +create remote table foo_p3 (n int, m text) on 'mapi:monetdb://localhost:50003/node3' statement ok create merge table foo_merge (n int, m text) @@ -16,25 +19,34 @@ alter table foo_merge add table foo_p1 statement ok alter table foo_merge add table foo_p2 +statement ok +alter table foo_merge add table foo_p3 + # create members_rpl with members LOCAL and members_rmt REMOTE statement ok -create table members (n int, m text) +create table members_n1 (n int, m text) statement ok -insert into members values (1, 'alice'), (2, 'bob') +insert into members_n1 values (1, 'alice'), (2, 'bob') statement ok -create remote table members_rmt (n int, m text) on 'mapi:monetdb://localhost:50001/node2' +create remote table members_n2 (n int, m text) on 'mapi:monetdb://localhost:50002/node2' + +statement ok +create remote table members_n3 (n int, m text) on 'mapi:monetdb://localhost:50003/node3' statement ok create replica table members_rpl (n int, m text) statement ok -alter table members_rpl add table members +alter table members_rpl add table members_n1 statement ok -alter table members_rpl add table members_rmt +alter table members_rpl add table members_n2 + +statement ok +alter table members_rpl add table members_n3 # this statement is so to have the UNIQUE property for the foo_p1 plan # of the merge. It is not there the first time we execute the plan so @@ -52,19 +64,29 @@ query T nosort plan select * from foo_merge, members_rpl ---- union ( -| project ( -| | crossproduct ( -| | | table("sys"."foo_p1") [ "foo_p1"."n" UNIQUE as "foo_merge"."n", "foo_p1"."m" as "foo_merge"."m" ], -| | | table("sys"."members") [ "members"."n" UNIQUE as "members_rpl"."n", "members"."m" UNIQUE as "members_rpl"."m", "members"."%TID%" NOT NULL UNIQUE as "members_rpl"."%TID%" ] -| | ) [ ] +| union ( +| | project ( +| | | crossproduct ( +| | | | table("sys"."foo_p1") [ "foo_p1"."n" UNIQUE as "foo_merge"."n", "foo_p1"."m" as "foo_merge"."m" ], +| | | | table("sys"."members_n1") [ "members_n1"."n" UNIQUE as "members_rpl"."n", "members_n1"."m" UNIQUE as "members_rpl"."m", "members_n1"."%TID%" NOT NULL UNIQUE as "members_rpl"."%TID%" ] +| | | ) [ ] +| | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ], +| | table ( +| | | project ( +| | | | crossproduct ( +| | | | | REMOTE("sys"."foo_p2") [ "foo_p2"."n" as "foo_merge"."n", "foo_p2"."m" as "foo_merge"."m" ], +| | | | | REMOTE("sys"."members_n2") [ "members_n2"."n" as "members_rpl"."n", "members_n2"."m" as "members_rpl"."m", "members_n2"."%TID%" NOT NULL UNIQUE as "members_rpl"."%TID%" ] +| | | | ) [ ] +| | | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ] REMOTE mapi:monetdb://localhost:50002/node2 +| | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ] | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ], | table ( | | project ( | | | crossproduct ( -| | | | REMOTE("sys"."foo_p2") [ "foo_p2"."n" as "foo_merge"."n", "foo_p2"."m" as "foo_merge"."m" ], -| | | | REMOTE("sys"."members_rmt") [ "members_rmt"."n" as "members_rpl"."n", "members_rmt"."m" as "members_rpl"."m", "members_rmt"."%TID%" NOT NULL UNIQUE as "members_rpl"."%TID%" ] +| | | | REMOTE("sys"."foo_p3") [ "foo_p3"."n" as "foo_merge"."n", "foo_p3"."m" as "foo_merge"."m" ], +| | | | REMOTE("sys"."members_n3") [ "members_n3"."n" as "members_rpl"."n", "members_n3"."m" as "members_rpl"."m", "members_n3"."%TID%" NOT NULL UNIQUE as "members_rpl"."%TID%" ] | | | ) [ ] -| | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ] REMOTE mapi:monetdb://localhost:50001/node2 +| | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ] REMOTE mapi:monetdb://localhost:50003/node3 | ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ] ) [ "foo_merge"."n", "foo_merge"."m", "members_rpl"."n", "members_rpl"."m" ] _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org