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).",

Reply via email to