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

jianglongtao 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 02d64cb1471 [Oracle SQL] Support HR-5-19 of Oracle SQL (#27572)
02d64cb1471 is described below

commit 02d64cb14717147c79493d5fcf8c22c0f5ce9dab
Author: Liao Lanyu <[email protected]>
AuthorDate: Tue Aug 1 10:44:26 2023 +0800

    [Oracle SQL] Support HR-5-19 of Oracle SQL (#27572)
    
    * support HR-5-19
    
    * support HR-5-19
---
 .../oracle/src/main/antlr4/imports/oracle/BaseRule.g4    |  7 ++++++-
 .../oracle/visitor/statement/OracleStatementVisitor.java |  7 ++++++-
 .../main/resources/case/dml/select-special-function.xml  | 16 ++++++++++++++++
 .../sql/supported/dml/select-special-function.xml        |  1 +
 4 files changed, 29 insertions(+), 2 deletions(-)

diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 37188a3bfeb..28b6c93ffcd 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -798,7 +798,12 @@ castFunction
     ;
 
 charFunction
-    : CHAR LP_ expr (COMMA_ expr)* (USING ignoredIdentifier)? RP_
+    : (CHR | CHAR) LP_ expr (COMMA_ expr)* (USING charSet)? RP_
+    ;
+
+charSet
+    : NCHAR_CS
+    | ignoredIdentifier
     ;
     
 extractFunction
diff --git 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
index 20832833e88..bc093ead672 100644
--- 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
+++ 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
@@ -868,7 +868,12 @@ public abstract class OracleStatementVisitor extends 
OracleStatementBaseVisitor<
     @Override
     public final ASTNode visitCharFunction(final CharFunctionContext ctx) {
         calculateParameterCount(ctx.expr());
-        FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.CHAR().getText(), getOriginalText(ctx));
+        FunctionSegment result;
+        if (null != ctx.CHR()) {
+            result = new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.CHR().getText(), getOriginalText(ctx));
+        } else {
+            result = new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.CHAR().getText(), getOriginalText(ctx));
+        }
         result.getParameters().addAll(getExpressions(ctx.expr()));
         return result;
     }
diff --git 
a/test/it/parser/src/main/resources/case/dml/select-special-function.xml 
b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
index 0846790e9de..13c6cac9258 100644
--- a/test/it/parser/src/main/resources/case/dml/select-special-function.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
@@ -184,6 +184,22 @@
             </expression-projection>
         </projections>
     </select>
+    <select sql-case-id="select_chr_using_nchar_cs">
+        <from>
+            <simple-table name="DUAL" start-index="37" stop-index="40" />
+        </from>
+        <projections start-index="7" stop-index="30">
+            <expression-projection text="CHR (196 USING NCHAR_CS)" 
start-index="7" stop-index="30">
+                <expr>
+                    <function function-name="CHR" start-index="7" 
stop-index="30" text="CHR (196 USING NCHAR_CS)" >
+                        <parameter>
+                            <literal-expression value="196" start-index="12" 
stop-index="14" />
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
     <select sql-case-id="select_trim">
         <projections start-index="7" stop-index="22">
             <expression-projection text="TRIM('  bar   ')" start-index="7" 
stop-index="22">
diff --git 
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
 
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
index f8556bf1a17..5bfadbd6c68 100644
--- 
a/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
+++ 
b/test/it/parser/src/main/resources/sql/supported/dml/select-special-function.xml
@@ -27,6 +27,7 @@
     <sql-case id="select_extract" value="SELECT EXTRACT(YEAR FROM 
'2019-07-02')" db-types="MySQL" />
     <sql-case id="select_extract_from_column" value="SELECT EXTRACT(YEAR FROM 
o.creation_date) FROM t_order o" db-types="MySQL" />
     <sql-case id="select_char" value="SELECT CHAR(77,121,83,81,'76')" 
db-types="MySQL" />
+    <sql-case id="select_chr_using_nchar_cs" value="SELECT CHR (196 USING 
NCHAR_CS) FROM DUAL;" db-types="Oracle" />
     <sql-case id="select_trim" value="SELECT TRIM('  bar   ')" 
db-types="MySQL" />
     <sql-case id="select_trim_with_both" value="SELECT TRIM(BOTH ' ' from ' 
bar ')" db-types="MySQL" />
     <sql-case id="select_with_trim_expr" value="SELECT TRIM('#' FROM `name`) 
FROM t_order" db-types="MySQL" />

Reply via email to