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

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


The following commit(s) were added to refs/heads/master by this push:
     new 3c3096ec209 Refactor IdentifierValue (#35695)
3c3096ec209 is described below

commit 3c3096ec209eab70e3c3472a8416e51e41bdc22b
Author: Cong Hu <iamhuc...@gmail.com>
AuthorDate: Mon Jun 16 09:28:27 2025 +0800

    Refactor IdentifierValue (#35695)
---
 .../core/ShardingDistSQLStatementVisitor.java      |  2 +-
 .../sql/parser/statement/core/util/SQLUtils.java   | 37 +++++++++++++++-------
 .../core/value/identifier/IdentifierValue.java     | 11 ++++---
 .../core/value/identifier/IdentifierValueTest.java | 12 -------
 4 files changed, 32 insertions(+), 30 deletions(-)

diff --git 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index ac4f808d994..89d077f8565 100644
--- 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++ 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -302,7 +302,7 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
         if (null == context) {
             return null;
         }
-        String value = new IdentifierValue(context.getText(), 
"[]'").getValue();
+        String value = new IdentifierValue(context.getText()).getValue();
         return value.startsWith("'") ? value.substring(1, value.length() - 1) 
: value.trim();
     }
     
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/util/SQLUtils.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/util/SQLUtils.java
index 58bb8195795..e64744749da 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/util/SQLUtils.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/util/SQLUtils.java
@@ -124,21 +124,34 @@ public final class SQLUtils {
             return null;
         }
         if (value.startsWith(BACKTICK) && value.endsWith(BACKTICK)) {
-            int startIndex = 1;
-            int stopIndex = value.length() - 1;
-            StringBuilder exactlyTableName = new StringBuilder();
-            while (startIndex < stopIndex) {
-                if (value.charAt(startIndex) == '`' && (startIndex + 1 >= 
stopIndex || value.charAt(startIndex + 1) != '`')) {
-                    return value;
-                } else if (value.charAt(startIndex) == '`' && 
value.charAt(startIndex + 1) == '`') {
-                    startIndex++;
-                }
-                exactlyTableName.append(value.charAt(startIndex));
+            return getRealContentInBackticks(value);
+        }
+        return value;
+    }
+    
+    /**
+     * Get exactly content in backticks.
+     *
+     * @param value SQL expression
+     * @return exactly content in backticks
+     */
+    public static String getRealContentInBackticks(final String value) {
+        if (null == value) {
+            return null;
+        }
+        int startIndex = 1;
+        int stopIndex = value.length() - 1;
+        StringBuilder exactlyTableName = new StringBuilder();
+        while (startIndex < stopIndex) {
+            if (value.charAt(startIndex) == '`' && (startIndex + 1 >= 
stopIndex || value.charAt(startIndex + 1) != '`')) {
+                return value;
+            } else if (value.charAt(startIndex) == '`' && 
value.charAt(startIndex + 1) == '`') {
                 startIndex++;
             }
-            return 0 == exactlyTableName.length() ? value : 
exactlyTableName.toString();
+            exactlyTableName.append(value.charAt(startIndex));
+            startIndex++;
         }
-        return value;
+        return 0 == exactlyTableName.length() ? value : 
exactlyTableName.toString();
     }
     
     /**
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValue.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValue.java
index 1fc968a366b..c546ed9f97b 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValue.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValue.java
@@ -39,11 +39,12 @@ public final class IdentifierValue implements 
ValueASTNode<String> {
     private final QuoteCharacter quoteCharacter;
     
     public IdentifierValue(final String text) {
-        this(SQLUtils.getExactlyValue(text), 
QuoteCharacter.getQuoteCharacter(text));
-    }
-    
-    public IdentifierValue(final String text, final String reservedCharacters) 
{
-        this(SQLUtils.getExactlyValue(text, reservedCharacters), 
QuoteCharacter.getQuoteCharacter(text));
+        quoteCharacter = QuoteCharacter.getQuoteCharacter(text);
+        if (QuoteCharacter.BACK_QUOTE == quoteCharacter) {
+            value = SQLUtils.getRealContentInBackticks(text);
+        } else {
+            value = null == text ? null : quoteCharacter.unwrap(text);
+        }
     }
     
     /**
diff --git 
a/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValueTest.java
 
b/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValueTest.java
index d0e30925c3e..3f162184e33 100644
--- 
a/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValueTest.java
+++ 
b/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/value/identifier/IdentifierValueTest.java
@@ -42,18 +42,6 @@ class IdentifierValueTest {
         assertThat(new IdentifierValue(text).getValue(), is("t_order"));
     }
     
-    @Test
-    void assertGetIdentifierValueWithBracket() {
-        String text = "ds_${[1,2]}.t_order";
-        assertThat(new IdentifierValue(text).getValue(), 
is("ds_${1,2}.t_order"));
-    }
-    
-    @Test
-    void assertGetIdentifierValueWithReservedBracket() {
-        String text = "ds_${[1,2]}.t_order";
-        assertThat(new IdentifierValue(text, "[]").getValue(), 
is("ds_${[1,2]}.t_order"));
-    }
-    
     @Test
     void assertGetValueWithQuoteCharactersWithNullValue() {
         assertThat(new IdentifierValue(null).getValueWithQuoteCharacters(), 
is(""));

Reply via email to