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 2018/05/04 19:02:06 UTC

incubator-quickstep git commit: Fixed the bug regarding EliminateEmptyNode and InsertSelection.

Repository: incubator-quickstep
Updated Branches:
  refs/heads/master 876f12ba5 -> 77287a788


Fixed the bug regarding EliminateEmptyNode and InsertSelection.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/77287a78
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/77287a78
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/77287a78

Branch: refs/heads/master
Commit: 77287a78890284139273dd5344e7d9b141f7ee25
Parents: 876f12b
Author: Zuyu Zhang <zu...@cs.wisc.edu>
Authored: Fri May 4 13:04:02 2018 -0500
Committer: Zuyu Zhang <zu...@cs.wisc.edu>
Committed: Fri May 4 13:04:02 2018 -0500

----------------------------------------------------------------------
 cli/tests/command_executor/Analyze.test      |  4 ++++
 query_optimizer/rules/EliminateEmptyNode.cpp | 19 ++++++++++++++-----
 2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/77287a78/cli/tests/command_executor/Analyze.test
----------------------------------------------------------------------
diff --git a/cli/tests/command_executor/Analyze.test b/cli/tests/command_executor/Analyze.test
index b0bf090..ff20d9e 100644
--- a/cli/tests/command_executor/Analyze.test
+++ b/cli/tests/command_executor/Analyze.test
@@ -61,11 +61,15 @@ SELECT MIN(src) FROM r;
 +-----------+
 ==
 
+INSERT INTO r SELECT * FROM s;
 SELECT r.src, r.dst FROM r;
+DELETE FROM r;
 --
 +-----------+-----------+
 |src        |dst        |
 +-----------+-----------+
+|          0|          0|
+|          1|          5|
 +-----------+-----------+
 ==
 

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/77287a78/query_optimizer/rules/EliminateEmptyNode.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/EliminateEmptyNode.cpp b/query_optimizer/rules/EliminateEmptyNode.cpp
index 03e6f33..c025ebf 100644
--- a/query_optimizer/rules/EliminateEmptyNode.cpp
+++ b/query_optimizer/rules/EliminateEmptyNode.cpp
@@ -208,12 +208,21 @@ P::PhysicalPtr Apply(const P::PhysicalPtr &node) {
   for (const auto &child : new_node->children()) {
     const auto new_child = Apply(child);
     if (new_child == nullptr) {
-      if (P::SomeUnionAll::Matches(node)) {
-        has_changed_children = true;
-        continue;
+      switch (node->getPhysicalType()) {
+        case P::PhysicalType::kUnionAll:
+          has_changed_children = true;
+          break;
+        case P::PhysicalType::kInsertSelection:
+          if (!new_children.empty()) {
+            // The actual input is empty.
+            return nullptr;
+          }
+          new_children.push_back(child);
+          break;
+        default:
+          return nullptr;
       }
-
-      return nullptr;
+      continue;
     } else if (child != new_child && !has_changed_children) {
       has_changed_children = true;
     }