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 -- [email protected]
To unsubscribe send an email to [email protected]