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" />