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 ae7c76d9a4a Update Oracle DML SLELECT DatetimeExpression statement 
parse (#22229)
ae7c76d9a4a is described below

commit ae7c76d9a4a13c30ca0c63ab5c9baab1bae5e3da
Author: Zichao <[email protected]>
AuthorDate: Thu Nov 17 21:28:24 2022 +1300

    Update Oracle DML SLELECT DatetimeExpression statement parse (#22229)
---
 .../oracle/src/main/antlr4/imports/oracle/BaseRule.g4  |  4 ++--
 .../statement/impl/OracleStatementSQLVisitor.java      |  3 +++
 test/parser/src/main/resources/case/dml/insert.xml     | 18 ++++++++++++++++++
 .../src/main/resources/sql/supported/dml/insert.xml    |  1 +
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git 
a/sql-parser/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4 
b/sql-parser/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 016f9302258..39f093f2b1c 100644
--- a/sql-parser/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/sql-parser/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -42,8 +42,8 @@ numberLiterals
    ;
 
 dateTimeLiterals
-    : (DATE | TIME | TIMESTAMP) STRING_
-    | LBE_ identifier STRING_ RBE_
+    : (DATE | TIME | TIMESTAMP) stringLiterals
+    | LBE_ identifier stringLiterals RBE_
     ;
 
 hexadecimalLiterals
diff --git 
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
 
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
index 9ea2221bfd0..2ad1ef49f8b 100644
--- 
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
+++ 
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
@@ -162,6 +162,9 @@ public abstract class OracleStatementSQLVisitor extends 
OracleStatementBaseVisit
         if (null != ctx.nullValueLiterals()) {
             return visit(ctx.nullValueLiterals());
         }
+        if (null != ctx.dateTimeLiterals()) {
+            return visit(ctx.dateTimeLiterals());
+        }
         throw new IllegalStateException("Literals must have string, number, 
dateTime, hex, bit, boolean or null.");
     }
     
diff --git a/test/parser/src/main/resources/case/dml/insert.xml 
b/test/parser/src/main/resources/case/dml/insert.xml
index 30edbc1482e..4c659158c7f 100644
--- a/test/parser/src/main/resources/case/dml/insert.xml
+++ b/test/parser/src/main/resources/case/dml/insert.xml
@@ -2111,4 +2111,22 @@
             </value>
         </values>
     </insert>
+
+    <insert sql-case-id="insert_datetime_literals">
+        <table name="date_tab" start-index="12" stop-index="19" />
+        <columns start-index="20" stop-index="20" />
+        <values>
+            <value>
+                <assignment-value>
+                    <literal-expression value="1999-12-01 10:00:00" 
start-index="30" stop-index="59" />
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="1999-12-01 10:00:00" 
start-index="62" stop-index="91" />
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="1999-12-01 10:00:00" 
start-index="94" stop-index="123" />
+                </assignment-value>
+            </value>
+        </values>
+    </insert>
 </sql-parser-test-cases>
diff --git a/test/parser/src/main/resources/sql/supported/dml/insert.xml 
b/test/parser/src/main/resources/sql/supported/dml/insert.xml
index 1f13ed2e692..ddf5fa3058e 100644
--- a/test/parser/src/main/resources/sql/supported/dml/insert.xml
+++ b/test/parser/src/main/resources/sql/supported/dml/insert.xml
@@ -87,4 +87,5 @@
     <sql-case id="insert_on_duplicate_key_update_nothing" value="INSERT INTO 
t_order (order_id, user_id, status) VALUES (1, 1, 'insert') ON DUPLICATE KEY 
UPDATE NOTHING" db-types="openGauss" />
     <sql-case id="insert_on_duplicate_key_update_multi_column" value="INSERT 
INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert') ON DUPLICATE 
KEY UPDATE user_id = user_id + 1, status='update'" db-types="MySQL,openGauss" />
     <sql-case id="insert_with_negative_value" value="insert into t_order 
(order_id, user_id, status) values (?, ?, ?)" />
+    <sql-case id="insert_datetime_literals" value="INSERT INTO date_tab VALUES 
( TIMESTAMP'1999-12-01 10:00:00', TIMESTAMP'1999-12-01 10:00:00', 
TIMESTAMP'1999-12-01 10:00:00');" db-types="Oracle" />
 </sql-cases>

Reply via email to