You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by ji...@apache.org on 2017/04/09 01:48:44 UTC

[04/14] incubator-quickstep git commit: Implement parser and resolver for UNION and INTERSECT.

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/5b7b5cb8/parser/tests/SetOperation.test
----------------------------------------------------------------------
diff --git a/parser/tests/SetOperation.test b/parser/tests/SetOperation.test
new file mode 100644
index 0000000..e86cb2f
--- /dev/null
+++ b/parser/tests/SetOperation.test
@@ -0,0 +1,235 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+SELECT * FROM a
+UNION ALL
+SELECT * FROM b;
+--
+SetOperationStatement
++-set_operation_query=SetOperation[set_operation_type=UnionAll]
+  +-children=
+    +-SetOperation[set_operation_type=Select]
+    | +-children=
+    |   +-Select
+    |     +-select_clause=SelectStar
+    |     +-from_clause=
+    |       +-TableReference[table=a]
+    +-SetOperation[set_operation_type=Select]
+      +-children=
+        +-Select
+          +-select_clause=SelectStar
+          +-from_clause=
+            +-TableReference[table=b]
+==
+
+# Currently does not support INTERSECT ALL.
+SELECT * FROM a
+INTERSECT ALL
+SELECT * FROM b;
+--
+ERROR: syntax error (2 : 11)
+INTERSECT ALL
+          ^
+==
+
+SELECT * FROM a
+UNION
+SELECT * FROM b
+UNION
+SELECT * FROM c;
+--
+SetOperationStatement
++-set_operation_query=SetOperation[set_operation_type=Union]
+  +-children=
+    +-SetOperation[set_operation_type=Union]
+    | +-children=
+    |   +-SetOperation[set_operation_type=Select]
+    |   | +-children=
+    |   |   +-Select
+    |   |     +-select_clause=SelectStar
+    |   |     +-from_clause=
+    |   |       +-TableReference[table=a]
+    |   +-SetOperation[set_operation_type=Select]
+    |     +-children=
+    |       +-Select
+    |         +-select_clause=SelectStar
+    |         +-from_clause=
+    |           +-TableReference[table=b]
+    +-SetOperation[set_operation_type=Select]
+      +-children=
+        +-Select
+          +-select_clause=SelectStar
+          +-from_clause=
+            +-TableReference[table=c]
+==
+
+SELECT * FROM a
+INTERSECT
+SELECT * FROM b
+UNION
+SELECT * FROM c
+INTERSECT
+SELECT * FROM d;
+--
+SetOperationStatement
++-set_operation_query=SetOperation[set_operation_type=Union]
+  +-children=
+    +-SetOperation[set_operation_type=Intersect]
+    | +-children=
+    |   +-SetOperation[set_operation_type=Select]
+    |   | +-children=
+    |   |   +-Select
+    |   |     +-select_clause=SelectStar
+    |   |     +-from_clause=
+    |   |       +-TableReference[table=a]
+    |   +-SetOperation[set_operation_type=Select]
+    |     +-children=
+    |       +-Select
+    |         +-select_clause=SelectStar
+    |         +-from_clause=
+    |           +-TableReference[table=b]
+    +-SetOperation[set_operation_type=Intersect]
+      +-children=
+        +-SetOperation[set_operation_type=Select]
+        | +-children=
+        |   +-Select
+        |     +-select_clause=SelectStar
+        |     +-from_clause=
+        |       +-TableReference[table=c]
+        +-SetOperation[set_operation_type=Select]
+          +-children=
+            +-Select
+              +-select_clause=SelectStar
+              +-from_clause=
+                +-TableReference[table=d]
+==
+
+# Currently does not support using bracket to change order,
+# Instead, use a subquery to change order of set operations.
+SELECT * FROM a
+INTERSECT
+(SELECT * FROM a
+UNION
+SELECT * FROM b);
+--
+ERROR: syntax error (3 : 1)
+(SELECT * FROM a
+^
+==
+
+SELECT * FROM a
+INTERSECT
+SELECT * FROM
+    (SELECT * FROM a
+     UNION
+     SELECT * FROM b
+    ) AS temp;
+--
+SetOperationStatement
++-set_operation_query=SetOperation[set_operation_type=Intersect]
+  +-children=
+    +-SetOperation[set_operation_type=Select]
+    | +-children=
+    |   +-Select
+    |     +-select_clause=SelectStar
+    |     +-from_clause=
+    |       +-TableReference[table=a]
+    +-SetOperation[set_operation_type=Select]
+      +-children=
+        +-Select
+          +-select_clause=SelectStar
+          +-from_clause=
+            +-SubqueryTable
+              +-table_signature=TableSignature[table_alias=temp]
+              +-SubqueryExpression
+                +-SetOperation[set_operation_type=Union]
+                  +-children=
+                    +-SetOperation[set_operation_type=Select]
+                    | +-children=
+                    |   +-Select
+                    |     +-select_clause=SelectStar
+                    |     +-from_clause=
+                    |       +-TableReference[table=a]
+                    +-SetOperation[set_operation_type=Select]
+                      +-children=
+                        +-Select
+                          +-select_clause=SelectStar
+                          +-from_clause=
+                            +-TableReference[table=b]
+==
+
+SELECT * FROM
+	(SELECT * FROM a
+	UNION ALL
+	SELECT * FROM b
+	) AS temp1
+INTERSECT
+SELECT * FROM
+	(SELECT * FROM a
+	UNION
+	SELECT * FROM b
+	) AS temp2;
+--
+SetOperationStatement
++-set_operation_query=SetOperation[set_operation_type=Intersect]
+  +-children=
+    +-SetOperation[set_operation_type=Select]
+    | +-children=
+    |   +-Select
+    |     +-select_clause=SelectStar
+    |     +-from_clause=
+    |       +-SubqueryTable
+    |         +-table_signature=TableSignature[table_alias=temp1]
+    |         +-SubqueryExpression
+    |           +-SetOperation[set_operation_type=UnionAll]
+    |             +-children=
+    |               +-SetOperation[set_operation_type=Select]
+    |               | +-children=
+    |               |   +-Select
+    |               |     +-select_clause=SelectStar
+    |               |     +-from_clause=
+    |               |       +-TableReference[table=a]
+    |               +-SetOperation[set_operation_type=Select]
+    |                 +-children=
+    |                   +-Select
+    |                     +-select_clause=SelectStar
+    |                     +-from_clause=
+    |                       +-TableReference[table=b]
+    +-SetOperation[set_operation_type=Select]
+      +-children=
+        +-Select
+          +-select_clause=SelectStar
+          +-from_clause=
+            +-SubqueryTable
+              +-table_signature=TableSignature[table_alias=temp2]
+              +-SubqueryExpression
+                +-SetOperation[set_operation_type=Union]
+                  +-children=
+                    +-SetOperation[set_operation_type=Select]
+                    | +-children=
+                    |   +-Select
+                    |     +-select_clause=SelectStar
+                    |     +-from_clause=
+                    |       +-TableReference[table=a]
+                    +-SetOperation[set_operation_type=Select]
+                      +-children=
+                        +-Select
+                          +-select_clause=SelectStar
+                          +-from_clause=
+                            +-TableReference[table=b]
+==
+