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

wangguangyuan 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 660bc08  Add Oracle SQL - Delete statement (#11372)
660bc08 is described below

commit 660bc08f21be4d76c92848b6a9fac990b8bbfafb
Author: Thanoshan MV <[email protected]>
AuthorDate: Wed Jul 21 05:30:39 2021 +0530

    Add Oracle SQL - Delete statement (#11372)
    
    * proofread oracle delete statement
    
    * remove commented code
---
 .../src/main/antlr4/imports/oracle/DMLStatement.g4 |  17 +-
 .../impl/OracleDMLStatementSQLVisitor.java         |  45 ++--
 .../statement/dml/impl/DeleteStatementAssert.java  |   4 +
 .../statement/dml/DeleteStatementTestCase.java     |   6 +-
 .../src/main/resources/case/dml/delete.xml         | 232 ++++++++++++++++++---
 .../main/resources/sql/supported/dml/delete.xml    |  12 +-
 6 files changed, 237 insertions(+), 79 deletions(-)

diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
index 459b7bb..093918a 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
@@ -114,23 +114,12 @@ assignmentValue
     ;
 
 delete
-    : DELETE deleteSpecification? (singleTableClause | multipleTablesClause) 
whereClause?
+    : DELETE hint? FROM? deleteSpecification alias? whereClause? 
returningClause? errorLoggingClause?
     ;
 
 deleteSpecification
-    : ONLY
-    ;
-
-singleTableClause
-    : FROM? LP_? tableName RP_? (AS? alias)?
-    ;
-
-multipleTablesClause
-    : multipleTableNames FROM tableReferences | FROM multipleTableNames USING 
tableReferences
-    ;
-
-multipleTableNames
-    : tableName DOT_ASTERISK_? (COMMA_ tableName DOT_ASTERISK_?)*
+    : dmlTableExprClause
+    | ONLY LP_ dmlTableExprClause RP_
     ;
 
 select
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
index 308bb0e..de2587b 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
@@ -36,6 +36,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Condit
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ContainersClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CrossOuterApplyClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DeleteContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DeleteSpecificationContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DeleteWhereClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DmlSubqueryClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DmlTableClauseContext;
@@ -60,8 +61,6 @@ import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MergeC
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MergeSetAssignmentsClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MergeUpdateClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MultiTableElementContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MultipleTableNamesContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MultipleTablesClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.OrderByItemContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ParenthesisSelectSubqueryContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.QueryBlockContext;
@@ -80,7 +79,6 @@ import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Select
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.SelectUnionClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.SetAssignmentsClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ShardsClauseContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.SingleTableClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.SubqueryContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.SubqueryFactoringClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.TableCollectionExprContext;
@@ -119,7 +117,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegm
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
@@ -344,10 +341,9 @@ public final class OracleDMLStatementSQLVisitor extends 
OracleStatementSQLVisito
     @Override
     public ASTNode visitDelete(final DeleteContext ctx) {
         OracleDeleteStatement result = new OracleDeleteStatement();
-        if (null != ctx.multipleTablesClause()) {
-            result.setTableSegment((TableSegment) 
visit(ctx.multipleTablesClause()));
-        } else {
-            result.setTableSegment((TableSegment) 
visit(ctx.singleTableClause()));
+        result.setTableSegment((TableSegment) 
visit(ctx.deleteSpecification()));
+        if (null != ctx.alias()) {
+            result.getTableSegment().setAlias((AliasSegment) 
visit(ctx.alias()));
         }
         if (null != ctx.whereClause()) {
             result.setWhere((WhereSegment) visit(ctx.whereClause()));
@@ -357,27 +353,18 @@ public final class OracleDMLStatementSQLVisitor extends 
OracleStatementSQLVisito
     }
     
     @Override
-    public ASTNode visitSingleTableClause(final SingleTableClauseContext ctx) {
-        SimpleTableSegment result = (SimpleTableSegment) 
visit(ctx.tableName());
-        if (null != ctx.alias()) {
-            result.setAlias((AliasSegment) visit(ctx.alias()));
-        }
-        return result;
-    }
-    
-    @Override
-    public ASTNode visitMultipleTablesClause(final MultipleTablesClauseContext 
ctx) {
-        DeleteMultiTableSegment result = new DeleteMultiTableSegment();
-        TableSegment relateTableSource = (TableSegment) 
visit(ctx.tableReferences());
-        result.setRelationTable(relateTableSource);
-        
result.setActualDeleteTables(generateTablesFromTableMultipleTableNames(ctx.multipleTableNames()));
-        return result;
-    }
-    
-    private List<SimpleTableSegment> 
generateTablesFromTableMultipleTableNames(final MultipleTableNamesContext ctx) {
-        List<SimpleTableSegment> result = new LinkedList<>();
-        for (TableNameContext each : ctx.tableName()) {
-            result.add((SimpleTableSegment) visit(each));
+    public ASTNode visitDeleteSpecification(final DeleteSpecificationContext 
ctx) {
+        TableSegment result;
+        if (null != ctx.dmlTableExprClause().dmlTableClause()) {
+            result = (TableSegment) 
visit(ctx.dmlTableExprClause().dmlTableClause());
+        } else if (null != ctx.dmlTableExprClause().dmlSubqueryClause()) {
+            SubquerySegment subquerySegment = (SubquerySegment) 
visit(ctx.dmlTableExprClause().dmlSubqueryClause());
+            SubqueryTableSegment subqueryTableSegment = new 
SubqueryTableSegment(subquerySegment);
+            result = (TableSegment) subqueryTableSegment;
+        } else {
+            SubquerySegment subquerySegment = (SubquerySegment) 
visit(ctx.dmlTableExprClause().tableCollectionExpr());
+            SubqueryTableSegment subqueryTableSegment = new 
SubqueryTableSegment(subquerySegment);
+            result = (TableSegment) subqueryTableSegment;
         }
         return result;
     }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/DeleteStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/DeleteStatementAssert.java
index 457e9fe..f542c2f 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/DeleteStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/DeleteStatementAssert.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSeg
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DeleteStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.DeleteStatementHandler;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
@@ -89,6 +90,9 @@ public final class DeleteStatementAssert {
                 
actualTableSegments.addAll(deleteMultiTableSegment.getActualDeleteTables());
             }
             TableAssert.assertIs(assertContext, actualTableSegments, 
expected.getTables());
+        } else if (null != expected.getSubqueryTable()) {
+            assertNotNull(assertContext.getText("Actual subquery table segment 
should exist."), actual.getTableSegment());
+            TableAssert.assertIs(assertContext, (SubqueryTableSegment) 
actual.getTableSegment(), expected.getSubqueryTable());
         } else {
             assertNull(assertContext.getText("Actual table should not 
exist."), actual.getTableSegment());
         }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/DeleteStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/DeleteStatementTestCase.java
index 80355ab..65f82bb 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/DeleteStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/DeleteStatementTestCase.java
@@ -22,8 +22,9 @@ import lombok.Setter;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.limit.ExpectedLimitClause;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.ExpectedOrderByClause;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.output.ExpectedOutputClause;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.where.ExpectedWhereClause;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSubqueryTable;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.where.ExpectedWhereClause;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.with.ExpectedWithClause;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
@@ -55,4 +56,7 @@ public final class DeleteStatementTestCase extends 
SQLParserTestCase {
     
     @XmlElement(name = "limit")
     private ExpectedLimitClause limitClause;
+    
+    @XmlElement(name = "subquery-table")
+    private ExpectedSubqueryTable subqueryTable;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/delete.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/delete.xml
index a5b7127..3a2fede 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/delete.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/delete.xml
@@ -104,54 +104,52 @@
         </where>
     </delete>
 
-    <delete 
sql-case-id="delete_with_special_comments_return_without_sharding_value">
-        <table name="t_order" start-index="33" stop-index="39" />
-        <where start-index="41" stop-index="54">
-            <expr>
-                <binary-operation-expression start-index="47" stop-index="54">
-                    <left>
-                        <column name="status" start-index="47" stop-index="52" 
/>
-                    </left>
-                    <operator>=</operator>
-                    <right>
-                        <literal-expression value="1" start-index="54" 
stop-index="54" />
-                    </right>
-                </binary-operation-expression>
-            </expr>
-        </where>
-    </delete>
-
-    <delete 
sql-case-id="delete_with_special_comments_returning_without_sharding_value">
-        <table name="t_order" start-index="34" stop-index="40" />
-        <where start-index="43" stop-index="56">
+    <delete sql-case-id="delete_with_alias" parameters="'init'">
+        <table name="t_order" alias="o" start-index="12" stop-index="23" />
+        <where start-index="25" stop-index="38" literal-stop-index="43">
             <expr>
-                <binary-operation-expression start-index="49" stop-index="56">
+                <binary-operation-expression start-index="31" stop-index="38" 
literal-stop-index="43">
                     <left>
-                        <column name="status" start-index="49" stop-index="54" 
/>
+                        <column name="status" start-index="31" stop-index="36" 
/>
                     </left>
                     <operator>=</operator>
                     <right>
-                        <literal-expression value="1" start-index="56" 
stop-index="56" />
+                        <literal-expression value="init" start-index="38" 
stop-index="43" />
+                        <parameter-marker-expression value="0" 
start-index="38" stop-index="38" />
                     </right>
                 </binary-operation-expression>
             </expr>
         </where>
     </delete>
 
-    <delete sql-case-id="delete_with_alias" parameters="'init'">
-        <table name="t_order" alias="o" start-index="12" stop-index="23" />
-        <where start-index="25" stop-index="38" literal-stop-index="43">
+    <delete sql-case-id="delete_with_alias_without_as">
+        <table name="product_price_history" alias="pp" start-index="7" 
stop-index="30" />
+        <where start-index="32" stop-index="211">
             <expr>
-                <binary-operation-expression start-index="31" stop-index="38" 
literal-stop-index="43">
+                <in-expression start-index="38" stop-index="211">
+                    <not>false</not>
                     <left>
-                        <column name="status" start-index="31" stop-index="36" 
/>
+                        <common-expression 
text="(product_id,currency_code,effective_from_date)" start-index="38" 
stop-index="85"/>
                     </left>
-                    <operator>=</operator>
                     <right>
-                        <literal-expression value="init" start-index="38" 
stop-index="43" />
-                        <parameter-marker-expression value="0" 
start-index="38" stop-index="38" />
+                        <subquery start-index="90" stop-index="211">
+                            <select>
+                                <from start-index="155" stop-index="175">
+                                    <simple-table name="product_price_history" 
start-index="155" stop-index="175"/>
+                                </from>
+                                <projections start-index="98" stop-index="148">
+                                    <column-projection name="product_id" 
start-index="98" stop-index="107"/>
+                                    <column-projection name="currency_code" 
start-index="110" stop-index="122"/>
+                                    <aggregation-projection type="MAX" 
inner-expression="(effective_from_date)" start-index="125" stop-index="148" />
+                                </projections>
+                                <group-by>
+                                    <column-item name="product_id" 
start-index="186" stop-index="195" />
+                                    <column-item name="currency_code" 
start-index="198" stop-index="210" />
+                                </group-by>
+                            </select>
+                        </subquery>
                     </right>
-                </binary-operation-expression>
+                </in-expression>
             </expr>
         </where>
     </delete>
@@ -514,4 +512,174 @@
             </expr>
         </where>
     </delete>
+
+    <delete sql-case-id="delete_with_simple_table">
+        <table name="product_descriptions" start-index="12" stop-index="31" />
+        <where start-index="33" stop-index="56">
+            <expr>
+                <binary-operation-expression start-index="39" stop-index="56">
+                    <left>
+                        <column name="language_id" start-index="39" 
stop-index="49" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="AR" start-index="53" 
stop-index="56" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_simple_subquery">
+        <subquery-table>
+            <subquery>
+                <select>
+                    <from start-index="27" stop-index="35">
+                        <simple-table name="employees" start-index="27" 
stop-index="35"/>
+                    </from>
+                    <projections start-index="20" stop-index="20">
+                        <shorthand-projection start-index="20" 
stop-index="20"/>
+                    </projections>
+                </select>
+            </subquery>
+        </subquery-table>
+        <where start-index="38" stop-index="85">
+            <expr>
+                <binary-operation-expression start-index="44" stop-index="85">
+                    <left>
+                        <binary-operation-expression start-index="44" 
stop-index="60">
+                            <left>
+                                <column name="job_id" start-index="44" 
stop-index="49"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="SA_REP" 
start-index="53" stop-index="60"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="66" 
stop-index="85">
+                            <left>
+                                <column name="commission_pct" start-index="66" 
stop-index="79"/>
+                            </left>
+                            <operator>&lt;</operator>
+                            <right>
+                                <literal-expression value="0.2" 
start-index="83" stop-index="85"/>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_simple_subquery_without_from">
+        <subquery-table>
+            <subquery>
+                <select>
+                    <from start-index="27" stop-index="35">
+                        <simple-table name="product_price_history" 
start-index="22" stop-index="42"/>
+                    </from>
+                    <projections start-index="15" stop-index="15">
+                        <shorthand-projection start-index="15" 
stop-index="15"/>
+                    </projections>
+                </select>
+            </subquery>
+        </subquery-table>
+        <where start-index="45" stop-index="71">
+            <expr>
+                <binary-operation-expression start-index="51" stop-index="71">
+                    <left>
+                        <column name="currency_code" start-index="51" 
stop-index="63"/>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="EUR" start-index="67" 
stop-index="71"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_remote_database_table">
+        <table name="locations" start-index="12" stop-index="23">
+            <owner name="hr" start-index="12" stop-index="13" />
+        </table>
+        <where start-index="32" stop-index="55">
+            <expr>
+                <binary-operation-expression start-index="38" stop-index="55">
+                    <left>
+                        <column name="location_id" start-index="38" 
stop-index="48" />
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="3000" start-index="52" 
stop-index="55" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_returning_into">
+        <table name="employees" start-index="12" stop-index="20" />
+        <where start-index="22" stop-index="93">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="93">
+                    <left>
+                        <binary-operation-expression start-index="28" 
stop-index="44">
+                            <left>
+                                <column name="job_id" start-index="28" 
stop-index="33"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="SA_REP" 
start-index="37" stop-index="44"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="50" 
stop-index="93">
+                            <left>
+                                <binary-operation-expression start-index="50" 
stop-index="83">
+                                    <left>
+                                        <column name="hire_date" 
start-index="50" stop-index="58"/>
+                                    </left>
+                                    <operator>+</operator>
+                                    <right>
+                                        <expression-projection 
text="TO_YMINTERVAL('01-00')" start-index="62" stop-index="83"/>
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>&lt;</operator>
+                            <right>
+                                <column name="SYSDATE" start-index="87" 
stop-index="93"/>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_partition">
+        <table name="sales" start-index="12" stop-index="16" />
+        <where start-index="44" stop-index="67">
+            <expr>
+                <binary-operation-expression start-index="50" stop-index="67">
+                    <left>
+                        <column name="amount_sold" start-index="50" 
stop-index="60" />
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="1000" start-index="64" 
stop-index="67" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_table">
+        <table name="product_price_history" start-index="7" stop-index="27" />
+    </delete>
 </sql-parser-test-cases>
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dml/delete.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dml/delete.xml
index 300550f..6bcd57f 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dml/delete.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dml/delete.xml
@@ -20,9 +20,8 @@
     <sql-case id="delete_with_sharding_value" value="DELETE FROM t_order WHERE 
order_id = ? AND user_id = ? AND status=?" />
     <sql-case id="delete_without_sharding_value" value="DELETE FROM t_order 
WHERE status=?" />
     <sql-case id="delete_with_special_character_without_sharding_value" 
value="DELETE FROM `t_order` WHERE `status`='init'" db-types="MySQL" />
-    <sql-case id="delete_with_special_comments_return_without_sharding_value" 
value="DELETE /*+ index(status) */ ONLY t_order WHERE status=1 RETURN * LOG 
ERRORS INTO TABLE_LOG" db-types="Oracle" />
-    <sql-case 
id="delete_with_special_comments_returning_without_sharding_value" 
value="DELETE /*+ index(status) */ ONLY (t_order) WHERE status=1 RETURNING *" 
db-types="Oracle" />
-    <sql-case id="delete_with_alias" value="DELETE FROM t_order AS o WHERE 
status=?" db-types="MySQL,Oracle,SQLServer"/>
+    <sql-case id="delete_with_alias" value="DELETE FROM t_order AS o WHERE 
status=?" db-types="MySQL,SQLServer"/>
+    <sql-case id="delete_with_alias_without_as" value="DELETE 
product_price_history pp WHERE (product_id, currency_code, effective_from_date) 
IN (SELECT product_id, currency_code, MAX(effective_from_date) FROM 
product_price_history GROUP BY product_id, currency_code)" db-types="Oracle" />
     <sql-case id="delete_with_order_by_row_count" value="DELETE FROM t_order 
WHERE order_id = ? AND user_id = ? AND status=? ORDER BY order_id LIMIT ?" 
db-types="MySQL"/>
     <sql-case id="delete_with_output_clause" value="DELETE FROM t_order OUTPUT 
DELETED.order_id, DELETED.user_id INTO @MyTableVar (temp_order_id, 
temp_user_id) WHERE order_id = ?" db-types="SQLServer" />
     <sql-case id="delete_with_output_clause_without_output_table_columns" 
value="DELETE FROM t_order OUTPUT DELETED.order_id, DELETED.user_id INTO 
@MyTableVar WHERE order_id = ?" db-types="SQLServer" />
@@ -35,4 +34,11 @@
     <sql-case id="delete_multi_tables" value="DELETE t_order, t_order_item 
from t_order, t_order_item where t_order.order_id = t_order_item.order_id and 
t_order.status = ?" db-types="MySQL"/>
     <sql-case id="delete_multi_tables_with_using" value="DELETE from t_order, 
t_order_item using t_order left join t_order_item on t_order.order_id = 
t_order_item.order_id where t_order.status = ?" db-types="MySQL"/>
     <sql-case id="delete_with_query_hint" value="DELETE FROM t_order WHERE 
order_id = ? HASH GROUP" db-types="SQLServer" />
+    <sql-case id="delete_with_simple_table" value="DELETE FROM 
product_descriptions WHERE language_id = 'AR'" db-types="Oracle" />
+    <sql-case id="delete_with_simple_subquery" value="DELETE FROM (SELECT * 
FROM employees) WHERE job_id = 'SA_REP' AND commission_pct &lt; 0.2" 
db-types="Oracle" />
+    <sql-case id="delete_with_simple_subquery_without_from" value="DELETE 
(SELECT * FROM product_price_history) WHERE currency_code = 'EUR'" 
db-types="Oracle" />
+    <sql-case id="delete_with_remote_database_table" value="DELETE FROM 
hr.locations@remote WHERE location_id > 3000" db-types="Oracle" />
+    <sql-case id="delete_with_returning_into" value="DELETE FROM employees 
WHERE job_id = 'SA_REP' AND hire_date + TO_YMINTERVAL('01-00') &lt; SYSDATE 
RETURNING salary INTO bnd1" db-types="Oracle" />
+    <sql-case id="delete_with_partition" value="DELETE FROM sales PARTITION 
(sales_q1_1998) WHERE amount_sold > 1000" db-types="Oracle" />
+    <sql-case id="delete_with_table" value="DELETE product_price_history" 
db-types="Oracle" />
 </sql-cases>

Reply via email to