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 16caf8f396 IGNITE-19103 Sql. Change implicit primary key column's type
to UUID (#3786)
16caf8f396 is described below
commit 16caf8f3966e9256cfdaafc7f267af9be3c205f9
Author: Max Zhuravkov <[email protected]>
AuthorDate: Wed May 22 13:54:44 2024 +0300
IGNITE-19103 Sql. Change implicit primary key column's type to UUID (#3786)
---
assembly/README.md | 2 +-
docs/_docs/sql-reference/grammar-reference.adoc | 6 +++---
.../commands/AlterTableAlterColumnCommand.java | 2 +-
.../internal/catalog/commands/CatalogUtils.java | 24 ++++++++++-----------
.../catalog/commands/CreateTableCommand.java | 2 +-
.../AlterTableAddColumnCommandValidationTest.java | 2 +-
...AlterTableAlterColumnCommandValidationTest.java | 13 ++++++-----
.../commands/CreateTableCommandValidationTest.java | 3 ++-
.../internal/schema/DefaultValueGenerator.java | 10 ++++-----
.../CatalogToSchemaDescriptorConverterTest.java | 2 +-
.../sql/engine/ItAlterTableAlterColumnTest.java | 10 ++++-----
.../internal/sql/engine/ItCreateTableDdlTest.java | 8 +++----
.../sql/engine/ItHashSpoolIntegrationTest.java | 6 +++---
.../sql/engine/exec/exp/IgniteSqlFunctions.java | 6 +++---
.../internal/sql/engine/exec/exp/RexImpTable.java | 3 +--
.../prepare/ddl/DdlSqlToCommandConverter.java | 6 ++++--
.../internal/sql/engine/rel/IgniteProject.java | 4 ++--
.../sql/engine/schema/TableDescriptorImpl.java | 2 +-
.../sql/engine/sql/fun/IgniteSqlOperatorTable.java | 25 ----------------------
.../sql/engine/type/IgniteCustomTypeSpec.java | 5 ++---
.../internal/sql/engine/util/IgniteMethod.java | 6 +-----
.../sql/engine/prepare/TypeCoercionTest.java | 2 --
.../prepare/ddl/DdlSqlToCommandConverterTest.java | 8 +++----
.../engine/schema/SqlSchemaManagerImplTest.java | 8 +++----
.../internal/sql/engine/sql/SqlDdlParserTest.java | 6 +++---
25 files changed, 70 insertions(+), 101 deletions(-)
diff --git a/assembly/README.md b/assembly/README.md
index 7331cbf9ce..a2cd7c5440 100644
--- a/assembly/README.md
+++ b/assembly/README.md
@@ -12,7 +12,7 @@ with system services.
additional network transmissions and lowers operations latency.
* C++ client: Basic C++ client, able to perform operations on data.
* Autogenerated values: now a function can be specified as a default value
generator during a table creation.
-Currently only gen_random_uuid is supported.
+Currently only rand_uuid is supported.
* SQL Transactions.
* Transactional Protocol: improved locking model, multi-version based
lock-free read-only transactions.
diff --git a/docs/_docs/sql-reference/grammar-reference.adoc
b/docs/_docs/sql-reference/grammar-reference.adoc
index 44a9acfff0..80d8fb18de 100644
--- a/docs/_docs/sql-reference/grammar-reference.adoc
+++ b/docs/_docs/sql-reference/grammar-reference.adoc
@@ -166,7 +166,7 @@ Keywords and parameters:
* `column_name` - a column name.
* `DATA TYPE` - the link:sql-reference/data-types[data type] allowed in the
column.
-* `identifier` - the random identifier for the row. Can be generated by using
the <<gen_random_uuid>> function.
+* `identifier` - the random identifier for the row. Can be generated by using
the <<rand_uuid>> function.
* `literal_value` - a value to be assigned as default.
* `CURRENT TIMESTAMP` - the function that returns current time. Can only be
used for `TIMESTAMP` columns.
* `interval` - the time interval by which the timestamp should be offset.
@@ -227,7 +227,7 @@ Referenced by:
== System Functions
-=== gen_random_uuid
+=== rand_uuid
This function generates a random UUID value each time it is called.
@@ -235,7 +235,7 @@ Example:
[source,sql]
----
-CREATE TABLE t (id varchar default gen_random_uuid primary key, val int)
+CREATE TABLE t (id uuid default rand_uuid primary key, val int)
----
Referenced by:
diff --git
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommand.java
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommand.java
index 1fda646d11..6559b59ce6 100644
---
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommand.java
+++
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommand.java
@@ -152,7 +152,7 @@ public class AlterTableAlterColumnCommand extends
AbstractTableCommand {
if (deferredDefault != null) {
DefaultValue defaultValue = deferredDefault.derive(origin.type());
- CatalogUtils.ensureSupportedDefault(columnName, defaultValue);
+ CatalogUtils.ensureSupportedDefault(columnName, origin.type(),
defaultValue);
}
}
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 269ec442b9..67834813b8 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
@@ -26,7 +26,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Collection;
import java.util.EnumMap;
import java.util.EnumSet;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -127,7 +127,7 @@ public class CatalogUtils {
/**
* Functions that are allowed to be used as columns' functional default.
The set contains uppercase function names.
*/
- private static final Set<String> FUNCTIONAL_DEFAULT_FUNCTIONS = new
HashSet<>();
+ private static final Map<String, ColumnType> FUNCTIONAL_DEFAULT_FUNCTIONS
= new HashMap<>();
static {
ALTER_COLUMN_TYPE_TRANSITIONS.put(ColumnType.INT8,
EnumSet.of(ColumnType.INT8, ColumnType.INT16, ColumnType.INT32,
@@ -141,7 +141,7 @@ public class CatalogUtils {
ALTER_COLUMN_TYPE_TRANSITIONS.put(ColumnType.BYTE_ARRAY,
EnumSet.of(ColumnType.BYTE_ARRAY));
ALTER_COLUMN_TYPE_TRANSITIONS.put(ColumnType.DECIMAL,
EnumSet.of(ColumnType.DECIMAL));
- FUNCTIONAL_DEFAULT_FUNCTIONS.add("GEN_RANDOM_UUID");
+ FUNCTIONAL_DEFAULT_FUNCTIONS.put("RAND_UUID", ColumnType.UUID);
}
public static final List<String> SYSTEM_SCHEMAS =
List.of(SYSTEM_SCHEMA_NAME);
@@ -593,28 +593,28 @@ public class CatalogUtils {
return defaultZone != null ? defaultZone.id() : null;
}
- /**
- * Return {@code true} if a function with given name is allowed to be used
as functional default for a column, {@code false} otherwise.
- */
- static boolean isSupportedFunctionalDefault(String functionName) {
- return
FUNCTIONAL_DEFAULT_FUNCTIONS.contains(functionName.toUpperCase());
- }
-
/**
* Check if provided default value is a constant or a functional default
of supported function, or fail otherwise.
*/
- static void ensureSupportedDefault(String columnName, @Nullable
DefaultValue defaultValue) {
+ static void ensureSupportedDefault(String columnName, ColumnType
columnType, @Nullable DefaultValue defaultValue) {
if (defaultValue == null || defaultValue.type == Type.CONSTANT) {
return;
}
if (defaultValue.type == FUNCTION_CALL) {
String functionName = ((FunctionCall) defaultValue).functionName();
+ ColumnType returnType =
FUNCTIONAL_DEFAULT_FUNCTIONS.get(functionName.toUpperCase());
- if (isSupportedFunctionalDefault(functionName)) {
+ if (returnType == columnType) {
return;
}
+ if (returnType != null) {
+ throw new CatalogValidationException(
+ format("Functional default type mismatch: [col={},
functionName={}, expectedType={}, actualType={}]",
+ columnName, functionName, returnType,
columnType));
+ }
+
throw new CatalogValidationException(
format("Functional default contains unsupported function:
[col={}, functionName={}]",
columnName, functionName));
diff --git
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
index 7a05f4458e..63f0b5f732 100644
---
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
+++
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/commands/CreateTableCommand.java
@@ -179,7 +179,7 @@ public class CreateTableCommand extends
AbstractTableCommand {
for (ColumnParams column : columns) {
boolean partOfPk = primaryKey.columns().contains(column.name());
if (partOfPk) {
- CatalogUtils.ensureSupportedDefault(column.name(),
column.defaultValueDefinition());
+ CatalogUtils.ensureSupportedDefault(column.name(),
column.type(), column.defaultValueDefinition());
} else {
CatalogUtils.ensureNonFunctionalDefault(column.name(),
column.defaultValueDefinition());
}
diff --git
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAddColumnCommandValidationTest.java
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAddColumnCommandValidationTest.java
index 7b2a831512..f741f410af 100644
---
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAddColumnCommandValidationTest.java
+++
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAddColumnCommandValidationTest.java
@@ -178,7 +178,7 @@ public class AlterTableAddColumnCommandValidationTest
extends AbstractCommandVal
);
ColumnParams columnParams =
ColumnParams.builder().name(columnName).type(STRING).length(10)
-
.defaultValue(DefaultValue.functionCall("gen_random_uuid")).build();
+ .defaultValue(DefaultValue.functionCall("rand_uuid")).build();
AlterTableAddColumnCommandBuilder builder =
AlterTableAddColumnCommand.builder()
.schemaName(SCHEMA_NAME)
diff --git
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommandValidationTest.java
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommandValidationTest.java
index c9a15803ec..8f8b472bcc 100644
---
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommandValidationTest.java
+++
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/AlterTableAlterColumnCommandValidationTest.java
@@ -23,6 +23,7 @@ import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThr
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import java.util.stream.Stream;
import org.apache.ignite.internal.catalog.Catalog;
import org.apache.ignite.internal.catalog.CatalogCommand;
@@ -546,14 +547,12 @@ public class AlterTableAlterColumnCommandValidationTest
extends AbstractCommandV
.build(),
ColumnParams.builder()
.name(columnName)
- .type(ColumnType.STRING)
- .length(10)
+ .type(ColumnType.UUID)
.build(),
ColumnParams.builder()
.name(columnName2)
- .type(ColumnType.STRING)
- .length(10)
- .defaultValue(DefaultValue.constant("some
string"))
+ .type(ColumnType.UUID)
+
.defaultValue(DefaultValue.constant(UUID.randomUUID()))
.build())
)
.primaryKey(primaryKey("ID"))
@@ -567,7 +566,7 @@ public class AlterTableAlterColumnCommandValidationTest
extends AbstractCommandV
.schemaName(SCHEMA_NAME)
.tableName(tableName)
.columnName(columnName)
- .deferredDefaultValue(type ->
DefaultValue.functionCall("gen_random_uuid"))
+ .deferredDefaultValue(type ->
DefaultValue.functionCall("rand_uuid"))
.build();
assertThrowsWithCause(
@@ -583,7 +582,7 @@ public class AlterTableAlterColumnCommandValidationTest
extends AbstractCommandV
.schemaName(SCHEMA_NAME)
.tableName(tableName)
.columnName(columnName2)
- .deferredDefaultValue(type ->
DefaultValue.functionCall("gen_random_uuid"))
+ .deferredDefaultValue(type ->
DefaultValue.functionCall("rand_uuid"))
.build();
assertThrowsWithCause(
diff --git
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CreateTableCommandValidationTest.java
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CreateTableCommandValidationTest.java
index 7a5bc311d2..8c2e93ec0d 100644
---
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CreateTableCommandValidationTest.java
+++
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/commands/CreateTableCommandValidationTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.catalog.commands;
import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCause;
import static org.apache.ignite.sql.ColumnType.INT32;
+import static org.apache.ignite.sql.ColumnType.UUID;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import java.util.List;
@@ -112,7 +113,7 @@ public class CreateTableCommandValidationTest extends
AbstractCommandValidationT
builder = fillProperties(builder);
builder.columns(List.of(
-
ColumnParams.builder().name("C").type(INT32).defaultValue(DefaultValue.functionCall("gen_random_uuid")).build(),
+
ColumnParams.builder().name("C").type(UUID).defaultValue(DefaultValue.functionCall("rand_uuid")).build(),
ColumnParams.builder().name("D").type(INT32).defaultValue(DefaultValue.constant(1)).build()
)).primaryKey(primaryKey("C", "D"));
diff --git
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/DefaultValueGenerator.java
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/DefaultValueGenerator.java
index dcd7ef5e6f..a5d7b71ed0 100644
---
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/DefaultValueGenerator.java
+++
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/DefaultValueGenerator.java
@@ -27,8 +27,8 @@ import java.util.UUID;
* (i.e. could be specified as a default in column definition).
*/
public enum DefaultValueGenerator {
- /** Generator that generates random UUID string. */
- GEN_RANDOM_UUID("genRandomUuid", String.class);
+ /** Generator that generates random UUID. */
+ RAND_UUID("randUuid", UUID.class);
private final MethodHandle methodHandle;
@@ -51,9 +51,9 @@ public enum DefaultValueGenerator {
}
}
- /** Returns random UUID string. */
+ /** Returns random UUID. */
@SuppressWarnings("unused") // actually method is called via reflection
- public static String genRandomUuid() {
- return UUID.randomUUID().toString();
+ public static UUID randUuid() {
+ return UUID.randomUUID();
}
}
diff --git
a/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java
b/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java
index 488faceef5..8a5376fbd1 100644
---
a/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java
+++
b/modules/schema/src/test/java/org/apache/ignite/internal/schema/catalog/CatalogToSchemaDescriptorConverterTest.java
@@ -105,7 +105,7 @@ public class CatalogToSchemaDescriptorConverterTest extends
AbstractSchemaConver
@Test
public void convertColumnDescriptorFunctionalDefault() {
String columnName = "UUID";
- String functionName = DefaultValueGenerator.GEN_RANDOM_UUID.name();
+ String functionName = DefaultValueGenerator.RAND_UUID.name();
DefaultValue defaultValue = DefaultValue.functionCall(functionName);
CatalogTableColumnDescriptor columnDescriptor = new
CatalogTableColumnDescriptor(
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItAlterTableAlterColumnTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItAlterTableAlterColumnTest.java
index 1262a776cf..6f5c68f58a 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItAlterTableAlterColumnTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItAlterTableAlterColumnTest.java
@@ -222,20 +222,20 @@ public class ItAlterTableAlterColumnTest extends
BaseSqlIntegrationTest {
@Test
@SuppressWarnings("ThrowableNotThrown")
public void functionalDefaultIsNotSupportedForNonPkColumns() {
- sql("CREATE TABLE t (id VARCHAR PRIMARY KEY, val VARCHAR)");
+ sql("CREATE TABLE t (id UUID PRIMARY KEY, val VARCHAR)");
// PK column
assertThrowsSqlException(
STMT_PARSE_ERR,
- "Failed to parse query: Encountered \"gen_random_uuid\"",
- () -> sql("ALTER TABLE t ALTER COLUMN id SET DEFAULT
gen_random_uuid")
+ "Failed to parse query: Encountered \"rand_uuid\"",
+ () -> sql("ALTER TABLE t ALTER COLUMN id SET DEFAULT
rand_uuid")
);
// Non-pk column
assertThrowsSqlException(
STMT_PARSE_ERR,
- "Failed to parse query: Encountered \"gen_random_uuid\"",
- () -> sql("ALTER TABLE t ALTER COLUMN val SET DEFAULT
gen_random_uuid")
+ "Failed to parse query: Encountered \"rand_uuid\"",
+ () -> sql("ALTER TABLE t ALTER COLUMN val SET DEFAULT
rand_uuid")
);
}
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
index a2aaff1ed2..67fb4c1456 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java
@@ -136,7 +136,7 @@ public class ItCreateTableDdlTest extends
BaseSqlIntegrationTest {
@Test
public void pkWithFunctionalDefault() {
- sql("create table t (id varchar default gen_random_uuid primary key,
val int)");
+ sql("create table t (id uuid default rand_uuid primary key, val int)");
sql("insert into t (val) values (1), (2)");
var result = sql("select * from t");
@@ -372,15 +372,15 @@ public class ItCreateTableDdlTest extends
BaseSqlIntegrationTest {
assertThrowsSqlException(
STMT_VALIDATION_ERR,
"Functional defaults are not supported for non-primary key
columns",
- () -> sql("CREATE TABLE t (id VARCHAR PRIMARY KEY, val VARCHAR
DEFAULT gen_random_uuid)")
+ () -> sql("CREATE TABLE t (id VARCHAR PRIMARY KEY, val UUID
DEFAULT rand_uuid)")
);
sql("CREATE TABLE t (id VARCHAR PRIMARY KEY, val VARCHAR)");
assertThrowsSqlException(
STMT_PARSE_ERR,
- "Failed to parse query: Encountered \"gen_random_uuid\"",
- () -> sql("ALTER TABLE t ADD COLUMN val2 VARCHAR DEFAULT
gen_random_uuid")
+ "Failed to parse query: Encountered \"rand_uuid\"",
+ () -> sql("ALTER TABLE t ADD COLUMN val2 VARCHAR DEFAULT
rand_uuid")
);
}
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
index c7ddb8eceb..1c8bace374 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItHashSpoolIntegrationTest.java
@@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test;
public class ItHashSpoolIntegrationTest extends BaseSqlIntegrationTest {
@Test
public void testNullsInSearchRow() {
- sql("CREATE TABLE t(pk varchar default gen_random_uuid PRIMARY KEY, i1
INTEGER, i2 INTEGER)");
+ sql("CREATE TABLE t(pk uuid default rand_uuid PRIMARY KEY, i1 INTEGER,
i2 INTEGER)");
sql("INSERT INTO t (i1, i2) VALUES (null, 0), (1, 1), (2, 2), (3,
null)");
assertQuery("SELECT i1, (SELECT i2 FROM t WHERE i1=t1.i1) FROM t t1")
@@ -48,8 +48,8 @@ public class ItHashSpoolIntegrationTest extends
BaseSqlIntegrationTest {
@Test
@Disabled("https://issues.apache.org/jira/browse/IGNITE-21286")
public void testNullsInSearchRowMultipleColumns() {
- sql("CREATE TABLE t0(pk varchar default gen_random_uuid PRIMARY KEY,
i1 INTEGER, i2 INTEGER)");
- sql("CREATE TABLE t1(pk varchar default gen_random_uuid PRIMARY KEY,
i1 INTEGER, i2 INTEGER)");
+ sql("CREATE TABLE t0(pk UUID default rand_uuid PRIMARY KEY, i1
INTEGER, i2 INTEGER)");
+ sql("CREATE TABLE t1(pk UUID default rand_uuid PRIMARY KEY, i1
INTEGER, i2 INTEGER)");
sql("INSERT INTO t0(i1, i2) VALUES (null, 0), (1, null), (null, 2),
(3, null), (1, 1)");
sql("INSERT INTO t1(i1, i2) VALUES (null, 0), (null, 1), (2, null),
(3, null), (1, 1)");
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
index 7aa41bb3b1..313b7a275d 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/IgniteSqlFunctions.java
@@ -534,10 +534,10 @@ public class IgniteSqlFunctions {
return leastOrGreatest(false, arg0, arg1);
}
- /** Generates a random UUID and converts it to string. **/
+ /** Generates a random UUID. **/
@NonDeterministic
- public static String genRandomUuid() {
- return UUID.randomUUID().toString();
+ public static UUID randUuid() {
+ return UUID.randomUUID();
}
/** Returns the second argument and ignores the first. */
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
index ef62472443..185cf95be0 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/RexImpTable.java
@@ -334,7 +334,6 @@ import static
org.apache.calcite.sql.fun.SqlStdOperatorTable.USER;
import static org.apache.calcite.util.ReflectUtil.isStatic;
import static
org.apache.ignite.internal.sql.engine.sql.fun.IgniteSqlOperatorTable.SUBSTR;
import static
org.apache.ignite.internal.sql.engine.sql.fun.IgniteSqlOperatorTable.TYPEOF;
-import static
org.apache.ignite.internal.sql.engine.util.IgniteMethod.GEN_RANDOM_UUID;
import static
org.apache.ignite.internal.sql.engine.util.IgniteMethod.GREATEST2;
import static org.apache.ignite.internal.sql.engine.util.IgniteMethod.LEAST2;
import static org.apache.ignite.internal.sql.engine.util.IgniteMethod.LENGTH;
@@ -1007,7 +1006,7 @@ public class RexImpTable {
defineMethod(IgniteSqlOperatorTable.RAND_UUID, RAND_UUID.method(),
NullPolicy.NONE);
defineMethod(IgniteSqlOperatorTable.GREATEST2, GREATEST2.method(),
NullPolicy.NONE);
- defineMethod(IgniteSqlOperatorTable.GEN_RANDOM_UUID,
GEN_RANDOM_UUID.method(), NullPolicy.NONE);
+ defineMethod(IgniteSqlOperatorTable.RAND_UUID, RAND_UUID.method(),
NullPolicy.NONE);
defineMethod(IS_NOT_DISTINCT_FROM,
IgniteMethod.IS_NOT_DISTINCT_FROM.method(), NullPolicy.NONE);
defineMethod(IgniteSqlOperatorTable.LEAST2, LEAST2.method(),
NullPolicy.NONE);
defineMethod(IgniteSqlOperatorTable.LENGTH, LENGTH.method(),
NullPolicy.STRICT);
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
index 4f0ad6f94b..aa5e213d8a 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
@@ -61,7 +61,6 @@ import java.util.stream.Collectors;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.runtime.CalciteContextException;
import org.apache.calcite.schema.ColumnStrategy;
-import org.apache.calcite.sql.SqlBasicTypeNameSpec;
import org.apache.calcite.sql.SqlCall;
import org.apache.calcite.sql.SqlDataTypeSpec;
import org.apache.calcite.sql.SqlDdl;
@@ -128,7 +127,9 @@ import
org.apache.ignite.internal.sql.engine.sql.IgniteSqlDropZone;
import org.apache.ignite.internal.sql.engine.sql.IgniteSqlIndexType;
import org.apache.ignite.internal.sql.engine.sql.IgniteSqlPrimaryKeyConstraint;
import org.apache.ignite.internal.sql.engine.sql.IgniteSqlPrimaryKeyIndexType;
+import org.apache.ignite.internal.sql.engine.sql.IgniteSqlTypeNameSpec;
import org.apache.ignite.internal.sql.engine.sql.IgniteSqlZoneOption;
+import org.apache.ignite.internal.sql.engine.type.UuidType;
import org.apache.ignite.internal.sql.engine.util.Commons;
import org.apache.ignite.lang.IgniteException;
import org.apache.ignite.lang.SchemaNotFoundException;
@@ -294,7 +295,8 @@ public class DdlSqlToCommandConverter {
pkConstraints.add(new
IgniteSqlPrimaryKeyConstraint(SqlParserPos.ZERO, null, SqlNodeList.of(colName),
IgniteSqlPrimaryKeyIndexType.IMPLICIT_HASH));
- SqlDataTypeSpec type = new SqlDataTypeSpec(new
SqlBasicTypeNameSpec(SqlTypeName.VARCHAR, SqlParserPos.ZERO),
SqlParserPos.ZERO);
+ SqlIdentifier uuidTypeName = new SqlIdentifier(UuidType.NAME,
SqlParserPos.ZERO);
+ SqlDataTypeSpec type = new SqlDataTypeSpec(new
IgniteSqlTypeNameSpec(uuidTypeName, SqlParserPos.ZERO), SqlParserPos.ZERO);
SqlNode col = SqlDdlNodes.column(SqlParserPos.ZERO, colName, type,
null, ColumnStrategy.DEFAULT);
createTblNode.columnList().add(0, col);
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteProject.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteProject.java
index d8273005f0..1671d38c2b 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteProject.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/IgniteProject.java
@@ -18,7 +18,7 @@
package org.apache.ignite.internal.sql.engine.rel;
import static org.apache.calcite.rel.RelDistribution.Type.HASH_DISTRIBUTED;
-import static
org.apache.ignite.internal.sql.engine.sql.fun.IgniteSqlOperatorTable.GEN_RANDOM_UUID;
+import static
org.apache.ignite.internal.sql.engine.sql.fun.IgniteSqlOperatorTable.RAND_UUID;
import static
org.apache.ignite.internal.sql.engine.trait.IgniteDistributions.broadcast;
import static
org.apache.ignite.internal.sql.engine.trait.IgniteDistributions.hash;
import static
org.apache.ignite.internal.sql.engine.trait.IgniteDistributions.single;
@@ -197,7 +197,7 @@ public class IgniteProject extends Project implements
TraitsAwareIgniteRel {
RexVisitor<Void> v = new RexVisitorImpl<>(true) {
@Override
public Void visitCall(RexCall call) {
- if (call.getOperator() == GEN_RANDOM_UUID) {
+ if (call.getOperator() == RAND_UUID) {
throw Util.FoundOne.NULL;
}
return super.visitCall(call);
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java
index 0550fd5e2b..c9062bffea 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/TableDescriptorImpl.java
@@ -123,7 +123,7 @@ public class TableDescriptorImpl extends
NullInitializerExpressionFactory implem
case DEFAULT_COMPUTED: {
assert descriptor.key() : "DEFAULT_COMPUTED is only supported
for primary key columns. Column: " + descriptor.name();
- return
rexBuilder.makeCall(IgniteSqlOperatorTable.GEN_RANDOM_UUID);
+ return rexBuilder.makeCall(IgniteSqlOperatorTable.RAND_UUID);
}
default:
throw new IllegalStateException("Unknown default strategy: " +
descriptor.defaultStrategy());
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
index 38c9ffd2a4..5556873c2b 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
@@ -149,30 +149,6 @@ public class IgniteSqlOperatorTable extends
ReflectiveSqlOperatorTable {
}
};
- /**
- * This function is used to generate a value for implicit primary key.
- */
- // TODO This function should removed when
https://issues.apache.org/jira/browse/IGNITE-19103 is complete.
- public static final SqlFunction GEN_RANDOM_UUID =
- new SqlFunction(
- "GEN_RANDOM_UUID",
- SqlKind.OTHER_FUNCTION,
- ReturnTypes.explicit(SqlTypeName.VARCHAR),
- null,
- OperandTypes.NILADIC,
- SqlFunctionCategory.SYSTEM
- ) {
- @Override
- public boolean isDynamicFunction() {
- return true;
- }
-
- @Override
- public boolean isDeterministic() {
- return false;
- }
- };
-
/** The {@code ROUND(numeric [, numeric])} function. */
public static final SqlFunction ROUND = SqlBasicFunction.create("ROUND",
new SetScaleToZeroIfSingleArgument(),
@@ -488,7 +464,6 @@ public class IgniteSqlOperatorTable extends
ReflectiveSqlOperatorTable {
register(LEAST2);
register(GREATEST2);
register(RAND_UUID);
- register(GEN_RANDOM_UUID);
}
/** Sets scale to {@code 0} for single argument variants of ROUND/TRUNCATE
operators. */
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteCustomTypeSpec.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteCustomTypeSpec.java
index 25ac4a25a7..36a305ae1d 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteCustomTypeSpec.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteCustomTypeSpec.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Objects;
import org.apache.calcite.rel.type.RelDataType;
-import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
import org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl;
import org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl;
import org.apache.ignite.internal.sql.engine.util.TypeUtils;
@@ -105,8 +104,8 @@ public final class IgniteCustomTypeSpec {
* {@link TypeUtils TypeUtils} in type conversions.
*
* @see ExpressionFactoryImpl
- * @see TypeUtils#toInternal(ExecutionContext, Object, Type)
- * @see TypeUtils#fromInternal(ExecutionContext, Object, Type)
+ * @see TypeUtils#toInternal(Object, Type)
+ * @see TypeUtils#fromInternal(Object, Type)
*/
public Class<?> storageType() {
return storageType;
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
index 6ed1ff9d43..01b6a69539 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMethod.java
@@ -98,17 +98,13 @@ public enum IgniteMethod {
IS_NOT_DISTINCT_FROM(Objects.class, "equals", Object.class, Object.class),
/** See {@link UUID#randomUUID()}. */
- RAND_UUID(UUID.class, "randomUUID"),
+ RAND_UUID(IgniteSqlFunctions.class, "randUuid"),
LENGTH(IgniteSqlFunctions.class, "length", Object.class),
OCTET_LENGTH(IgniteSqlFunctions.class, "octetLength", ByteString.class),
OCTET_LENGTH2(IgniteSqlFunctions.class, "octetLength", String.class),
- /** See {@link IgniteSqlFunctions#genRandomUuid()}. */
- // TODO This function should removed when
https://issues.apache.org/jira/browse/IGNITE-19103 is complete.
- GEN_RANDOM_UUID(IgniteSqlFunctions.class, "genRandomUuid"),
-
/** See {@link IgniteSqlFunctions#consumeFirstArgument(Object, Object)}.
**/
CONSUME_FIRST_ARGUMENT(IgniteSqlFunctions.class, "consumeFirstArgument",
Object.class, Object.class),
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/TypeCoercionTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/TypeCoercionTest.java
index 3a0eac2e99..8a96b91058 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/TypeCoercionTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/TypeCoercionTest.java
@@ -319,11 +319,9 @@ public class TypeCoercionTest extends AbstractPlannerTest {
List<Arguments> arguments = new ArrayList<>();
arguments.add(Arguments.of("INSERT INTO t VALUES (123)",
SqlTypeName.CHAR, true));
arguments.add(Arguments.of("INSERT INTO t VALUES (123 || '1')",
SqlTypeName.CHAR, true));
- arguments.add(Arguments.of("INSERT INTO t VALUES (gen_random_uuid())",
SqlTypeName.CHAR, true));
arguments.add(Arguments.of("INSERT INTO t VALUES ('123')",
SqlTypeName.CHAR, false));
arguments.add(Arguments.of("INSERT INTO t VALUES (123)",
SqlTypeName.VARCHAR, true));
arguments.add(Arguments.of("INSERT INTO t VALUES (123 || '1')",
SqlTypeName.VARCHAR, true));
- arguments.add(Arguments.of("INSERT INTO t VALUES (gen_random_uuid())",
SqlTypeName.VARCHAR, true));
arguments.add(Arguments.of("INSERT INTO t VALUES ('123')",
SqlTypeName.VARCHAR, false));
return arguments.stream();
}
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
index f18e37e121..2ff25506e7 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverterTest.java
@@ -179,7 +179,7 @@ public class DdlSqlToCommandConverterTest extends
AbstractDdlSqlToCommandConvert
allOf(
hasItem(columnThat("column with name \"VAL\"", cd ->
"VAL".equals(cd.name()))),
hasItem(columnThat("implicit PK col", cd ->
Commons.IMPLICIT_PK_COL_NAME.equals(cd.name())
- && !cd.nullable() && ColumnType.STRING ==
cd.type()))
+ && !cd.nullable() && ColumnType.UUID ==
cd.type()))
)
);
@@ -613,7 +613,7 @@ public class DdlSqlToCommandConverterTest extends
AbstractDdlSqlToCommandConvert
@Test
public void tableWithAutogenPkColumn() throws SqlParseException {
- var node = parse("CREATE TABLE t (id varchar default gen_random_uuid
primary key, val int) WITH STORAGE_PROFILE='"
+ var node = parse("CREATE TABLE t (id uuid default rand_uuid primary
key, val int) WITH STORAGE_PROFILE='"
+ DEFAULT_STORAGE_PROFILE + "'");
assertThat(node, instanceOf(SqlDdl.class));
@@ -633,9 +633,9 @@ public class DdlSqlToCommandConverterTest extends
AbstractDdlSqlToCommandConvert
hasItem(columnThat("PK with functional default",
col -> "ID".equals(col.name())
&& !col.nullable()
- && ColumnType.STRING == col.type()
+ && ColumnType.UUID == col.type()
&& col.defaultValue().type() ==
DefaultValue.Type.FUNCTION_CALL
- &&
"GEN_RANDOM_UUID".equals(((DefaultValue.FunctionCall)
col.defaultValue()).functionName())
+ &&
"RAND_UUID".equals(((DefaultValue.FunctionCall)
col.defaultValue()).functionName())
)
)
)
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImplTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImplTest.java
index f74b5e648a..8e9cb189aa 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImplTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/schema/SqlSchemaManagerImplTest.java
@@ -320,8 +320,8 @@ public class SqlSchemaManagerImplTest extends
BaseIgniteAbstractTest {
.defaultValue(DefaultValue.constant(null)).build(),
ColumnParams.builder().name("C3").type(ColumnType.INT32)
.defaultValue(DefaultValue.constant(1)).build(),
-
ColumnParams.builder().name("C4").type(ColumnType.STRING).length(256)
-
.defaultValue(DefaultValue.functionCall(DefaultValueGenerator.GEN_RANDOM_UUID.name())).build()
+
ColumnParams.builder().name("C4").type(ColumnType.UUID)
+
.defaultValue(DefaultValue.functionCall(DefaultValueGenerator.RAND_UUID.name())).build()
))
.primaryKey(primaryKey("C1", "C4"))
.zone("Default")
@@ -371,8 +371,8 @@ public class SqlSchemaManagerImplTest extends
BaseIgniteAbstractTest {
ColumnParams.builder().name("C1").type(ColumnType.INT32).nullable(false).build(),
ColumnParams.builder().name("C2").type(ColumnType.INT32)
.defaultValue(DefaultValue.constant(null)).build(),
-
ColumnParams.builder().name("C3").type(ColumnType.STRING).length(256)
-
.defaultValue(DefaultValue.functionCall(DefaultValueGenerator.GEN_RANDOM_UUID.name())).build(),
+
ColumnParams.builder().name("C3").type(ColumnType.UUID)
+
.defaultValue(DefaultValue.functionCall(DefaultValueGenerator.RAND_UUID.name())).build(),
ColumnParams.builder().name("C4").type(ColumnType.INT8).nullable(true).build()
))
.primaryKey(primaryKey)
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlDdlParserTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlDdlParserTest.java
index 1d6a507f39..3b1c3e3175 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlDdlParserTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlDdlParserTest.java
@@ -86,7 +86,7 @@ public class SqlDdlParserTest extends AbstractParserTest {
*/
@Test
public void createTableAutogenFuncDefault() {
- String query = "create table my_table(id varchar default
gen_random_uuid primary key, val varchar)";
+ String query = "create table my_table(id uuid default rand_uuid
primary key, val varchar)";
SqlNode node = parse(query);
@@ -100,7 +100,7 @@ public class SqlDdlParserTest extends AbstractParserTest {
SqlColumnDeclaration.class,
col -> "ID".equals(col.name.getSimple())
&& col.expression instanceof SqlIdentifier
- && "GEN_RANDOM_UUID".equals(((SqlIdentifier)
col.expression).getSimple())
+ && "RAND_UUID".equals(((SqlIdentifier)
col.expression).getSimple())
)));
assertThat(createTable.columnList(), hasItem(ofTypeMatching(
"PK constraint with name \"ID\"",
IgniteSqlPrimaryKeyConstraint.class,
@@ -112,7 +112,7 @@ public class SqlDdlParserTest extends AbstractParserTest {
expectUnparsed(node, "CREATE TABLE \"MY_TABLE\" ("
+ "PRIMARY KEY (\"ID\"), "
- + "\"ID\" VARCHAR DEFAULT (\"GEN_RANDOM_UUID\"), "
+ + "\"ID\" UUID DEFAULT (\"RAND_UUID\"), "
+ "\"VAL\" VARCHAR)"
);
}