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));
   }
+
 }