This is an automated email from the ASF dual-hosted git repository. amashenkov pushed a commit to branch ignite-19262 in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit d225502510779cc0dd1899cfb8b28e4ed59487bd Author: amashenkov <[email protected]> AuthorDate: Mon Apr 17 18:29:43 2023 +0300 Minor. --- .../ignite/internal/sql/engine/ItCreateTableDdlTest.java | 11 +++++++++++ .../apache/ignite/internal/sql/engine/SqlQueryProcessor.java | 9 +++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java index e7a54f0552..c570e3dd72 100644 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java +++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java @@ -27,6 +27,7 @@ import org.apache.ignite.internal.schema.Column; import org.apache.ignite.internal.table.TableImpl; import org.apache.ignite.lang.IgniteException; import org.apache.ignite.sql.SqlException; +import org.apache.ignite.tx.Transaction; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @@ -155,4 +156,14 @@ public class ItCreateTableDdlTest extends ClusterPerClassIntegrationTest { assertThat(t.getMessage(), containsString("Functional defaults are not supported for non-primary key columns")); } + + @Test + public void nonTransactionalDdl() { + Transaction tx = CLUSTER_NODES.get(0).transactions().begin(); + + SqlException t = assertThrows(SqlException.class, + () -> sql(tx, "create table t (id varchar default gen_random_uuid primary key, val int)")); + + assertThat(t.getMessage(), containsString("DDL doesn't support transactions.")); + } } diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java index 4366c4f63a..2a1be4591d 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java @@ -23,6 +23,7 @@ import static org.apache.ignite.lang.ErrorGroups.Sql.QUERY_INVALID_ERR; import static org.apache.ignite.lang.ErrorGroups.Sql.SCHEMA_NOT_FOUND_ERR; import static org.apache.ignite.lang.ErrorGroups.Sql.SESSION_EXPIRED_ERR; import static org.apache.ignite.lang.ErrorGroups.Sql.SESSION_NOT_FOUND_ERR; +import static org.apache.ignite.lang.ErrorGroups.Sql.UNSUPPORTED_DDL_OPERATION_ERR; import static org.apache.ignite.lang.ErrorGroups.Sql.UNSUPPORTED_SQL_OPERATION_KIND_ERR; import static org.apache.ignite.lang.IgniteStringFormatter.format; @@ -414,7 +415,7 @@ public class SqlQueryProcessor implements QueryProcessor { StatementParseResult parseResult = IgniteSqlParser.parse(sql, StatementParseResult.MODE); SqlNode sqlNode = parseResult.statement(); - validateParsedStatement(context, parseResult, sqlNode, params); + validateParsedStatement(context, outerTx, parseResult, sqlNode, params); return sqlNode; }) @@ -591,7 +592,7 @@ public class SqlQueryProcessor implements QueryProcessor { } /** Performs additional validation of a parsed statement. **/ - private static void validateParsedStatement(QueryContext context, ParseResult parseResult, SqlNode node, Object[] params) { + private static void validateParsedStatement(QueryContext context, InternalTransaction outerTx, ParseResult parseResult, SqlNode node, Object[] params) { Set<SqlQueryType> allowedTypes = context.allowedQueryTypes(); SqlQueryType queryType = Commons.getQueryType(node); @@ -607,6 +608,10 @@ public class SqlQueryProcessor implements QueryProcessor { throw new QueryValidationException(message); } + if (SqlQueryType.DDL == queryType && outerTx != null) { + throw new SqlException(UNSUPPORTED_DDL_OPERATION_ERR, "DDL doesn't support transactions."); + } + if (parseResult.dynamicParamsCount() != params.length) { String message = format( "Unexpected number of query parameters. Provided {} but there is only {} dynamic parameter(s).",
