This is an automated email from the ASF dual-hosted git repository.
hyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new ad3153c [CALCITE-3738] Missing order by logical plan for insert
statement
ad3153c is described below
commit ad3153c24fa97b6193be7ac14e018f2c3112c7ec
Author: pengzhiwei <[email protected]>
AuthorDate: Wed Jan 15 19:01:05 2020 +0800
[CALCITE-3738] Missing order by logical plan for insert statement
---
.../apache/calcite/sql2rel/SqlToRelConverter.java | 2 +-
.../apache/calcite/test/SqlToRelConverterTest.java | 12 +++++++++
.../apache/calcite/test/SqlToRelConverterTest.xml | 30 ++++++++++++++++++++++
3 files changed, 43 insertions(+), 1 deletion(-)
diff --git
a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
index 928c0dc..c3d74e2 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -3309,7 +3309,7 @@ public class SqlToRelConverter {
validator.getValidatedNodeType(call);
assert targetRowType != null;
RelNode sourceRel =
- convertQueryRecursive(call.getSource(), false,
targetRowType).project();
+ convertQueryRecursive(call.getSource(), true, targetRowType).project();
RelNode massagedRel = convertColumnList(call, sourceRel);
return createModify(targetTable, massagedRel);
diff --git
a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 7a01058..9eb3ce6 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -2222,6 +2222,18 @@ public class SqlToRelConverterTest extends
SqlToRelTestBase {
sql(sql).with(getExtendedTester()).ok();
}
+ @Test public void testInsertWithSort() {
+ final String sql = "insert into empnullables (empno, ename) "
+ + "select deptno, ename from emp order by ename";
+ sql(sql).ok();
+ }
+
+ @Test public void testInsertWithLimit() {
+ final String sql = "insert into empnullables (empno, ename) "
+ + "select deptno, ename from emp order by ename limit 10";
+ sql(sql).ok();
+ }
+
@Test public void testDelete() {
final String sql = "delete from emp";
sql(sql).ok();
diff --git
a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index 98eab14..7760390 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -3845,6 +3845,36 @@ LogicalTableModify(table=[[CATALOG, SALES,
EMPNULLABLES]], operation=[INSERT], f
]]>
</Resource>
</TestCase>
+ <TestCase name="testInsertWithSort">
+ <Resource name="sql">
+ <![CDATA[insert into empnullables (empno, ename)
+ select deptno, ename from emp order by ename]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalTableModify(table=[[CATALOG, SALES, EMPNULLABLES]], operation=[INSERT],
flattened=[true])
+ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[null:VARCHAR(10)],
MGR=[null:INTEGER], HIREDATE=[null:TIMESTAMP(0)], SAL=[null:INTEGER],
COMM=[null:INTEGER], DEPTNO=[null:INTEGER], SLACKER=[null:BOOLEAN])
+ LogicalSort(sort0=[$1], dir0=[ASC])
+ LogicalProject(DEPTNO=[$7], ENAME=[$1])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testInsertWithLimit">
+ <Resource name="sql">
+ <![CDATA[insert into empnullables (empno, ename)
+ select deptno, ename from emp order by ename limit 10]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalTableModify(table=[[CATALOG, SALES, EMPNULLABLES]], operation=[INSERT],
flattened=[true])
+ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[null:VARCHAR(10)],
MGR=[null:INTEGER], HIREDATE=[null:TIMESTAMP(0)], SAL=[null:INTEGER],
COMM=[null:INTEGER], DEPTNO=[null:INTEGER], SLACKER=[null:BOOLEAN])
+ LogicalSort(sort0=[$1], dir0=[ASC], fetch=[10])
+ LogicalProject(DEPTNO=[$7], ENAME=[$1])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
<TestCase name="testInsertBindSubset">
<Resource name="sql">
<![CDATA[insert into empnullables