This is an automated email from the ASF dual-hosted git repository. duanzhengqiang 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 7a7d27f0401 Support Hive ABORT statement parse (#36378) 7a7d27f0401 is described below commit 7a7d27f040100c62d7f0aa11806ccb39ad16a3ae Author: Claire <claire040...@163.com> AuthorDate: Thu Aug 21 15:43:50 2025 +0800 Support Hive ABORT statement parse (#36378) * support abort statement * UPDATE RELEASE-NOTES * Update HiveStatement.g4 --- RELEASE-NOTES.md | 1 + .../src/main/antlr4/imports/hive/HiveKeyword.g4 | 4 ++ .../hive/TCLStatement.g4} | 40 ++---------------- .../sql/parser/autogen/HiveStatement.g4 | 3 +- .../statement/HiveStatementVisitorFacade.java | 3 +- .../statement/type/HiveTCLStatementVisitor.java | 40 ++++++++++++++++++ .../statement/hive/tcl/HiveAbortStatement.java} | 49 ++++++---------------- .../cases/parser/jaxb/RootSQLParserTestCases.java | 4 ++ .../statement/tcl/HiveAbortStatementTestCase.java | 44 ++++--------------- .../parser/src/main/resources/case/tcl/abort.xml | 22 ++++++++++ .../src/main/resources/sql/supported/tcl/abort.xml | 22 ++++++++++ 11 files changed, 120 insertions(+), 112 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 6f9d6343ebb..92b00a1cab3 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -81,6 +81,7 @@ 1. SQL Parser: Support Hive Show Granted Roles and Privileges & SHOW LOCKS & SHOW CONF statement parse - [#36300](https://github.com/apache/shardingsphere/pull/36300) 1. SQL Parser: Support Hive SHOW TRANSACTIONS & SHOW COMPACTIONS statement parse - [#36301](https://github.com/apache/shardingsphere/pull/36301) 1. SQL Parser: Support Hive DESCRIBE statement parse - [#36350](https://github.com/apache/shardingsphere/pull/36350) +1. SQL Parser: Support Hive ABORT statement parse - [#36378](https://github.com/apache/shardingsphere/pull/36378) 1. SQL Parser: Support Hive Inserting data into Hive Tables from queries statement parse - [#36320](https://github.com/apache/shardingsphere/pull/36320) 1. SQL Parser: Support Hive Writing data into the filesystem from queries statement parse - [#36371](https://github.com/apache/shardingsphere/pull/36371) 1. SQL Parser: Support SQL Server xml methods parse - [#35911](https://github.com/apache/shardingsphere/pull/35911) diff --git a/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4 b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4 index 56c899cdaf6..bd262ba7016 100644 --- a/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4 +++ b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4 @@ -3409,3 +3409,7 @@ STATE COMPACTIONID : C O M P A C T I O N I D ; + +ABORT + : A B O R T + ; diff --git a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/TCLStatement.g4 similarity index 52% copy from parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 copy to parser/sql/dialect/hive/src/main/antlr4/imports/hive/TCLStatement.g4 index 69a72b1d51a..6e719e0495f 100644 --- a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 +++ b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/TCLStatement.g4 @@ -15,42 +15,10 @@ * limitations under the License. */ -grammar HiveStatement; +grammar TCLStatement; -import Comments, DMLStatement, DDLStatement, DALStatement; +import BaseRule; -// TODO correct hive SQL parsing according to official documentation -execute - : (select - | insert - | update - | delete - | loadStatement - | createDatabase - | dropDatabase - | alterDatabase - | use - | createTable - | dropTable - | truncateTable - | msckStatement - | alterTable - | createView - | dropView - | alterView - | createMaterializedView - | dropMaterializedView - | alterMaterializedView - | createIndex - | dropIndex - | alterIndex - | createMacro - | dropMacro - | createFunction - | dropFunction - | reloadFunction - | show - | describe - ) (SEMI_ EOF? | EOF) - | EOF +abort + : ABORT TRANSACTIONS NUMBER_+ ; diff --git a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 b/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 index 69a72b1d51a..c1231e6585e 100644 --- a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 +++ b/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 @@ -17,7 +17,7 @@ grammar HiveStatement; -import Comments, DMLStatement, DDLStatement, DALStatement; +import Comments, DMLStatement, DDLStatement, DALStatement, TCLStatement; // TODO correct hive SQL parsing according to official documentation execute @@ -51,6 +51,7 @@ execute | reloadFunction | show | describe + | abort ) (SEMI_ EOF? | EOF) | EOF ; diff --git a/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/HiveStatementVisitorFacade.java b/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/HiveStatementVisitorFacade.java index 3fc621bd3cc..34529b24bb4 100644 --- a/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/HiveStatementVisitorFacade.java +++ b/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/HiveStatementVisitorFacade.java @@ -26,6 +26,7 @@ import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.TCLStatem import org.apache.shardingsphere.sql.parser.hive.visitor.statement.type.HiveDALStatementVisitor; import org.apache.shardingsphere.sql.parser.hive.visitor.statement.type.HiveDDLStatementVisitor; import org.apache.shardingsphere.sql.parser.hive.visitor.statement.type.HiveDMLStatementVisitor; +import org.apache.shardingsphere.sql.parser.hive.visitor.statement.type.HiveTCLStatementVisitor; import org.apache.shardingsphere.sql.parser.spi.SQLStatementVisitorFacade; /** @@ -45,7 +46,7 @@ public final class HiveStatementVisitorFacade implements SQLStatementVisitorFaca @Override public Class<? extends TCLStatementVisitor> getTCLVisitorClass() { - throw new UnsupportedOperationException(""); + return HiveTCLStatementVisitor.class; } @Override diff --git a/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveTCLStatementVisitor.java b/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveTCLStatementVisitor.java new file mode 100644 index 00000000000..332286b75e0 --- /dev/null +++ b/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveTCLStatementVisitor.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.shardingsphere.sql.parser.hive.visitor.statement.type; + +import org.apache.shardingsphere.infra.database.core.type.DatabaseType; +import org.apache.shardingsphere.sql.parser.api.ASTNode; +import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.TCLStatementVisitor; +import org.apache.shardingsphere.sql.parser.autogen.HiveStatementParser.AbortContext; +import org.apache.shardingsphere.sql.parser.hive.visitor.statement.HiveStatementVisitor; +import org.apache.shardingsphere.sql.parser.statement.hive.tcl.HiveAbortStatement; + +/** + * TCL statement visitor for Hive. + */ +public final class HiveTCLStatementVisitor extends HiveStatementVisitor implements TCLStatementVisitor { + + public HiveTCLStatementVisitor(final DatabaseType databaseType) { + super(databaseType); + } + + @Override + public ASTNode visitAbort(final AbortContext ctx) { + return new HiveAbortStatement(getDatabaseType()); + } +} diff --git a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 b/parser/sql/statement/type/hive/src/main/java/org/apache/shardingsphere/sql/parser/statement/hive/tcl/HiveAbortStatement.java similarity index 52% copy from parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 copy to parser/sql/statement/type/hive/src/main/java/org/apache/shardingsphere/sql/parser/statement/hive/tcl/HiveAbortStatement.java index 69a72b1d51a..6f1c9dc0b2f 100644 --- a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 +++ b/parser/sql/statement/type/hive/src/main/java/org/apache/shardingsphere/sql/parser/statement/hive/tcl/HiveAbortStatement.java @@ -15,42 +15,17 @@ * limitations under the License. */ -grammar HiveStatement; +package org.apache.shardingsphere.sql.parser.statement.hive.tcl; -import Comments, DMLStatement, DDLStatement, DALStatement; +import org.apache.shardingsphere.infra.database.core.type.DatabaseType; +import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.DALStatement; -// TODO correct hive SQL parsing according to official documentation -execute - : (select - | insert - | update - | delete - | loadStatement - | createDatabase - | dropDatabase - | alterDatabase - | use - | createTable - | dropTable - | truncateTable - | msckStatement - | alterTable - | createView - | dropView - | alterView - | createMaterializedView - | dropMaterializedView - | alterMaterializedView - | createIndex - | dropIndex - | alterIndex - | createMacro - | dropMacro - | createFunction - | dropFunction - | reloadFunction - | show - | describe - ) (SEMI_ EOF? | EOF) - | EOF - ; +/** + * Hive abort statement. + */ +public final class HiveAbortStatement extends DALStatement { + + public HiveAbortStatement(final DatabaseType databaseType) { + super(databaseType); + } +} diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java index f439de63bc6..d772b898893 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java @@ -21,6 +21,7 @@ import com.google.common.base.Preconditions; import lombok.Getter; import lombok.SneakyThrows; import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.CommonStatementTestCase; +import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.tcl.HiveAbortStatementTestCase; import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.mysql.MySQLCloneStatementTestCase; import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.mysql.MySQLCreateLoadableFunctionTestCase; import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.mysql.MySQLDelimiterStatementTestCase; @@ -1764,6 +1765,9 @@ public final class RootSQLParserTestCases { @XmlElement(name = "reload-function") private final List<ReloadFunctionStatementTestCase> reloadFunctionStatementTestCases = new LinkedList<>(); + @XmlElement(name = "abort") + private final List<HiveAbortStatementTestCase> hiveAbortStatementTestCase = new LinkedList<>(); + /** * Get all SQL parser test cases. * diff --git a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/tcl/HiveAbortStatementTestCase.java similarity index 52% copy from parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 copy to test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/tcl/HiveAbortStatementTestCase.java index 69a72b1d51a..468629bfc6f 100644 --- a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4 +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/tcl/HiveAbortStatementTestCase.java @@ -15,42 +15,12 @@ * limitations under the License. */ -grammar HiveStatement; +package org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.tcl; -import Comments, DMLStatement, DDLStatement, DALStatement; +import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase; -// TODO correct hive SQL parsing according to official documentation -execute - : (select - | insert - | update - | delete - | loadStatement - | createDatabase - | dropDatabase - | alterDatabase - | use - | createTable - | dropTable - | truncateTable - | msckStatement - | alterTable - | createView - | dropView - | alterView - | createMaterializedView - | dropMaterializedView - | alterMaterializedView - | createIndex - | dropIndex - | alterIndex - | createMacro - | dropMacro - | createFunction - | dropFunction - | reloadFunction - | show - | describe - ) (SEMI_ EOF? | EOF) - | EOF - ; +/** + * Hive abort statement test case. + */ +public final class HiveAbortStatementTestCase extends SQLParserTestCase { +} diff --git a/test/it/parser/src/main/resources/case/tcl/abort.xml b/test/it/parser/src/main/resources/case/tcl/abort.xml new file mode 100644 index 00000000000..5faf56f55de --- /dev/null +++ b/test/it/parser/src/main/resources/case/tcl/abort.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF licenses this file to You under the Apache License, Version 2.0 + ~ (the "License"); you may not use this file except in compliance with + ~ the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<sql-parser-test-cases> + <abort sql-case-id="abort_transactionID" /> + <abort sql-case-id="abort_more_transactionID" /> +</sql-parser-test-cases> diff --git a/test/it/parser/src/main/resources/sql/supported/tcl/abort.xml b/test/it/parser/src/main/resources/sql/supported/tcl/abort.xml new file mode 100644 index 00000000000..10bf457f700 --- /dev/null +++ b/test/it/parser/src/main/resources/sql/supported/tcl/abort.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF licenses this file to You under the Apache License, Version 2.0 + ~ (the "License"); you may not use this file except in compliance with + ~ the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<sql-cases> + <sql-case id="abort_transactionID" value="ABORT TRANSACTIONS 0000007" db-types="Hive" /> + <sql-case id="abort_more_transactionID" value="ABORT TRANSACTIONS 0000007 0000008 0000010 0000015" db-types="Hive" /> +</sql-cases>