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

jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 2f63999066e [fix](Nereids): Preserve `""` in single quote strings and 
`''` in double quote strings. (#27959)
2f63999066e is described below

commit 2f63999066e1d6278afebc43d01a532f5b46577a
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Tue Dec 5 12:30:03 2023 +0800

    [fix](Nereids): Preserve `""` in single quote strings and `''` in double 
quote strings. (#27959)
---
 .../apache/doris/nereids/parser/LogicalPlanBuilder.java    |  8 +++++++-
 .../org/apache/doris/statistics/util/StatisticsUtil.java   |  3 +--
 .../apache/doris/statistics/util/StatisticsUtilTest.java   | 14 +++++++-------
 .../data/nereids_syntax_p0/one_row_relation.out            |  6 ++++++
 .../suites/nereids_syntax_p0/one_row_relation.groovy       |  2 ++
 5 files changed, 23 insertions(+), 10 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index 45a49ba798f..c3eb5c5a18b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -1935,7 +1935,13 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
     public Literal visitStringLiteral(StringLiteralContext ctx) {
         String txt = ctx.STRING_LITERAL().getText();
         String s = txt.substring(1, txt.length() - 1);
-        s = s.replace("''", "'").replace("\"\"", "\"");
+        if (txt.charAt(0) == '\'') {
+            // for single quote string, '' should be converted to '
+            s = s.replace("''", "'");
+        } else if (txt.charAt(0) == '"') {
+            // for double quote string, "" should be converted to "
+            s = s.replace("\"\"", "\"");
+        }
         if (!SqlModeHelper.hasNoBackSlashEscapes()) {
             s = LogicalPlanBuilderAssistant.escapeBackSlash(s);
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
index 99acaf7ca0f..d5bdf8bf053 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
@@ -789,8 +789,7 @@ public class StatisticsUtil {
             return null;
         }
         return str.replace("'", "''")
-                .replace("\\", "\\\\")
-                .replace("\"", "\"\"");
+                .replace("\\", "\\\\");
     }
 
     public static boolean isExternalTable(String catalogName, String dbName, 
String tblName) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/util/StatisticsUtilTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/util/StatisticsUtilTest.java
index c827a7d1690..724e0363833 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/util/StatisticsUtilTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/util/StatisticsUtilTest.java
@@ -34,9 +34,9 @@ import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Base64;
 
-public class StatisticsUtilTest {
+class StatisticsUtilTest {
     @Test
-    public void testConvertToDouble() {
+    void testConvertToDouble() {
         try {
             //test DATE
             double date1 = StatisticsUtil.convertToDouble(Type.DATE, 
"1990-01-01");
@@ -80,7 +80,7 @@ public class StatisticsUtilTest {
     }
 
     @Test
-    public void testInAnalyzeTime1() {
+    void testInAnalyzeTime1() {
         new MockUp<StatisticsUtil>() {
 
             @Mock
@@ -99,7 +99,7 @@ public class StatisticsUtilTest {
     }
 
     @Test
-    public void testInAnalyzeTime2() {
+    void testInAnalyzeTime2() {
         new MockUp<StatisticsUtil>() {
 
             @Mock
@@ -119,7 +119,7 @@ public class StatisticsUtilTest {
 
 
     @Test
-    public void testEncodeValue() throws Exception {
+    void testEncodeValue() throws Exception {
         Assertions.assertEquals("NULL", StatisticsUtil.encodeValue(null, 0));
 
         ResultRow row = new ResultRow(null);
@@ -144,10 +144,10 @@ public class StatisticsUtilTest {
     }
 
     @Test
-    public void testEscape() {
+    void testEscape() {
         // \'"
         String origin = "\\'\"";
         // \\''""
-        Assertions.assertEquals("\\\\''\"\"", 
StatisticsUtil.escapeSQL(origin));
+        Assertions.assertEquals("\\\\''\"", StatisticsUtil.escapeSQL(origin));
     }
 }
diff --git a/regression-test/data/nereids_syntax_p0/one_row_relation.out 
b/regression-test/data/nereids_syntax_p0/one_row_relation.out
index fc645c3920b..ef715766007 100644
--- a/regression-test/data/nereids_syntax_p0/one_row_relation.out
+++ b/regression-test/data/nereids_syntax_p0/one_row_relation.out
@@ -5,3 +5,9 @@ A'B     A''B    A''B
 -- !string2 --
 A"B    A""B    
 
+-- !string3 --
+A""B   A""B
+
+-- !string4 --
+A''B   A''B
+
diff --git a/regression-test/suites/nereids_syntax_p0/one_row_relation.groovy 
b/regression-test/suites/nereids_syntax_p0/one_row_relation.groovy
index 0259bc5940f..b9a43ac54de 100644
--- a/regression-test/suites/nereids_syntax_p0/one_row_relation.groovy
+++ b/regression-test/suites/nereids_syntax_p0/one_row_relation.groovy
@@ -34,4 +34,6 @@ suite("one_row_relation") {
 
     qt_string1 """ select 'A''B', 'A''''B', 'A\\'\\'B', ''; """
     qt_string2 """ select "A""B", "A\\"\\"B", "";  """
+    qt_string3 """ select 'A""B', 'A\\"\\"B';  """
+    qt_string4 """ select "A''B", "A\\'\\'B";  """
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to