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 2023/08/10 11:50:06 UTC

[ignite-3] 01/01: wip

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-20192
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 9c2a37b81a629d1b700d66522819e874faefb632
Author: amashenkov <an...@gmail.com>
AuthorDate: Thu Aug 10 14:49:57 2023 +0300

    wip
---
 .../apache/ignite/internal/catalog/commands/CatalogUtils.java    | 9 ++++++++-
 .../apache/ignite/internal/catalog/CatalogManagerSelfTest.java   | 3 ++-
 modules/platforms/cpp/tests/odbc-test/meta_queries_test.cpp      | 2 +-
 .../dotnet/Apache.Ignite.Tests/Sql/IgniteDbDataReaderTests.cs    | 2 +-
 modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs     | 2 +-
 .../ignite/internal/runner/app/PlatformTestNodeRunner.java       | 4 ++--
 .../ignite/internal/runner/app/client/ItThinClientSqlTest.java   | 3 ++-
 .../apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java | 3 ++-
 .../org/apache/ignite/internal/sql/engine/ItMetadataTest.java    | 4 ++--
 .../apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java  | 4 ++--
 modules/schema/build.gradle                                      | 1 +
 .../ignite/internal/schema/testutils/definition/ColumnType.java  | 7 +++++--
 .../ignite/internal/sql/engine/type/IgniteTypeFactory.java       | 5 +++--
 13 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
index 8353637f9a..63329bc423 100644
--- a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
+++ b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CatalogUtils.java
@@ -124,6 +124,13 @@ public class CatalogUtils {
      */
     public static final int DEFAULT_LENGTH = 1;
 
+    /**
+     * Max length for VARCHAR and VARBINARY is implementation defined.
+     *
+     * <p>SQL`16 part 2 section 6.1 syntax rule 8
+     */
+    public static final int DEFAULT_VARLEN_LENGTH = 0xffff;
+
     private static final Map<ColumnType, Set<ColumnType>> ALTER_COLUMN_TYPE_TRANSITIONS = new EnumMap<>(ColumnType.class);
 
     static {
@@ -257,7 +264,7 @@ public class CatalogUtils {
             case BITMASK:
             case STRING:
             case BYTE_ARRAY:
-                return Integer.MAX_VALUE;
+                return DEFAULT_VARLEN_LENGTH;
             default:
                 return Math.max(DEFAULT_LENGTH, defaultPrecision(columnType));
         }
diff --git a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java
index 8228d1dda9..1aea1c3584 100644
--- a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java
+++ b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerSelfTest.java
@@ -24,6 +24,7 @@ import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_ZONE_NAM
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_FILTER;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_PARTITION_COUNT;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_REPLICA_COUNT;
+import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_VARLEN_LENGTH;
 import static org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureExceptionMatcher.willThrow;
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureExceptionMatcher.willThrowFast;
@@ -363,7 +364,7 @@ public class CatalogManagerSelfTest extends BaseCatalogManagerTest {
         assertEquals(DefaultValue.Type.CONSTANT, column.defaultValue().type());
         assertEquals("Ignite!", ((DefaultValue.ConstantValue) column.defaultValue()).value());
 
-        assertEquals(Integer.MAX_VALUE, column.length());
+        assertEquals(DEFAULT_VARLEN_LENGTH, column.length());
         assertEquals(0, column.precision());
         assertEquals(0, column.scale());
     }
diff --git a/modules/platforms/cpp/tests/odbc-test/meta_queries_test.cpp b/modules/platforms/cpp/tests/odbc-test/meta_queries_test.cpp
index 6f0ccc480a..44ce7ed9c0 100644
--- a/modules/platforms/cpp/tests/odbc-test/meta_queries_test.cpp
+++ b/modules/platforms/cpp/tests/odbc-test/meta_queries_test.cpp
@@ -257,7 +257,7 @@ public:
         check(m_statement, 5, "CHAR1", SQL_VARCHAR, 3, 0, SQL_NULLABLE);
         check(m_statement, 6, "CHAR2", SQL_VARCHAR, 42, 0, SQL_NULLABLE);
         check(m_statement, 7, "CHAR3", SQL_VARCHAR, 1, 0, SQL_NO_NULLS);
-        check(m_statement, 8, "VCHAR", SQL_VARCHAR, 65536, 0, SQL_NULLABLE);
+        check(m_statement, 8, "VCHAR", SQL_VARCHAR, 65535, 0, SQL_NULLABLE);
     }
 
     void insert_test_string() {
diff --git a/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/IgniteDbDataReaderTests.cs b/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/IgniteDbDataReaderTests.cs
index 036e93f425..8479df3514 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/IgniteDbDataReaderTests.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/IgniteDbDataReaderTests.cs
@@ -399,7 +399,7 @@ public class IgniteDbDataReaderTests : IgniteTestsBase
         Assert.AreEqual(typeof(string), schema[1].DataType);
         Assert.AreEqual("varchar", schema[1].DataTypeName);
         Assert.IsTrue(schema[1].AllowDBNull);
-        Assert.AreEqual(65536, schema[1].NumericPrecision);
+        Assert.AreEqual(65535, schema[1].NumericPrecision);
         Assert.IsNull(schema[1].NumericScale);
         Assert.IsNotNull((schema[1] as IgniteDbColumn)?.ColumnMetadata);
     }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs b/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
index 1ae7b62c8f..8f5dcf91ab 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs
@@ -301,7 +301,7 @@ namespace Apache.Ignite.Tests.Sql
             Assert.IsTrue(columns[0].Nullable);
             Assert.AreEqual(ColumnType.String, columns[0].Type);
             Assert.AreEqual(int.MinValue, columns[0].Scale);
-            Assert.AreEqual(65536, columns[0].Precision);
+            Assert.AreEqual(65535, columns[0].Precision);
 
             Assert.AreEqual("ID", columns[1].Name);
             Assert.AreEqual("ID", columns[1].Origin!.ColumnName);
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
index ca7e03065a..d450bcdd96 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
@@ -39,6 +39,7 @@ import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.JobExecutionContext;
 import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.binarytuple.BinaryTupleReader;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.client.proto.ColumnTypeConverter;
 import org.apache.ignite.internal.configuration.BasicAuthenticationProviderChange;
 import org.apache.ignite.internal.configuration.SecurityConfiguration;
@@ -51,7 +52,6 @@ import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.internal.schema.testutils.SchemaConfigurationConverter;
 import org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders;
 import org.apache.ignite.internal.schema.testutils.definition.ColumnType;
-import org.apache.ignite.internal.schema.testutils.definition.ColumnType.TemporalColumnType;
 import org.apache.ignite.internal.schema.testutils.definition.TableDefinition;
 import org.apache.ignite.internal.table.RecordBinaryViewImpl;
 import org.apache.ignite.internal.table.distributed.TableManager;
@@ -271,7 +271,7 @@ public class PlatformTestNodeRunner {
                 SchemaConfigurationConverter.convert(schTbl, tblCh)
         ));
 
-        int maxTimePrecision = TemporalColumnType.MAX_TIME_PRECISION;
+        int maxTimePrecision = CatalogUtils.MAX_TIME_PRECISION;
 
         TableDefinition schTblAll = SchemaBuilders.tableBuilder(SCHEMA_NAME, TABLE_NAME_ALL_COLUMNS).columns(
                 SchemaBuilders.column(keyCol, ColumnType.INT64).build(),
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 c761752485..339309eb4b 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
@@ -34,6 +34,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CompletionException;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.lang.IgniteException;
 import org.apache.ignite.sql.ColumnMetadata;
 import org.apache.ignite.sql.ColumnType;
@@ -289,7 +290,7 @@ public class ItThinClientSqlTest extends ItAbstractThinClientTest {
         assertEquals(ColumnType.STRING, columns.get(0).type());
 
         assertEquals(ColumnMetadata.UNDEFINED_SCALE, columns.get(0).scale());
-        assertEquals(2 << 15, columns.get(0).precision());
+        assertEquals(CatalogUtils.DEFAULT_VARLEN_LENGTH, columns.get(0).precision());
 
         assertEquals("ID", columns.get(1).name());
         assertEquals("ID", columns.get(1).origin().columnName());
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java
index 694a28e8af..6f0d9d41c6 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java
@@ -53,6 +53,7 @@ import java.util.stream.IntStream;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 import javax.annotation.Nullable;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 import org.apache.ignite.internal.client.sql.ClientSql;
 import org.apache.ignite.internal.sql.api.ColumnMetadataImpl.ColumnOriginImpl;
 import org.apache.ignite.internal.sql.engine.ClusterPerClassIntegrationTest;
@@ -499,7 +500,7 @@ public class ItSqlAsynchronousApiTest extends ClusterPerClassIntegrationTest {
         checkMetadata(new ColumnMetadataImpl(
                         "COL1",
                         ColumnType.STRING,
-                        2 << 15,
+                        CatalogUtils.DEFAULT_VARLEN_LENGTH,
                         ColumnMetadata.UNDEFINED_SCALE,
                         false,
                         new ColumnOriginImpl("PUBLIC", "TEST", "COL1")),
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java
index ef6bfcf166..0702740b87 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItMetadataTest.java
@@ -182,13 +182,13 @@ public class ItMetadataTest extends ClusterPerClassIntegrationTest {
                         // Character string types
                         new MetadataMatcher().name("CHAR_C").type(ColumnType.STRING).precision(1).scale(UNDEFINED_SCALE),
                         new MetadataMatcher().name("CHAR_C2").type(ColumnType.STRING).precision(65536).scale(UNDEFINED_SCALE),
-                        new MetadataMatcher().name("VARCHAR_C").type(ColumnType.STRING).precision(65536).scale(UNDEFINED_SCALE),
+                        new MetadataMatcher().name("VARCHAR_C").type(ColumnType.STRING).precision(65535).scale(UNDEFINED_SCALE),
                         new MetadataMatcher().name("VARCHAR_C2").type(ColumnType.STRING).precision(125).scale(UNDEFINED_SCALE),
 
                         // Binary string types
                         new MetadataMatcher().name("BINARY_C").type(ColumnType.BYTE_ARRAY).precision(1).scale(UNDEFINED_SCALE),
                         new MetadataMatcher().name("BINARY_C2").type(ColumnType.BYTE_ARRAY).precision(65536).scale(UNDEFINED_SCALE),
-                        new MetadataMatcher().name("VARBINARY_C").type(ColumnType.BYTE_ARRAY).precision(65536).scale(UNDEFINED_SCALE),
+                        new MetadataMatcher().name("VARBINARY_C").type(ColumnType.BYTE_ARRAY).precision(65535).scale(UNDEFINED_SCALE),
                         new MetadataMatcher().name("VARBINARY_C2").type(ColumnType.BYTE_ARRAY).precision(125).scale(UNDEFINED_SCALE),
 
                         // Datetime types
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java
index 8a533f8d47..e18107140b 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSecondaryIndexTest.java
@@ -812,8 +812,8 @@ public class ItSecondaryIndexTest extends ClusterPerClassIntegrationTest {
         assertQuery("SELECT id FROM Birthday WHERE name BETWEEN 'B' AND 'D' AND name > ?")
                 .withParams("Bach")
                 .matches(containsIndexScan("PUBLIC", "BIRTHDAY", NAME_DATE_IDX))
-                .matches(containsString("searchBounds=[[RangeBounds [lowerBound=$GREATEST2(_UTF-8'B':VARCHAR(65536) "
-                        + "CHARACTER SET \"UTF-8\", ?0), upperBound=_UTF-8'D':VARCHAR(65536) CHARACTER SET \"UTF-8\""))
+                .matches(containsString("searchBounds=[[RangeBounds [lowerBound=$GREATEST2(_UTF-8'B':VARCHAR(65535) "
+                        + "CHARACTER SET \"UTF-8\", ?0), upperBound=_UTF-8'D':VARCHAR(65535) CHARACTER SET \"UTF-8\""))
                 .returns(2)
                 .returns(6)
                 .check();
diff --git a/modules/schema/build.gradle b/modules/schema/build.gradle
index 0fd37e6cdd..b97177d6cd 100644
--- a/modules/schema/build.gradle
+++ b/modules/schema/build.gradle
@@ -56,6 +56,7 @@ dependencies {
     testFixturesImplementation project(':ignite-api')
     testFixturesImplementation project(':ignite-bytecode')
     testFixturesImplementation project(':ignite-configuration-api')
+    testFixturesImplementation project(':ignite-catalog')
     testFixturesImplementation(testFixtures(project(':ignite-core')))
     testFixturesImplementation libs.jetbrains.annotations
     testFixturesImplementation libs.junit5.api
diff --git a/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/testutils/definition/ColumnType.java b/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/testutils/definition/ColumnType.java
index e7b0cdb1a2..4ef217210f 100644
--- a/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/testutils/definition/ColumnType.java
+++ b/modules/schema/src/testFixtures/java/org/apache/ignite/internal/schema/testutils/definition/ColumnType.java
@@ -17,7 +17,10 @@
 
 package org.apache.ignite.internal.schema.testutils.definition;
 
+import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_VARLEN_LENGTH;
+
 import java.util.Objects;
+import org.apache.ignite.internal.catalog.commands.CatalogUtils;
 
 /**
  * Predefined column types.
@@ -258,10 +261,10 @@ public class ColumnType {
      */
     public static class VarLenColumnType extends ColumnType {
         /** String varlen type of unlimited length. */
-        private static final VarLenColumnType UNLIMITED_STRING = new VarLenColumnType(ColumnTypeSpec.STRING, 0);
+        private static final VarLenColumnType UNLIMITED_STRING = new VarLenColumnType(ColumnTypeSpec.STRING, DEFAULT_VARLEN_LENGTH);
 
         /** Blob varlen type of unlimited length. */
-        private static final VarLenColumnType UNLIMITED_BLOB = new VarLenColumnType(ColumnTypeSpec.BYTES, 0);
+        private static final VarLenColumnType UNLIMITED_BLOB = new VarLenColumnType(ColumnTypeSpec.BYTES, DEFAULT_VARLEN_LENGTH);
 
         /** Max length. */
         private final int length;
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java
index e815440d53..83ae1aadf8 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.type;
 
 import static org.apache.calcite.rel.type.RelDataType.PRECISION_NOT_SPECIFIED;
+import static org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_VARLEN_LENGTH;
 import static org.apache.ignite.internal.util.CollectionUtils.first;
 
 import java.lang.reflect.Type;
@@ -260,12 +261,12 @@ public class IgniteTypeFactory extends JavaTypeFactoryImpl {
             case VARCHAR:
             case CHAR:
                 return relType.getPrecision() == PRECISION_NOT_SPECIFIED
-                        ? NativeTypes.stringOf(Integer.MAX_VALUE)
+                        ? NativeTypes.stringOf(DEFAULT_VARLEN_LENGTH)
                         : NativeTypes.stringOf(relType.getPrecision());
             case BINARY:
             case VARBINARY:
                 return relType.getPrecision() == PRECISION_NOT_SPECIFIED
-                        ? NativeTypes.blobOf(Integer.MAX_VALUE)
+                        ? NativeTypes.blobOf(DEFAULT_VARLEN_LENGTH)
                         : NativeTypes.blobOf(relType.getPrecision());
             case ANY:
                 if (relType instanceof IgniteCustomType) {