This is an automated email from the ASF dual-hosted git repository.
ppa 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 e3981e618ff IGNITE-27635 Sql. Fixed a confusing error message when
validating an INSERT with incorrect number of arguments in the VALUES statement
(#7662)
e3981e618ff is described below
commit e3981e618ff9dc1c3866a49487a9e78bfe3b6452
Author: Max Zhuravkov <[email protected]>
AuthorDate: Thu Feb 26 16:50:48 2026 +0200
IGNITE-27635 Sql. Fixed a confusing error message when validating an INSERT
with incorrect number of arguments in the VALUES statement (#7662)
---
.../ignite/internal/sql/engine/ItDmlTest.java | 29 ++++++++++++++++++++++
.../sql/engine/prepare/IgniteSqlValidator.java | 10 +++++++-
2 files changed, 38 insertions(+), 1 deletion(-)
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
index 1e39144ac78..f2011008192 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
@@ -1150,6 +1150,35 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
.check();
}
+ @Test
+ public void rejectInvalidColumnNumberOnInsert() {
+ sql("CREATE TABLE test1(id INT PRIMARY KEY, val INT);");
+
+ assertThrowsSqlException(
+ Sql.STMT_VALIDATION_ERR,
+ "Number of INSERT target columns (2) does not equal number of
source items (1)",
+ () -> sql("INSERT INTO test1 VALUES (1)")
+ );
+
+ assertThrowsSqlException(
+ Sql.STMT_VALIDATION_ERR,
+ "Number of INSERT target columns (2) does not equal number of
source items (3)",
+ () -> sql("INSERT INTO test1 VALUES (1, 2, 3)")
+ );
+
+ assertThrowsSqlException(
+ Sql.STMT_VALIDATION_ERR,
+ "Number of INSERT target columns (1) does not equal number of
source items (2)",
+ () -> sql("INSERT INTO test1(val) VALUES (1, 2)")
+ );
+
+ assertThrowsSqlException(
+ Sql.STMT_VALIDATION_ERR,
+ "Number of INSERT target columns (2) does not equal number of
source items (3)",
+ () -> sql("INSERT INTO test1(id, val) VALUES (1, 2, 3)")
+ );
+ }
+
private static Stream<Arguments> decimalLimits() {
return Stream.of(
arguments(SqlTypeName.BIGINT.getName(), Long.MAX_VALUE,
Long.MIN_VALUE),
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
index 93df10bd58d..3d37d43b425 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/IgniteSqlValidator.java
@@ -241,9 +241,17 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
super.validateQuery(node, scope, targetRowType);
if (node.getKind() == SqlKind.VALUES) {
+ // The type must have been derived at this point.
+ RelDataType valuesType = getValidatedNodeTypeIfKnown(node);
+ if (valuesType == null) {
+ throw new AssertionError("Type for a VALUEs row should have
been resolved");
+ }
+ if (valuesType.getFieldList().size() !=
targetRowType.getFieldList().size()) {
+ // If rows do not match, a validation error will be risen
later.
+ return;
+ }
// Row type for VALUES node derived as least restrictive type
among all the tuples.
// We have to make sure that all the tuples indeed match the
derived type.
- RelDataType valuesType = deriveType(scope, node);
for (int i = 0; i < targetRowType.getFieldCount(); i++) {
getTypeCoercion().rowTypeCoercion(scope, node, i,
valuesType.getFieldList().get(i).getType());
}