You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ja...@apache.org on 2020/02/17 14:48:33 UTC

[flink] branch release-1.10 updated: [FLINK-16113][table-planner-blink] ExpressionReducer shouldn't escape the reduced string value (#11108)

This is an automated email from the ASF dual-hosted git repository.

jark pushed a commit to branch release-1.10
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/release-1.10 by this push:
     new ab5df9b  [FLINK-16113][table-planner-blink] ExpressionReducer shouldn't escape the reduced string value (#11108)
ab5df9b is described below

commit ab5df9b8e7390ed1254876bc0ce71169c01f4ea4
Author: Jark Wu <ja...@apache.org>
AuthorDate: Mon Feb 17 22:45:25 2020 +0800

    [FLINK-16113][table-planner-blink] ExpressionReducer shouldn't escape the reduced string value (#11108)
---
 .../table/planner/codegen/ExpressionReducer.scala      |  4 ++--
 .../flink/table/planner/plan/stream/sql/CalcTest.xml   | 18 ++++++++++++++++++
 .../flink/table/planner/plan/stream/sql/CalcTest.scala |  6 ++++++
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/ExpressionReducer.scala b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/ExpressionReducer.scala
index ebd8e7d..c7083fd 100644
--- a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/ExpressionReducer.scala
+++ b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/ExpressionReducer.scala
@@ -138,8 +138,8 @@ class ExpressionReducer(
                SqlTypeName.MULTISET =>
             reducedValues.add(unreduced)
           case SqlTypeName.VARCHAR | SqlTypeName.CHAR =>
-            val escapeVarchar = StringEscapeUtils
-              .escapeJava(safeToString(reduced.getField(reducedIdx).asInstanceOf[BinaryString]))
+            val escapeVarchar = safeToString(
+              reduced.getField(reducedIdx).asInstanceOf[BinaryString])
             reducedValues.add(maySkipNullLiteralReduce(rexBuilder, escapeVarchar, unreduced))
             reducedIdx += 1
           case SqlTypeName.VARBINARY | SqlTypeName.BINARY =>
diff --git a/flink-table/flink-table-planner-blink/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/CalcTest.xml b/flink-table/flink-table-planner-blink/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/CalcTest.xml
index dd55968..32f4260 100644
--- a/flink-table/flink-table-planner-blink/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/CalcTest.xml
+++ b/flink-table/flink-table-planner-blink/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/CalcTest.xml
@@ -69,6 +69,24 @@ Calc(select=[a, b, c], where=[OR(<(a, 10), >(a, 20))])
 ]]>
     </Resource>
   </TestCase>
+  <TestCase name="testFilterOnNonAsciiLiteral">
+    <Resource name="sql">
+      <![CDATA[SELECT a, b, c, c || TRIM(' 世界 ') FROM MyTable WHERE c = '你好']]>
+    </Resource>
+    <Resource name="planBefore">
+      <![CDATA[
+LogicalProject(a=[$0], b=[$1], c=[$2], EXPR$3=[||($2, TRIM(FLAG(BOTH), _UTF-16LE' ', _UTF-16LE' 世界 '))])
++- LogicalFilter(condition=[=($2, _UTF-16LE'你好')])
+   +- LogicalTableScan(table=[[default_catalog, default_database, MyTable, source: [TestTableSource(a, b, c)]]])
+]]>
+    </Resource>
+    <Resource name="planAfter">
+      <![CDATA[
+Calc(select=[a, b, CAST(_UTF-16LE'你好':VARCHAR(2147483647) CHARACTER SET "UTF-16LE") AS c, CAST(_UTF-16LE'你好世界':VARCHAR(2147483647) CHARACTER SET "UTF-16LE") AS EXPR$3], where=[=(c, _UTF-16LE'你好':VARCHAR(2147483647) CHARACTER SET "UTF-16LE")])
++- TableSourceScan(table=[[default_catalog, default_database, MyTable, source: [TestTableSource(a, b, c)]]], fields=[a, b, c])
+]]>
+    </Resource>
+  </TestCase>
   <TestCase name="testFilterWithDateType">
     <Resource name="sql">
       <![CDATA[
diff --git a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/CalcTest.scala b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/CalcTest.scala
index 6a3a825..3c7f408 100644
--- a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/CalcTest.scala
+++ b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/CalcTest.scala
@@ -80,6 +80,12 @@ class CalcTest extends TableTestBase {
   }
 
   @Test
+  def testFilterOnNonAsciiLiteral(): Unit = {
+    val sql = s"SELECT a, b, c, c || TRIM(' 世界 ') FROM MyTable WHERE c = '你好'"
+    util.verifyPlan(sql)
+  }
+
+  @Test
   def testNotIn(): Unit = {
     val sql = s"SELECT * FROM MyTable WHERE b NOT IN (1, 3, 4, 5, 6) OR c = 'xx'"
     util.verifyPlan(sql)