This is an automated email from the ASF dual-hosted git repository.
korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 1a9b4b2bfd2 IGNITE-27245 Sql. Use SqlQueryType#displayName in log and
error messages (#7145)
1a9b4b2bfd2 is described below
commit 1a9b4b2bfd28e68ac80521b30435072c70485b94
Author: korlov42 <[email protected]>
AuthorDate: Fri Dec 5 10:56:05 2025 +0200
IGNITE-27245 Sql. Use SqlQueryType#displayName in log and error messages
(#7145)
---
.../java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java | 14 +++++++-------
.../java/org/apache/ignite/jdbc/ItJdbcKillCommandTest.java | 2 +-
.../org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java | 6 +++---
.../platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs | 2 +-
.../ignite/internal/rest/sql/ItSqlQueryControllerTest.java | 2 +-
.../app/client/ItThinClientMultistatementSqlTest.java | 2 +-
.../internal/runner/app/client/ItThinClientSqlTest.java | 12 ++++++------
.../apache/ignite/internal/sql/api/ItSqlApiBaseTest.java | 4 ++--
.../internal/sql/engine/ItSqlMultiStatementTest.java | 4 ++--
.../ignite/internal/sql/engine/ItSqlQueryEventLogTest.java | 2 +-
.../systemviews/ItCachedQueryPlansSystemViewTest.java | 8 ++++----
.../sql/engine/systemviews/ItSqlQueriesSystemViewTest.java | 14 +++++++-------
.../ignite/internal/sql/engine/QueryEventsFactory.java | 2 +-
.../ignite/internal/sql/engine/SqlQueriesViewProvider.java | 4 ++--
.../internal/sql/engine/exec/fsm/ValidationHelper.java | 9 ++++++++-
15 files changed, 47 insertions(+), 40 deletions(-)
diff --git
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
index 15a8ba562dc..866f0df79ef 100644
---
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
+++
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
@@ -251,7 +251,7 @@ public class ItJdbcBatchSelfTest extends
AbstractJdbcSelfTest {
assertEquals(0, updCnts.length, "Invalid update counts size");
- assertThat(e.getMessage(), containsString("Invalid SQL statement
type"));
+ assertThat(e.getMessage(), containsString("Statement of type
\"Query\" is not allowed in current context"));
assertEquals(SqlStateCode.INTERNAL_ERROR, e.getSQLState(),
"Invalid SQL state.");
assertEquals(IgniteQueryErrorCode.UNKNOWN, e.getErrorCode(),
"Invalid error code.");
@@ -310,7 +310,7 @@ public class ItJdbcBatchSelfTest extends
AbstractJdbcSelfTest {
BatchUpdateException e = assertThrowsSqlException(
BatchUpdateException.class,
- "Invalid SQL statement type",
+ "Statement of type \"Query\" is not allowed in current
context",
stmt::executeBatch);
int[] updCnts = e.getUpdateCounts();
@@ -941,19 +941,19 @@ public class ItJdbcBatchSelfTest extends
AbstractJdbcSelfTest {
private static List<Arguments> forbiddenStatements() {
return List.of(
Arguments.of("SELECT * FROM Person",
- "Invalid SQL statement type."),
+ "Statement of type \"Query\" is not allowed in current
context"),
Arguments.of("EXPLAIN PLAN FOR DELETE FROM Person",
- "Invalid SQL statement type."),
+ "Statement of type \"Explain\" is not allowed in
current context"),
Arguments.of("START TRANSACTION",
- "Invalid SQL statement type. Expected [DML, DDL, KILL]
but got TX_CONTROL."),
+ "Statement of type \"Transaction control statement\"
is not allowed in current context"),
Arguments.of("COMMIT",
- "Invalid SQL statement type. Expected [DML, DDL, KILL]
but got TX_CONTROL."),
+ "Statement of type \"Transaction control statement\"
is not allowed in current context"),
Arguments.of("START TRANSACTION; COMMIT",
- "Invalid SQL statement type. Expected [DML, DDL, KILL]
but got TX_CONTROL.")
+ "Statement of type \"Transaction control statement\"
is not allowed in current context")
);
}
}
diff --git
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcKillCommandTest.java
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcKillCommandTest.java
index 76a162bcfc8..733e363af3c 100644
---
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcKillCommandTest.java
+++
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcKillCommandTest.java
@@ -79,7 +79,7 @@ public class ItJdbcKillCommandTest extends
AbstractJdbcSelfTest {
public void killUsingExecuteQueryIsForbidden() throws SQLException {
try (Statement stmt = conn.createStatement()) {
//noinspection ThrowableNotThrown
- assertThrowsSqlException("Invalid SQL statement type.",
+ assertThrowsSqlException("Statement of type \"Kill\" is not
allowed in current context",
() -> stmt.executeQuery("KILL QUERY '" + UUID.randomUUID()
+ "'")
);
}
diff --git
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
index e2f022ec48b..e23e57da14c 100644
---
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
+++
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
@@ -510,7 +510,7 @@ public class ItJdbcStatementSelfTest extends
ItJdbcAbstractStatementSelfTest {
final String sqlText = "select * from TEST;";
assertThrowsSqlException(
- "Invalid SQL statement type",
+ "Statement of type \"Query\" is not allowed in current
context",
() -> stmt.executeUpdate(sqlText));
}
@@ -786,7 +786,7 @@ public class ItJdbcStatementSelfTest extends
ItJdbcAbstractStatementSelfTest {
stmt.executeQuery("select 1;");
assertThrowsSqlException(
- "Invalid SQL statement type",
+ "Statement of type \"Query\" is not allowed in current
context",
() -> stmt.executeUpdate("select 1;")
);
@@ -796,7 +796,7 @@ public class ItJdbcStatementSelfTest extends
ItJdbcAbstractStatementSelfTest {
@Test
public void testStatementTypeMismatchUpdate() throws Exception {
assertThrowsSqlException(
- "Invalid SQL statement type",
+ "Statement of type \"DML\" is not allowed in current context",
() -> stmt.executeQuery("update TEST set NAME='28' where ID=1")
);
diff --git a/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
b/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
index c5ff7b5277f..51e0e8d7042 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
@@ -759,7 +759,7 @@ namespace Apache.Ignite.Tests.Sql
var ex = Assert.ThrowsAsync<SqlBatchException>(
async () => await Client.Sql.ExecuteBatchAsync(null, "select
1", [[1]]));
- Assert.AreEqual("Invalid SQL statement type. Expected [DML] but
got QUERY.", ex.Message);
+ Assert.AreEqual("Statement of type \"Query\" is not allowed in
current context [allowedTypes=[DML]].", ex.Message);
}
[Test]
diff --git
a/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/sql/ItSqlQueryControllerTest.java
b/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/sql/ItSqlQueryControllerTest.java
index a700517cb8c..05a218e0f02 100644
---
a/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/sql/ItSqlQueryControllerTest.java
+++
b/modules/rest/src/integrationTest/java/org/apache/ignite/internal/rest/sql/ItSqlQueryControllerTest.java
@@ -73,7 +73,7 @@ public class ItSqlQueryControllerTest extends
ClusterPerClassIntegrationTest {
assertThat(queryInfo, notNullValue());
assertThat(queryInfo.schema(), is("PUBLIC"));
- assertThat(queryInfo.type(), is("QUERY"));
+ assertThat(queryInfo.type(), is("Query"));
}
}
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMultistatementSqlTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMultistatementSqlTest.java
index 32e93d14e77..8e381b20d80 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMultistatementSqlTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMultistatementSqlTest.java
@@ -233,7 +233,7 @@ public class ItThinClientMultistatementSqlTest extends
ItAbstractThinClientTest
assertThrowsSqlException(
STMT_VALIDATION_ERR,
- "Invalid SQL statement type.",
+ "Statement of type \"Transaction control statement\" is
not allowed in current context",
() -> runSql((Transaction) null, null, modifiers, query)
);
}
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
index 1e2ec681cfc..ad1bd9371ab 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
@@ -782,13 +782,13 @@ public class ItThinClientSqlTest extends
ItAbstractThinClientTest {
IgniteTestUtils.assertThrows(
SqlException.class,
() -> check.accept(ddlStatement, selectType),
- "Invalid SQL statement type"
+ "Statement of type \"DDL\" is not allowed in current
context"
);
IgniteTestUtils.assertThrows(
SqlException.class,
() -> check.accept(ddlStatement, dmlType),
- "Invalid SQL statement type"
+ "Statement of type \"DDL\" is not allowed in current
context"
);
}
@@ -797,13 +797,13 @@ public class ItThinClientSqlTest extends
ItAbstractThinClientTest {
IgniteTestUtils.assertThrows(
SqlException.class,
() -> check.accept(dmlStatement, selectType),
- "Invalid SQL statement type"
+ "Statement of type \"DML\" is not allowed in current
context"
);
IgniteTestUtils.assertThrows(
SqlException.class,
() -> check.accept(dmlStatement, ddlType),
- "Invalid SQL statement type"
+ "Statement of type \"DML\" is not allowed in current
context"
);
}
@@ -812,13 +812,13 @@ public class ItThinClientSqlTest extends
ItAbstractThinClientTest {
IgniteTestUtils.assertThrows(
SqlException.class,
() -> check.accept(selectStatement, dmlType),
- "Invalid SQL statement type"
+ "Statement of type \"Query\" is not allowed in current
context"
);
IgniteTestUtils.assertThrows(
SqlException.class,
() -> check.accept(selectStatement, ddlType),
- "Invalid SQL statement type"
+ "Statement of type \"Query\" is not allowed in current
context"
);
}
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java
index 9944f2e6a3c..f79760dca34 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java
@@ -627,13 +627,13 @@ public abstract class ItSqlApiBaseTest extends
BaseSqlIntegrationTest {
assertThrowsSqlException(
SqlBatchException.class,
Sql.STMT_VALIDATION_ERR,
- "Invalid SQL statement type",
+ "Statement of type \"Query\" is not allowed in current
context",
() -> executeBatch("SELECT * FROM TEST", args));
assertThrowsSqlException(
SqlBatchException.class,
Sql.STMT_VALIDATION_ERR,
- "Invalid SQL statement type",
+ "Statement of type \"DDL\" is not allowed in current context",
() -> executeBatch("CREATE TABLE TEST1(ID INT PRIMARY KEY,
VAL0 INT)", args));
// Check that statement parameters taken into account.
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java
index 3d3f630f0f4..3f8f79b111e 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java
@@ -349,13 +349,13 @@ public class ItSqlMultiStatementTest extends
BaseSqlMultiStatementTest {
assertThrowsSqlException(
STMT_VALIDATION_ERR,
- "Invalid SQL statement type. Expected [QUERY] but got DML.",
+ "Statement of type \"DML\" is not allowed in current context",
() -> runner.apply(properties, "UPDATE xxx SET id = 1; SELECT
1;")
);
assertThrowsSqlException(
STMT_VALIDATION_ERR,
- "Invalid SQL statement type. Expected [QUERY] but got
TX_CONTROL.",
+ "Statement of type \"Transaction control statement\" is not
allowed in current context",
() -> runner.apply(properties, "START TRANSACTION; SELECT 1;
COMMIT;")
);
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlQueryEventLogTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlQueryEventLogTest.java
index 0c39a87125c..973f4bf5a91 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlQueryEventLogTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlQueryEventLogTest.java
@@ -395,7 +395,7 @@ public class ItSqlQueryEventLogTest extends
BaseSqlIntegrationTest {
fieldsChecker.verify(FieldNames.SCHEMA, "PUBLIC");
fieldsChecker.verify(FieldNames.PARENT_ID, parentId);
fieldsChecker.verify(FieldNames.STATEMENT_NUMBER, statementNum);
- fieldsChecker.verify(FieldNames.TYPE, queryType == null ? null :
queryType.name());
+ fieldsChecker.verify(FieldNames.TYPE, queryType == null ? null :
queryType.displayName());
fieldsChecker.matches(FieldNames.START_TIME, "\\d+");
if (checkImplicitTx) {
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItCachedQueryPlansSystemViewTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItCachedQueryPlansSystemViewTest.java
index 541ee48e5b9..84e6a8c792a 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItCachedQueryPlansSystemViewTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItCachedQueryPlansSystemViewTest.java
@@ -91,10 +91,10 @@ public class ItCachedQueryPlansSystemViewTest extends
AbstractSystemViewTest {
+ "FROM (VALUES ROW(1, 2)) AS `T` (`X`, `Y`)", "DML",
plan4)
.returns(node1, v2, "PUBLIC", "SELECT *\n"
+ "FROM `TEST_TABLE`\n"
- + "WHERE `ID` = 1", "QUERY", plan5)
- .returns(node1, v1, "PUBLIC", "SELECT 1", "QUERY", plan1)
- .returns(node2, v1, "PUBLIC", "SELECT 2", "QUERY", plan2)
- .returns(node1, v2, "TEST_SCHEMA", "SELECT 3", "QUERY", plan3)
+ + "WHERE `ID` = 1", "Query", plan5)
+ .returns(node1, v1, "PUBLIC", "SELECT 1", "Query", plan1)
+ .returns(node2, v1, "PUBLIC", "SELECT 2", "Query", plan2)
+ .returns(node1, v2, "TEST_SCHEMA", "SELECT 3", "Query", plan3)
.ordered()
.check();
}
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
index 0bf3d407015..114bd0dd725 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/systemviews/ItSqlQueriesSystemViewTest.java
@@ -128,7 +128,7 @@ public class ItSqlQueriesSystemViewTest extends
AbstractSystemViewTest {
assertThat(res, hasSize(1));
verifyQueryInfo(res.get(0), initiator.name(), schema, query,
tsBefore, tsAfter,
- equalTo(tx.id().toString()), SqlQueryType.QUERY.name(),
null);
+ equalTo(tx.id().toString()),
SqlQueryType.QUERY.displayName(), null);
} finally {
tx.rollback();
}
@@ -146,7 +146,7 @@ public class ItSqlQueriesSystemViewTest extends
AbstractSystemViewTest {
assertThat(res, hasSize(1));
verifyQueryInfo(res.get(0), initiator.name(), schema, query,
tsBefore, tsAfter,
- hasLength(36), SqlQueryType.QUERY.name(), null);
+ hasLength(36), SqlQueryType.QUERY.displayName(), null);
}
}
@@ -198,7 +198,7 @@ public class ItSqlQueriesSystemViewTest extends
AbstractSystemViewTest {
List<Object> row = res.get(i);
verifyQueryInfo(row, initiator.name(),
SqlCommon.DEFAULT_SCHEMA_NAME, expectedQueries.get(i), timeBefore, timeAfter,
- hasLength(36), (i == 1 ? SqlQueryType.DML :
SqlQueryType.QUERY).name(), i);
+ hasLength(36), (i == 1 ? SqlQueryType.DML :
SqlQueryType.QUERY).displayName(), i);
transactionIds.add((String) row.get(7));
}
@@ -238,7 +238,7 @@ public class ItSqlQueriesSystemViewTest extends
AbstractSystemViewTest {
waitUntilRunningQueriesCount(is(4));
String sql = "SELECT * FROM SYSTEM.SQL_QUERIES "
- + "WHERE PARENT_ID=(SELECT ID FROM SYSTEM.SQL_QUERIES WHERE
TYPE='SCRIPT') "
+ + "WHERE PARENT_ID=(SELECT ID FROM SYSTEM.SQL_QUERIES WHERE
TYPE='Script') "
+ "ORDER BY STATEMENT_NUM";
List<List<Object>> res = sql(0, sql);
@@ -249,13 +249,13 @@ public class ItSqlQueriesSystemViewTest extends
AbstractSystemViewTest {
// Expecting 3 queries with same transaction.
verifyQueryInfo(row, initiator.name(), SqlCommon.DEFAULT_SCHEMA_NAME,
"INSERT INTO test VALUES (0), (1);",
- timeBefore, timeAfter, hasLength(36), SqlQueryType.DML.name(),
1);
+ timeBefore, timeAfter, hasLength(36),
SqlQueryType.DML.displayName(), 1);
verifyQueryInfo(res.get(1), initiator.name(),
SqlCommon.DEFAULT_SCHEMA_NAME, "SELECT * FROM test;",
- timeBefore, timeAfter, equalTo((String) row.get(7)),
SqlQueryType.QUERY.name(), 3);
+ timeBefore, timeAfter, equalTo((String) row.get(7)),
SqlQueryType.QUERY.displayName(), 3);
verifyQueryInfo(res.get(2), initiator.name(),
SqlCommon.DEFAULT_SCHEMA_NAME, "INSERT INTO test VALUES (2), (3);",
- timeBefore, timeAfter, equalTo((String) row.get(7)),
SqlQueryType.DML.name(), 4);
+ timeBefore, timeAfter, equalTo((String) row.get(7)),
SqlQueryType.DML.displayName(), 4);
for (AsyncSqlCursor<InternalSqlRow> cursor : cursors) {
await(cursor.closeAsync());
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryEventsFactory.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryEventsFactory.java
index 6876e05ef2f..1ff9e06ad00 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryEventsFactory.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/QueryEventsFactory.java
@@ -59,7 +59,7 @@ public class QueryEventsFactory {
SqlQueryType queryType = queryInfo.queryType();
- fields.put(FieldNames.TYPE, queryType == null ? null :
queryType.name());
+ fields.put(FieldNames.TYPE, queryType == null ? null :
queryType.displayName());
Throwable error = queryInfo.error();
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueriesViewProvider.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueriesViewProvider.java
index 072edc4bec1..b692eafdca6 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueriesViewProvider.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueriesViewProvider.java
@@ -41,7 +41,7 @@ import org.jetbrains.annotations.Nullable;
/** Provider that creates system view exposing queries running on a node. */
public class SqlQueriesViewProvider {
- public static final String SCRIPT_QUERY_TYPE = "SCRIPT";
+ public static final String SCRIPT_QUERY_TYPE = "Script";
private static final NativeType TIMESTAMP_TYPE =
NativeTypes.timestamp(NativeTypes.MAX_TIME_PRECISION);
@@ -154,7 +154,7 @@ public class SqlQueriesViewProvider {
}
private static String mapQueryType(SqlQueryType type) {
- return type.toString();
+ return type.displayName();
}
private static @Nullable String mapQueryPlan(QueryPlan plan) {
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/fsm/ValidationHelper.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/fsm/ValidationHelper.java
index 5c948ddd963..60e0f433e86 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/fsm/ValidationHelper.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/fsm/ValidationHelper.java
@@ -21,6 +21,7 @@ import static
org.apache.ignite.internal.lang.IgniteStringFormatter.format;
import static org.apache.ignite.lang.ErrorGroups.Sql.STMT_VALIDATION_ERR;
import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.ignite.internal.sql.engine.SqlProperties;
import org.apache.ignite.internal.sql.engine.SqlQueryType;
import org.apache.ignite.internal.sql.engine.sql.ParsedResult;
@@ -75,7 +76,13 @@ public final class ValidationHelper {
SqlQueryType queryType
) {
if (!allowedTypes.contains(queryType)) {
- String message = format("Invalid SQL statement type. Expected {}
but got {}.", allowedTypes, queryType);
+ String allowedTypesString = allowedTypes.stream()
+ .map(SqlQueryType::displayName)
+ .collect(Collectors.joining(", ", "[", "]"));
+
+ String message = format(
+ "Statement of type \"{}\" is not allowed in current
context [allowedTypes={}].",
+ queryType.displayName(), allowedTypesString);
throw new SqlException(STMT_VALIDATION_ERR, message);
}