You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2025/12/15 15:23:03 UTC
(ignite-3) branch ignite-26420 created (now b5cfe21abee)
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a change to branch ignite-26420
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
at b5cfe21abee minor
This branch includes the following new commits:
new b5cfe21abee minor
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(ignite-3) 01/01: minor
Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-26420
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit b5cfe21abeea31591e63ae5977c83cb31421cfb4
Author: amashenkov <am...@apache.org>
AuthorDate: Mon Dec 15 18:22:49 2025 +0300
minor
---
.../handler/requests/sql/ClientSqlCommon.java | 21 +++++----
.../ignite/internal/sql/ColumnMetadataImpl.java | 15 ++++--
.../ignite/internal/sql/ResultSetMetadataImpl.java | 2 +-
.../org/apache/ignite/internal/sql/SqlCommon.java | 8 ++++
.../jdbc/JdbcResultSetMetadataSelfTest.java | 12 ++---
.../runner/app/client/ItThinClientSqlTest.java | 4 +-
.../ignite/internal/sql/engine/ItMetadataTest.java | 55 +++++++++++-----------
7 files changed, 69 insertions(+), 48 deletions(-)
diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
index 90978d1ef93..7c842d51b96 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
@@ -17,6 +17,8 @@
package org.apache.ignite.client.handler.requests.sql;
+import static org.apache.ignite.lang.util.IgniteNameUtils.parseIdentifier;
+
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
@@ -37,6 +39,7 @@ import org.apache.ignite.internal.client.proto.ClientMessagePacker;
import org.apache.ignite.internal.client.sql.QueryModifier;
import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
import org.apache.ignite.internal.lang.IgniteInternalException;
+import org.apache.ignite.internal.sql.SqlCommon;
import org.apache.ignite.internal.sql.api.AsyncResultSetImpl;
import org.apache.ignite.internal.sql.engine.AsyncSqlCursor;
import org.apache.ignite.internal.sql.engine.InternalSqlRow;
@@ -188,7 +191,7 @@ class ClientSqlCommon {
int fieldsNum = origin == null ? 6 : 9;
out.packInt(fieldsNum);
- out.packString(col.name());
+ out.packString(SqlCommon.normalizedColumnName(col));
out.packBoolean(col.nullable());
out.packInt(col.type().id());
out.packInt(col.scale());
@@ -204,23 +207,25 @@ class ClientSqlCommon {
if (col.name().equals(origin.columnName())) {
out.packNil();
} else {
- out.packString(origin.columnName());
+ out.packString(parseIdentifier(origin.columnName()));
}
- Integer schemaIdx = schemas.get(origin.schemaName());
+ String schemaName = parseIdentifier(origin.schemaName());
+ Integer schemaIdx = schemas.get(schemaName);
if (schemaIdx == null) {
- schemas.put(origin.schemaName(), i);
- out.packString(origin.schemaName());
+ schemas.put(schemaName, i);
+ out.packString(schemaName);
} else {
out.packInt(schemaIdx);
}
- Integer tableIdx = tables.get(origin.tableName());
+ String tableName = parseIdentifier(origin.tableName());
+ Integer tableIdx = tables.get(tableName);
if (tableIdx == null) {
- tables.put(origin.tableName(), i);
- out.packString(origin.tableName());
+ tables.put(tableName, i);
+ out.packString(tableName);
} else {
out.packInt(tableIdx);
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/sql/ColumnMetadataImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/ColumnMetadataImpl.java
index 2498bb6d427..c4192e50f04 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/sql/ColumnMetadataImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/ColumnMetadataImpl.java
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.sql;
+import static org.apache.ignite.lang.util.IgniteNameUtils.quoteIfNeeded;
+
import java.util.List;
import org.apache.ignite.internal.tostring.S;
import org.apache.ignite.sql.ColumnMetadata;
@@ -85,7 +87,7 @@ public class ColumnMetadataImpl implements ColumnMetadata {
/** {@inheritDoc} */
@Override
public String name() {
- return name;
+ return name.isEmpty() ? name : quoteIfNeeded(name);
}
/** {@inheritDoc} */
@@ -124,6 +126,11 @@ public class ColumnMetadataImpl implements ColumnMetadata {
return origin;
}
+ /** Returns normalized name. */
+ String normalizedName() {
+ return name;
+ }
+
/** {@inheritDoc} */
@Override
public String toString() {
@@ -155,19 +162,19 @@ public class ColumnMetadataImpl implements ColumnMetadata {
/** {@inheritDoc} */
@Override
public String schemaName() {
- return schemaName;
+ return quoteIfNeeded(schemaName);
}
/** {@inheritDoc} */
@Override
public String tableName() {
- return tableName;
+ return quoteIfNeeded(tableName);
}
/** {@inheritDoc} */
@Override
public String columnName() {
- return columnName;
+ return columnName != null ? quoteIfNeeded(columnName) : null;
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/sql/ResultSetMetadataImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/ResultSetMetadataImpl.java
index cb222d3e374..a9c79613869 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/sql/ResultSetMetadataImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/ResultSetMetadataImpl.java
@@ -52,7 +52,7 @@ public class ResultSetMetadataImpl implements ResultSetMetadata {
for (int i = 0; i < columns.size(); i++) {
ColumnMetadata column = columns.get(i);
- columnsIndices.put(column.name(), i);
+ columnsIndices.put(SqlCommon.normalizedColumnName(column), i);
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommon.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommon.java
index 2d398d15741..39abaf3e693 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommon.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommon.java
@@ -17,8 +17,11 @@
package org.apache.ignite.internal.sql;
+import static org.apache.ignite.lang.util.IgniteNameUtils.parseIdentifier;
+
import java.time.ZoneId;
import org.apache.ignite.lang.util.IgniteNameUtils;
+import org.apache.ignite.sql.ColumnMetadata;
import org.apache.ignite.table.QualifiedName;
/**
@@ -32,4 +35,9 @@ public final class SqlCommon {
public static final int DEFAULT_PAGE_SIZE = 1024;
/** Default time-zone ID. */
public static final ZoneId DEFAULT_TIME_ZONE_ID = ZoneId.of("UTC");
+
+ /** Return normalized column name. */
+ public static String normalizedColumnName(ColumnMetadata col) {
+ return col instanceof ColumnMetadataImpl ? ((ColumnMetadataImpl) col).normalizedName() : parseIdentifier(col.name());
+ }
}
diff --git a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadataSelfTest.java b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadataSelfTest.java
index 8ff8496b510..e493854964c 100644
--- a/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadataSelfTest.java
+++ b/modules/jdbc/src/test/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadataSelfTest.java
@@ -112,8 +112,8 @@ public class JdbcResultSetMetadataSelfTest {
));
assertEquals("LABEL1", md.getColumnLabel(1));
- assertEquals("label2", md.getColumnLabel(2));
- assertEquals("Label3", md.getColumnLabel(3));
+ assertEquals("\"label2\"", md.getColumnLabel(2));
+ assertEquals("\"Label3\"", md.getColumnLabel(3));
}
@Test
@@ -125,8 +125,8 @@ public class JdbcResultSetMetadataSelfTest {
));
assertEquals("COLUMN1", md.getColumnName(1));
- assertEquals("Column2", md.getColumnName(2));
- assertEquals("Column", md.getColumnName(3));
+ assertEquals("\"Column2\"", md.getColumnName(2));
+ assertEquals("\"Column\"", md.getColumnName(3));
}
@Test
@@ -139,7 +139,7 @@ public class JdbcResultSetMetadataSelfTest {
assertNull(md.getSchemaName(1));
assertEquals("S", md.getSchemaName(2));
- assertEquals("Schema", md.getSchemaName(3));
+ assertEquals("\"Schema\"", md.getSchemaName(3));
}
@Test
@@ -152,7 +152,7 @@ public class JdbcResultSetMetadataSelfTest {
assertNull(md.getTableName(1));
assertEquals("T", md.getTableName(2));
- assertEquals("Table", md.getTableName(3));
+ assertEquals("\"Table\"", md.getTableName(3));
}
@Test
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 e2db70b5314..2bcad12d5e0 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
@@ -246,7 +246,7 @@ public class ItThinClientSqlTest extends ItAbstractThinClientTest {
assertEquals(3, columns.size());
assertEquals("MYVALUE", columns.get(0).name());
assertEquals("ID", columns.get(1).name());
- assertEquals("ID + 1", columns.get(2).name());
+ assertEquals("\"ID + 1\"", columns.get(2).name());
var rows = new ArrayList<SqlRow>();
selectRes.currentPage().forEach(rows::add);
@@ -328,7 +328,7 @@ public class ItThinClientSqlTest extends ItAbstractThinClientTest {
assertEquals("TESTEXECUTEDDLDML", columns.get(1).origin().tableName());
assertFalse(columns.get(1).nullable());
- assertEquals("ID + 1", columns.get(2).name());
+ assertEquals("\"ID + 1\"", columns.get(2).name());
assertNull(columns.get(2).origin());
var rows = new ArrayList<SqlRow>();
diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java
index 9326f6d4a4d..b31dc55e55d 100644
--- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java
+++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java
@@ -52,7 +52,7 @@ public class ItMetadataTest extends BaseSqlIntegrationTest {
@Test
public void trimColumnNames() {
String var300 = "'" + generate(() -> "X").limit(300).collect(joining()) + "'";
- String var256 = var300.substring(0, Math.min(var300.length(), MAX_LENGTH_OF_ALIASES));
+ String var256 = "\"" + var300.substring(0, Math.min(var300.length(), MAX_LENGTH_OF_ALIASES)) + "\"";
assertQuery("select " + var300 + " from person").columnNames(var256).check();
}
@@ -60,35 +60,36 @@ public class ItMetadataTest extends BaseSqlIntegrationTest {
@Test
public void columnNames() {
assertQuery("select (select count(*) from person), (select avg(salary) from person) from person")
- .columnNames("EXPR$0", "EXPR$1").check();
+ .columnNames("\"EXPR$0\"", "\"EXPR$1\"").check();
assertQuery("select (select count(*) from person) as subquery from person")
.columnNames("SUBQUERY").check();
assertQuery("select salary*2, salary*2 as \"SaLaRy\", salary/2, salary+2, salary-2, mod(salary, 2) from person")
- .columnNames("SALARY * 2", "SaLaRy", "SALARY / 2", "SALARY + 2", "SALARY - 2", "MOD(SALARY, 2)").check();
+ .columnNames("\"SALARY * 2\"", "\"SaLaRy\"", "\"SALARY / 2\"", "\"SALARY + 2\"", "\"SALARY - 2\"", "\"MOD(SALARY, 2)\"")
+ .check();
assertQuery("select salary*2 as first, salary/2 as LAst from person").columnNames("FIRST", "LAST").check();
assertQuery("select trim(name) tr_name from person").columnNames("TR_NAME").check();
- assertQuery("select trim(name) from person").columnNames("TRIM(BOTH ' ' FROM NAME)").check();
+ assertQuery("select trim(name) from person").columnNames("\"TRIM(BOTH ' ' FROM NAME)\"").check();
assertQuery("select ceil(salary), floor(salary), position('text' IN name) from person")
- .columnNames("CEIL(SALARY)", "FLOOR(SALARY)", "POSITION('text' IN NAME)").check();
+ .columnNames("\"CEIL(SALARY)\"", "\"FLOOR(SALARY)\"", "\"POSITION('text' IN NAME)\"").check();
- assertQuery("select count(*) from person").columnNames("COUNT(*)").check();
- assertQuery("select count(name) from person").columnNames("COUNT(NAME)").check();
- assertQuery("select max(salary) from person").columnNames("MAX(SALARY)").check();
- assertQuery("select min(salary) from person").columnNames("MIN(SALARY)").check();
- assertQuery("select aVg(salary) from person").columnNames("AVG(SALARY)").check();
- assertQuery("select sum(salary) from person").columnNames("SUM(SALARY)").check();
+ assertQuery("select count(*) from person").columnNames("\"COUNT(*)\"").check();
+ assertQuery("select count(name) from person").columnNames("\"COUNT(NAME)\"").check();
+ assertQuery("select max(salary) from person").columnNames("\"MAX(SALARY)\"").check();
+ assertQuery("select min(salary) from person").columnNames("\"MIN(SALARY)\"").check();
+ assertQuery("select aVg(salary) from person").columnNames("\"AVG(SALARY)\"").check();
+ assertQuery("select sum(salary) from person").columnNames("\"SUM(SALARY)\"").check();
- assertQuery("select typeOf(salary) from person").columnNames("TYPEOF(SALARY)").check();
- assertQuery("select typeOf(null) from person").columnNames("TYPEOF(NULL)").check();
+ assertQuery("select typeOf(salary) from person").columnNames("\"TYPEOF(SALARY)\"").check();
+ assertQuery("select typeOf(null) from person").columnNames("\"TYPEOF(NULL)\"").check();
- assertQuery("select salary, count(name) from person group by salary").columnNames("SALARY", "COUNT(NAME)").check();
+ assertQuery("select salary, count(name) from person group by salary").columnNames("SALARY", "\"COUNT(NAME)\"").check();
- assertQuery("select 1, -1, 'some string' from person").columnNames("1", "-1", "'some string'").check();
+ assertQuery("select 1, -1, 'some string' from person").columnNames("\"1\"", "\"-1\"", "\"'some string'\"").check();
// id, name, salary
- assertQuery("SELECT SUM(sal) FROM person as p (i, n, sal)").columnNames("SUM(SAL)").check();
+ assertQuery("SELECT SUM(sal) FROM person as p (i, n, sal)").columnNames("\"SUM(SAL)\"").check();
}
@Test
@@ -106,8 +107,8 @@ public class ItMetadataTest extends BaseSqlIntegrationTest {
new MetadataMatcher().name("TID").type(ColumnType.INT8),
new MetadataMatcher().name("SID").type(ColumnType.INT16),
new MetadataMatcher().name("VID").type(ColumnType.STRING),
- new MetadataMatcher().name("ID :: INTERVAL INTERVAL_HOUR").type(ColumnType.DURATION),
- new MetadataMatcher().name("ID :: INTERVAL INTERVAL_YEAR").type(ColumnType.PERIOD)
+ new MetadataMatcher().name("\"ID :: INTERVAL INTERVAL_HOUR\"").type(ColumnType.DURATION),
+ new MetadataMatcher().name("\"ID :: INTERVAL INTERVAL_YEAR\"").type(ColumnType.PERIOD)
).check();
}
@@ -117,23 +118,23 @@ public class ItMetadataTest extends BaseSqlIntegrationTest {
sql("CREATE TABLE column_order1 (double_c DOUBLE, long_c BIGINT PRIMARY KEY, string_c VARCHAR)");
assertQuery("select *, double_c, double_c * 2 from column_order")
- .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "DOUBLE_C", "DOUBLE_C * 2")
+ .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "DOUBLE_C", "\"DOUBLE_C * 2\"")
.check();
assertQuery("select *, double_c as J, double_c * 2, double_c as J2 from column_order")
- .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "J", "DOUBLE_C * 2", "J2")
+ .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "J", "\"DOUBLE_C * 2\"", "J2")
.check();
assertQuery("select double_c * 2, * from column_order")
- .columnNames("DOUBLE_C * 2", "DOUBLE_C", "LONG_C", "STRING_C", "INT_C")
+ .columnNames("\"DOUBLE_C * 2\"", "DOUBLE_C", "LONG_C", "STRING_C", "INT_C")
.check();
assertQuery("select *, *, double_c * 2 from column_order")
- .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "DOUBLE_C0", "LONG_C0", "STRING_C0", "INT_C0", "DOUBLE_C * 2")
+ .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "DOUBLE_C0", "LONG_C0", "STRING_C0", "INT_C0", "\"DOUBLE_C * 2\"")
.check();
assertQuery("select *, double_c * 2, double_c * 2, * from column_order")
- .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "DOUBLE_C * 2", "DOUBLE_C * 2", "DOUBLE_C0", "LONG_C0",
+ .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "\"DOUBLE_C * 2\"", "\"DOUBLE_C * 2\"", "DOUBLE_C0", "LONG_C0",
"STRING_C0", "INT_C0").check();
assertQuery("select * from column_order")
@@ -141,12 +142,12 @@ public class ItMetadataTest extends BaseSqlIntegrationTest {
.check();
assertQuery("select a.*, a.double_c * 2, b.* from column_order a, column_order1 b where a.double_c = b.double_c")
- .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "A.DOUBLE_C * 2", "DOUBLE_C0", "LONG_C0", "STRING_C0")
+ .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "\"A.DOUBLE_C * 2\"", "DOUBLE_C0", "LONG_C0", "STRING_C0")
.check();
assertQuery("select a.*, a.double_c * 2, a.double_c * 2 as J, b.* from column_order a, column_order1 b "
+ "where a.double_c = b.double_c")
- .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "A.DOUBLE_C * 2", "J", "DOUBLE_C0", "LONG_C0", "STRING_C0")
+ .columnNames("DOUBLE_C", "LONG_C", "STRING_C", "INT_C", "\"A.DOUBLE_C * 2\"", "J", "DOUBLE_C0", "LONG_C0", "STRING_C0")
.check();
}
@@ -265,9 +266,9 @@ public class ItMetadataTest extends BaseSqlIntegrationTest {
assertQuery("select * from sens")
.columnMetadata(
- new MetadataMatcher().name("Col1"),
+ new MetadataMatcher().name("\"Col1\""),
new MetadataMatcher().name("COL2"),
- new MetadataMatcher().name("Col3.a"),
+ new MetadataMatcher().name("\"Col3.a\""),
new MetadataMatcher().name("COL4"))
.check();