You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2017/01/28 16:56:39 UTC
[4/4] calcite git commit: [CALCITE-1610] RelBuilder sort-combining
optimization treats aliases incorrectly (Jess Balint)
[CALCITE-1610] RelBuilder sort-combining optimization treats aliases incorrectly (Jess Balint)
Close apache/calcite#367
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/beb46533
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/beb46533
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/beb46533
Branch: refs/heads/master
Commit: beb465334c1bdc62b8282492ad7580c0683cee01
Parents: 3f955ee
Author: Jess Balint <jb...@gmail.com>
Authored: Fri Jan 27 16:04:40 2017 -0600
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri Jan 27 23:56:55 2017 -0800
----------------------------------------------------------------------
.../org/apache/calcite/tools/RelBuilder.java | 9 ++++---
.../org/apache/calcite/test/RelBuilderTest.java | 26 ++++++++++++++++++++
2 files changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/beb46533/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index 2b3a545..6993cbe 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -1541,12 +1541,13 @@ public class RelBuilder {
if (project.getInput() instanceof Sort) {
final Sort sort2 = (Sort) project.getInput();
if (sort2.offset == null && sort2.fetch == null) {
- replaceTop(sort2.getInput());
final RelNode sort =
- sortFactory.createSort(peek(), sort2.collation,
+ sortFactory.createSort(sort2.getInput(), sort2.collation,
offsetNode, fetchNode);
- replaceTop(sort);
- project(project.getProjects());
+ replaceTop(
+ projectFactory.createProject(sort,
+ project.getProjects(),
+ Pair.right(project.getNamedProjects())));
return this;
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/beb46533/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
index cabbcdc..61d5235 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -1518,6 +1518,32 @@ public class RelBuilderTest {
assertThat(str(root), is(expected));
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-1610">[CALCITE-1610]
+ * RelBuilder sort-combining optimization treats aliases incorrectly</a>. */
+ @Test public void testSortOverProjectSort() {
+ final RelBuilder builder = RelBuilder.create(config().build());
+ builder.scan("EMP")
+ .sort(0)
+ .project(builder.field(1))
+ // was throwing exception here when attempting to apply to
+ // inner sort node
+ .limit(0, 1)
+ .build();
+ RelNode r = builder.scan("EMP")
+ .sort(0)
+ .project(Lists.newArrayList(builder.field(1)),
+ Lists.newArrayList("F1"))
+ .limit(0, 1)
+ // make sure we can still access the field by alias
+ .project(builder.field("F1"))
+ .build();
+ String expected = "LogicalProject(F1=[$1])\n"
+ + " LogicalSort(sort0=[$0], dir0=[ASC], fetch=[1])\n"
+ + " LogicalTableScan(table=[[scott, EMP]])\n";
+ assertThat(str(r), is(expected));
+ }
+
/** Tests that a sort on a field followed by a limit gives the same
* effect as calling sortLimit.
*