Changeset: 37a2b64c0c90 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/37a2b64c0c90
Added Files:
        sql/test/rel-optimizers/Tests/select-cse-merge-ors-base.test
        sql/test/rel-optimizers/Tests/select-cse-merge-ors.reqtests
        sql/test/rel-optimizers/Tests/select-cse-merge-ors.test
Modified Files:
        sql/test/rel-optimizers/Tests/All
Branch: cmp-or-patterns
Log Message:

Adds tests for merge_ors optimizer


diffs (195 lines):

diff --git a/sql/test/rel-optimizers/Tests/All 
b/sql/test/rel-optimizers/Tests/All
--- a/sql/test/rel-optimizers/Tests/All
+++ b/sql/test/rel-optimizers/Tests/All
@@ -12,3 +12,5 @@ remote-replica-plan
 remote-replica
 merge-unions-base
 merge-unions
+select-cse-merge-ors-base
+select-cse-merge-ors
diff --git a/sql/test/rel-optimizers/Tests/select-cse-merge-ors-base.test 
b/sql/test/rel-optimizers/Tests/select-cse-merge-ors-base.test
new file mode 100644
--- /dev/null
+++ b/sql/test/rel-optimizers/Tests/select-cse-merge-ors-base.test
@@ -0,0 +1,6 @@
+statement ok
+create table f (n int, m int)
+
+statement ok
+insert into f values (1, 20), (2, 40), (2, 0), (3, 60), (9, 180)
+
diff --git a/sql/test/rel-optimizers/Tests/select-cse-merge-ors.reqtests 
b/sql/test/rel-optimizers/Tests/select-cse-merge-ors.reqtests
new file mode 100644
--- /dev/null
+++ b/sql/test/rel-optimizers/Tests/select-cse-merge-ors.reqtests
@@ -0,0 +1,1 @@
+select-cse-merge-ors-base
diff --git a/sql/test/rel-optimizers/Tests/select-cse-merge-ors.test 
b/sql/test/rel-optimizers/Tests/select-cse-merge-ors.test
new file mode 100644
--- /dev/null
+++ b/sql/test/rel-optimizers/Tests/select-cse-merge-ors.test
@@ -0,0 +1,164 @@
+query T nosort
+plan select * from f 
+where n = 1 
+   or n = 2 
+   or n = 3
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ ("f"."n") in (int(4) "1", int(4) "2", int(4) "3") ]
+) [ "f"."n", "f"."m" ]
+
+query II rowsort
+select * from f 
+where n = 1
+   or n = 2
+   or m = 40;
+----
+1
+20
+2
+0
+2
+40
+
+query II rowsort
+select * from f 
+where n = 1 
+   or m = 40
+   or n = 2;
+----
+1
+20
+2
+0
+2
+40
+
+query II rowsort
+select * from f 
+where m = 40
+   or n = 1
+   or n = 2;
+----
+1
+20
+2
+0
+2
+40
+
+## chained where-in for n  
+
+query T nosort
+plan select * from f 
+where n in (1, 2) 
+   or n in (3)
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ ("f"."n") in (int(4) "3", int(4) "1", int(4) "2") ]
+) [ "f"."n", "f"."m" ]
+
+query T nosort
+plan select * from f 
+where m = 60
+   or n in (1, 2) 
+   or n in (3)
+----
+KNOWN
+
+query T nosort
+plan select * from f 
+where n in (1, 2)
+   or m = 60
+   or n in (3)
+----
+KNOWN
+
+query T nosort
+plan select * from f 
+where n in (1, 2)
+   or n in (3)
+   or m = 60
+----
+KNOWN
+
+## chained cmp_equal-atom ors with lhs in [n, m]
+
+query T nosort
+plan select * from f 
+where n = 1
+   or n = 2
+   or m = 60;
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ (("f"."m") = (int(8) "60")) or (("f"."n") in (int(4) "1", int(4) "2")) ]
+) [ "f"."n", "f"."m" ]
+
+query T nosort
+plan select * from f 
+where n = 1 
+   or m = 60
+   or n = 2;
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ (("f"."m") = (int(8) "60")) or (("f"."n") in (int(4) "1", int(4) "2")) ]
+) [ "f"."n", "f"."m" ]
+
+query T nosort
+plan select * from f 
+where m = 60 
+   or n = 1
+   or n = 2;
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ (("f"."m") = (int(8) "60")) or (("f"."n") in (int(4) "1", int(4) "2")) ]
+) [ "f"."n", "f"."m" ]
+
+## chained ors with lhs in [n, (n && m)]
+
+query T nosort
+plan select * from f 
+where (n = 3 and m = 60) 
+   or n = 1
+   or n = 2;
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ (("f"."n") in (int(4) "1", int(4) "2")) or (("f"."n") = (int(4) "3"), 
("f"."m") = (int(8) "60")), ("f"."n") in (int(4) "3", int(4) "1", int(4) "2") ]
+) [ "f"."n", "f"."m" ]
+
+query T nosort
+plan select * from f 
+where n = 1
+   or (n = 3 and m = 60)
+   or n = 2;
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ (("f"."n") in (int(4) "1", int(4) "2")) or (("f"."n") = (int(4) "3"), 
("f"."m") = (int(8) "60")), ("f"."n") in (int(4) "3", int(4) "1", int(4) "2") ]
+) [ "f"."n", "f"."m" ]
+
+query T nosort
+plan select * from f 
+where n = 1
+   or n = 2
+   or (n = 3 and m = 60)
+----
+project (
+| select (
+| | table("sys"."f") [ "f"."n", "f"."m" ]
+| ) [ (("f"."n") in (int(4) "1", int(4) "2")) or (("f"."n") = (int(4) "3"), 
("f"."m") = (int(8) "60")), ("f"."n") in (int(4) "3", int(4) "1", int(4) "2") ]
+) [ "f"."n", "f"."m" ]
+
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to