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 2014/09/17 20:14:23 UTC

[3/3] git commit: [OPTIQ-412] RelFieldTrimmer: when trimming SortRel, the collation and trait set don't match

[OPTIQ-412] RelFieldTrimmer: when trimming SortRel, the collation and trait set don't match


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/3c32deb2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/3c32deb2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/3c32deb2

Branch: refs/heads/master
Commit: 3c32deb2bb06dc56ff036419c5f4e7ded61b8eac
Parents: f715880
Author: Harish Butani <hb...@hortonworks.com>
Authored: Wed Sep 17 10:27:27 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Sep 17 10:27:27 2014 -0700

----------------------------------------------------------------------
 .../java/org/eigenbase/sql2rel/RelFieldTrimmer.java    |  8 +++++---
 .../java/org/eigenbase/test/SqlToRelConverterTest.java | 10 ++++++++++
 .../org/eigenbase/test/SqlToRelConverterTest.xml       | 13 +++++++++++++
 3 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/3c32deb2/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java b/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
index e8ca33b..8a78add 100644
--- a/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
+++ b/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
@@ -471,9 +471,11 @@ public class RelFieldTrimmer implements ReflectiveVisitor {
           Mappings.createIdentity(fieldCount));
     }
 
-    final RelNode newSort = sortFactory.createSort(sort.getTraitSet(),
-        newInput, RexUtil.apply(inputMapping, collation),
-        sort.offset, sort.fetch);
+    final RelCollation newCollation =
+        sort.getTraitSet().canonize(RexUtil.apply(inputMapping, collation));
+    final RelTraitSet newTraitSet = sort.getTraitSet().replace(newCollation);
+    final RelNode newSort = sortFactory.createSort(newTraitSet, newInput,
+        newCollation, sort.offset, sort.fetch);
 
     // The result has the same mapping as the input gave us. Sometimes we
     // return fields that the consumer didn't ask for, because the filter

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/3c32deb2/core/src/test/java/org/eigenbase/test/SqlToRelConverterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/eigenbase/test/SqlToRelConverterTest.java b/core/src/test/java/org/eigenbase/test/SqlToRelConverterTest.java
index 26cdd2a..5ab6546 100644
--- a/core/src/test/java/org/eigenbase/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/eigenbase/test/SqlToRelConverterTest.java
@@ -915,6 +915,16 @@ public class SqlToRelConverterTest extends SqlToRelTestBase {
         Util.toLinux(sw.toString()));
   }
 
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/OPTIQ-412">OPTIQ-412</a>,
+   * "RelFieldTrimmer: when trimming SortRel, the collation and trait set don't
+   * match". */
+  @Test public void testSortWithTrim() {
+    tester.assertConvertsTo(
+        "select ename from (select * from emp order by sal) a", "${plan}",
+        true);
+  }
+
   /**
    * Visitor that checks that every {@link RelNode} in a tree is valid.
    *

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/3c32deb2/core/src/test/resources/org/eigenbase/test/SqlToRelConverterTest.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/eigenbase/test/SqlToRelConverterTest.xml b/core/src/test/resources/org/eigenbase/test/SqlToRelConverterTest.xml
index a506886..c598bfe 100644
--- a/core/src/test/resources/org/eigenbase/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/eigenbase/test/SqlToRelConverterTest.xml
@@ -1950,4 +1950,17 @@ ProjectRel(EMPNO=[$0], EXPR$1=[NOT(true)])
 ]]>
         </Resource>
     </TestCase>
+    <TestCase name="testSortWithTrim">
+        <Resource name="sql">
+            <![CDATA[select ename from (select * from emp order by sal) a]]>
+        </Resource>
+        <Resource name="plan">
+            <![CDATA[
+ProjectRel(ENAME=[$0])
+  SortRel(sort0=[$1], dir0=[ASC])
+    ProjectRel(ENAME=[$1], SAL=[$5])
+      TableAccessRel(table=[[CATALOG, SALES, EMP]])
+]]>
+        </Resource>
+    </TestCase>
 </Root>