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 2021/04/19 06:31:15 UTC
[calcite] branch master updated: [CALCITE-4571] In piglet,
a Pig Latin script with multiple STORE commands causes the merging
of multiple SQL statements (Mahesh Kumar Behera)
This is an automated email from the ASF dual-hosted git repository.
jhyde 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 8169246 [CALCITE-4571] In piglet, a Pig Latin script with multiple STORE commands causes the merging of multiple SQL statements (Mahesh Kumar Behera)
8169246 is described below
commit 8169246a4ed1f207f62e252a34aff7589754f531
Author: Mahesh Kumar Behera <ma...@apache.org>
AuthorDate: Fri Apr 9 17:47:05 2021 +0530
[CALCITE-4571] In piglet, a Pig Latin script with multiple STORE commands causes the merging of multiple SQL statements (Mahesh Kumar Behera)
Close apache/calcite#2390
---
.../org/apache/calcite/piglet/PigConverter.java | 1 +
.../java/org/apache/calcite/test/PigRelOpTest.java | 35 ++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/piglet/src/main/java/org/apache/calcite/piglet/PigConverter.java b/piglet/src/main/java/org/apache/calcite/piglet/PigConverter.java
index 6219c96..618fbc4 100644
--- a/piglet/src/main/java/org/apache/calcite/piglet/PigConverter.java
+++ b/piglet/src/main/java/org/apache/calcite/piglet/PigConverter.java
@@ -254,6 +254,7 @@ public class PigConverter extends PigServer {
final SqlNode sqlNode = sqlConverter.visitRoot(rel).asStatement();
sqlNode.unparse(writer, 0, 0);
sqlStatements.add(writer.toString());
+ writer.reset();
}
return sqlStatements;
}
diff --git a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
index 959949d..a2bdbfe 100644
--- a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
+++ b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
@@ -105,6 +105,17 @@ class PigRelOpTest extends PigRelTestBase {
}
}
+ private Fluent assertSql(Matcher<String> sqlMatcher, int pos) {
+ try {
+ final String sql =
+ converter.pigToSql(script, PigRelSqlDialect.DEFAULT).get(pos);
+ assertThat(sql, sqlMatcher);
+ return this;
+ } catch (IOException e) {
+ throw TestUtil.rethrow(e);
+ }
+ }
+
private Fluent assertResult(Matcher<String> resultMatcher) {
final RelNode rel;
try {
@@ -1622,6 +1633,29 @@ class PigRelOpTest extends PigRelTestBase {
.assertSql(is(sql));
}
+ @Test void testMultipleStores() {
+ final String script = ""
+ + "A = LOAD 'scott.DEPT' as (DEPTNO:int, DNAME:chararray, LOC:CHARARRAY);\n"
+ + "B = FILTER A BY DEPTNO <= 30;\n"
+ + "STORE B into 'output.csv';\n"
+ + "C = FILTER A BY DEPTNO >= 20;\n"
+ + "STORE C into 'output1.csv';\n";
+ final String plan = ""
+ + "LogicalFilter(condition=[<=($0, 30)])\n"
+ + " LogicalTableScan(table=[[scott, DEPT]])\n";
+ final String sql0 = ""
+ + "SELECT *\n"
+ + "FROM scott.DEPT\n"
+ + "WHERE DEPTNO <= 30";
+ final String sql1 = ""
+ + "SELECT *\n"
+ + "FROM scott.DEPT\n"
+ + "WHERE DEPTNO >= 20";
+ pig(script).assertRel(hasTree(plan))
+ .assertSql(is(sql0), 0)
+ .assertSql(is(sql1), 1);
+ }
+
@Test void testRankAndFilter() {
final String script = ""
+ "A = LOAD 'emp1' USING PigStorage(',') as ("
@@ -1643,4 +1677,5 @@ class PigRelOpTest extends PigRelTestBase {
pig(script).assertRel(hasTree(plan))
.assertSql(is(sql));
}
+
}