This is an automated email from the ASF dual-hosted git repository. wuweijie pushed a commit to branch revert-27534-27533 in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
commit cf0edc09d649f43a8b1ce5e2985b4ae46b0c6730 Author: 吴伟杰 <[email protected]> AuthorDate: Fri Jul 28 15:44:53 2023 +0800 Revert "Fix parsing Oracle INSERT with multiple values (#27534)" This reverts commit 3bca9742d0809519f0a5bc0d478afc606af9c5d0. --- .../oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 | 2 +- .../visitor/statement/type/OracleDMLStatementVisitor.java | 11 ++++------- .../it/parser/src/main/resources/sql/supported/dml/insert.xml | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 index e22b8d96476..7a55bebe744 100644 --- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 +++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 @@ -52,7 +52,7 @@ insertIntoClause ; insertValuesClause - : VALUES assignmentValues (COMMA_ assignmentValues)* + : VALUES assignmentValues ; returningClause diff --git a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java index 8deef3ee071..61d74d29a19 100644 --- a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java +++ b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java @@ -115,6 +115,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOp import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.DatetimeExpression; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment; +import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.IntervalExpressionProjection; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.XmlPiFunctionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.XmlQueryAndExistsFunctionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.XmlSerializeFunctionSegment; @@ -127,7 +128,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.DatetimeProjectionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment; -import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.IntervalExpressionProjection; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment; import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment; @@ -163,7 +163,6 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.Ora import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleSelectStatement; import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleUpdateStatement; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -295,11 +294,9 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl return result; } - private Collection<InsertValuesSegment> createInsertValuesSegments(final List<AssignmentValuesContext> ctx) { - Collection<InsertValuesSegment> result = new ArrayList<>(ctx.size()); - for (AssignmentValuesContext each : ctx) { - result.add((InsertValuesSegment) visit(each)); - } + private Collection<InsertValuesSegment> createInsertValuesSegments(final AssignmentValuesContext ctx) { + Collection<InsertValuesSegment> result = new LinkedList<>(); + result.add((InsertValuesSegment) visit(ctx)); return result; } diff --git a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml index d89c68f11ac..c5cad9f5667 100644 --- a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml +++ b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml @@ -47,7 +47,7 @@ <sql-case id="insert_on_duplicate_key_update_with_placeholders" value="INSERT INTO t_order (order_id, user_id, status) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE status = ?" db-types="MySQL,openGauss" /> <sql-case id="insert_on_duplicate_key_update_with_placeholders_postgres" value="INSERT INTO t_order (order_id, user_id, status) VALUES (?, ?, ?) ON CONFLICT (order_id) DO UPDATE SET status = ?" db-types="PostgreSQL" /> <sql-case id="insert_on_duplicate_key_update_with_complicated_expression" value="INSERT INTO emp(order_id,emp_id,age,salary) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE salary = VALUES(salary)+VALUES(salary)*0.2" db-types="MySQL" /> - <sql-case id="insert_with_multiple_values" value="INSERT INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert'), (2, 2, 'insert2')" db-types="MySQL,Oracle" /> + <sql-case id="insert_with_multiple_values" value="INSERT INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert'), (2, 2, 'insert2')" db-types="MySQL" /> <sql-case id="insert_on_duplicate_key_update_with_table_identifier" value="INSERT INTO t_order (t_order.order_id, t_order.user_id, t_order.status) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE t_order.status = VALUES(t_order.status)" db-types="MySQL" /> <sql-case id="insert_with_geography" value="INSERT INTO t_order(user_id, order_id, start_point,rule) VALUES (?, ?, ST_GeographyFromText('SRID=4326;POINT(100 200)'), ?::jsonb)" db-types="PostgreSQL,openGauss" /> <sql-case id="insert_with_one_auto_increment_column" value="INSERT INTO t_auto_increment_table VALUES()" db-types="MySQL" />
