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 2022/05/30 14:22:13 UTC
[ignite-3] branch ignite-16964 created (now 6ac1dd9bb)
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a change to branch ignite-16964
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
at 6ac1dd9bb wip
This branch includes the following new commits:
new 6ac1dd9bb wip
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: wip
Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-16964
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 6ac1dd9bb9cde1491bb27336c53b93289b27f3f4
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Mon May 30 17:22:03 2022 +0300
wip
---
.../java/org/apache/ignite/sql/ColumnMetadata.java | 16 +++++-
.../client/handler/JdbcQueryEventHandlerImpl.java | 22 ++++----
.../handler/requests/jdbc/JdbcMetadataCatalog.java | 11 ++--
.../handler/requests/jdbc/JdbcQueryCursor.java | 2 +-
.../org/apache/ignite/client/fakes/FakeCursor.java | 2 +-
.../internal/sql/engine/util/QueryChecker.java | 12 ++--
.../apache/ignite/internal/schema/SchemaUtils.java | 66 ++++++++++++++++++++++
.../ignite/internal/sql/engine/AsyncSqlCursor.java | 2 +
.../internal/sql/engine/AsyncSqlCursorImpl.java | 1 +
.../internal/sql/engine/ResultFieldMetadata.java | 56 ------------------
.../internal/sql/engine/ResultSetMetadata.java | 30 ----------
.../ignite/internal/sql/engine/SqlCursor.java | 1 +
.../sql/engine/prepare/AbstractMultiStepPlan.java | 2 +-
.../internal/sql/engine/prepare/DdlPlan.java | 4 +-
.../internal/sql/engine/prepare/ExplainPlan.java | 2 +-
.../internal/sql/engine/prepare/FragmentPlan.java | 4 +-
.../sql/engine/prepare/LazyResultSetMetadata.java | 35 +++++++-----
.../sql/engine/prepare/MultiStepDmlPlan.java | 2 +-
.../sql/engine/prepare/MultiStepQueryPlan.java | 2 +-
.../sql/engine/prepare/PrepareServiceImpl.java | 24 ++++----
.../internal/sql/engine/prepare/QueryPlan.java | 2 +-
.../engine/prepare/ResultFieldMetadataImpl.java | 31 +++++-----
.../{DdlPlan.java => ResultSetMetadataImpl.java} | 46 ++++++++-------
.../sql/engine/schema/ColumnDescriptorImpl.java | 4 +-
.../ignite/internal/sql/engine/util/Commons.java | 60 ++++++++++----------
.../ignite/internal/sql/engine/util/TypeUtils.java | 37 ++++++------
26 files changed, 240 insertions(+), 236 deletions(-)
diff --git a/modules/api/src/main/java/org/apache/ignite/sql/ColumnMetadata.java b/modules/api/src/main/java/org/apache/ignite/sql/ColumnMetadata.java
index 52452ce33..6b8b40cfe 100644
--- a/modules/api/src/main/java/org/apache/ignite/sql/ColumnMetadata.java
+++ b/modules/api/src/main/java/org/apache/ignite/sql/ColumnMetadata.java
@@ -17,6 +17,9 @@
package org.apache.ignite.sql;
+import java.util.List;
+import org.apache.ignite.schema.definition.ColumnType;
+
/**
* Interface that provides methods for accessing column metadata.
*/
@@ -40,11 +43,10 @@ public interface ColumnMetadata {
/**
* Returns SQL column type.
- * TODO: replace return type regarding the SQL type system.
*
* @return Value type.
*/
- Object type();
+ ColumnType type();
/**
* Returns row column nullability flag.
@@ -52,4 +54,14 @@ public interface ColumnMetadata {
* @return {@code true} if column is nullable, {@code false} otherwise.
*/
boolean nullable();
+
+ /**
+ * Example: SELECT SUM(price), category, subcategory FROM Goods WHERE [condition] GROUP_BY category, subcategory.
+ *
+ * <p>Field - Origin SUM(price) - null; category - {"PUBLIC", "Goods", "category"};
+ * subcategory - {"PUBLIC", "Goods", "subcategory"};
+ *
+ * @return field's origin (or where a field value comes from).
+ */
+ List<String> origin();
}
diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
index 3a112265b..28feb989b 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
@@ -57,18 +57,18 @@ import org.apache.ignite.internal.jdbc.proto.event.QueryFetchRequest;
import org.apache.ignite.internal.jdbc.proto.event.QueryFetchResult;
import org.apache.ignite.internal.jdbc.proto.event.QuerySingleResult;
import org.apache.ignite.internal.jdbc.proto.event.Response;
-import org.apache.ignite.internal.schema.NativeTypes;
import org.apache.ignite.internal.sql.engine.AsyncSqlCursor;
import org.apache.ignite.internal.sql.engine.QueryContext;
import org.apache.ignite.internal.sql.engine.QueryProcessor;
import org.apache.ignite.internal.sql.engine.QueryValidator;
-import org.apache.ignite.internal.sql.engine.ResultFieldMetadata;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.exec.QueryValidationException;
import org.apache.ignite.internal.sql.engine.prepare.QueryPlan;
import org.apache.ignite.internal.sql.engine.prepare.QueryPlan.Type;
import org.apache.ignite.internal.sql.engine.util.Commons;
import org.apache.ignite.lang.IgniteInternalException;
+import org.apache.ignite.schema.definition.ColumnType;
+import org.apache.ignite.sql.ColumnMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Jdbc query event handler implementation.
@@ -304,7 +304,7 @@ public class JdbcQueryEventHandlerImpl implements JdbcQueryEventHandler {
"Failed to get query metadata for cursor with ID : " + req.cursorId()));
}
- List<JdbcColumnMeta> meta = metadata.fields().stream()
+ List<JdbcColumnMeta> meta = metadata.columns().stream()
.map(this::createColumnMetadata)
.collect(Collectors.toList());
@@ -317,7 +317,7 @@ public class JdbcQueryEventHandlerImpl implements JdbcQueryEventHandler {
* @param fldMeta field metadata contains info about column.
* @return JdbcColumnMeta object.
*/
- private JdbcColumnMeta createColumnMetadata(ResultFieldMetadata fldMeta) {
+ private JdbcColumnMeta createColumnMetadata(ColumnMetadata fldMeta) {
List<String> origin = fldMeta.origin();
String schemaName = origin == null ? null : origin.get(0);
@@ -329,10 +329,10 @@ public class JdbcQueryEventHandlerImpl implements JdbcQueryEventHandler {
schemaName,
tblName,
colName,
- Commons.nativeTypeToClass(fldMeta.type()),
- Commons.nativeTypePrecision(fldMeta.type()),
- Commons.nativeTypeScale(fldMeta.type()),
- fldMeta.isNullable()
+ Commons.columnTypeToClass(fldMeta.type()),
+ Commons.columnTypePrecision(fldMeta.type()),
+ Commons.columnTypeScale(fldMeta.type()),
+ fldMeta.nullable()
);
}
@@ -421,10 +421,10 @@ public class JdbcQueryEventHandlerImpl implements JdbcQueryEventHandler {
return false;
}
- if (meta.fields().size() != 1) {
+ if (meta.columns().size() != 1) {
return false;
}
- return meta.fields().get(0).type() == NativeTypes.INT64;
+ return meta.columns().get(0).type() == ColumnType.INT64;
}
}
diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
index 0c3ec3032..32ca211c5 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcMetadataCatalog.java
@@ -33,12 +33,13 @@ import org.apache.ignite.internal.jdbc.proto.event.JdbcColumnMeta;
import org.apache.ignite.internal.jdbc.proto.event.JdbcPrimaryKeyMeta;
import org.apache.ignite.internal.jdbc.proto.event.JdbcTableMeta;
import org.apache.ignite.internal.schema.Column;
-import org.apache.ignite.internal.schema.NativeType;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaRegistry;
+import org.apache.ignite.internal.schema.SchemaUtils;
import org.apache.ignite.internal.sql.engine.util.Commons;
import org.apache.ignite.internal.table.TableImpl;
import org.apache.ignite.internal.util.Pair;
+import org.apache.ignite.schema.definition.ColumnType;
import org.apache.ignite.table.Table;
import org.apache.ignite.table.manager.IgniteTables;
@@ -230,16 +231,16 @@ public class JdbcMetadataCatalog {
* @return Column metadata.
*/
private JdbcColumnMeta createColumnMeta(String tblName, Column col) {
- NativeType type = col.type();
+ ColumnType type = SchemaUtils.columnType(col.type());
return new JdbcColumnMeta(
col.name(),
getTblSchema(tblName),
getTblName(tblName),
col.name(),
- Commons.nativeTypeToClass(type),
- Commons.nativeTypePrecision(type),
- Commons.nativeTypeScale(type),
+ Commons.columnTypeToClass(type),
+ Commons.columnTypePrecision(type),
+ Commons.columnTypeScale(type),
col.nullable()
);
}
diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcQueryCursor.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcQueryCursor.java
index 8853a2ad3..8da6ba534 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcQueryCursor.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/jdbc/JdbcQueryCursor.java
@@ -22,8 +22,8 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.ignite.internal.sql.engine.AsyncSqlCursor;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.SqlQueryType;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Jdbc query cursor with the ability to limit the maximum number of rows returned.
diff --git a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCursor.java b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCursor.java
index 1cff2831e..94676d04b 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCursor.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeCursor.java
@@ -24,9 +24,9 @@ import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import org.apache.ignite.internal.sql.engine.AsyncSqlCursor;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.SqlCursor;
import org.apache.ignite.internal.sql.engine.SqlQueryType;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Fake {@link SqlCursor}.
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java
index 21e75b750..5027cf735 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java
@@ -36,8 +36,8 @@ import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.ignite.internal.sql.engine.QueryProcessor;
-import org.apache.ignite.internal.sql.engine.ResultFieldMetadata;
import org.apache.ignite.internal.util.CollectionUtils;
+import org.apache.ignite.sql.ColumnMetadata;
import org.hamcrest.CoreMatchers;
import org.hamcrest.Matcher;
import org.hamcrest.core.SubstringMatcher;
@@ -360,17 +360,17 @@ public abstract class QueryChecker {
var cur = cursors.get(0).join();
if (expectedColumnNames != null) {
- List<String> colNames = cur.metadata().fields().stream()
- .map(ResultFieldMetadata::name)
+ List<String> colNames = cur.metadata().columns().stream()
+ .map(ColumnMetadata::name)
.collect(Collectors.toList());
assertThat("Column names don't match", colNames, equalTo(expectedColumnNames));
}
if (expectedColumnTypes != null) {
- List<Type> colNames = cur.metadata().fields().stream()
- .map(ResultFieldMetadata::type)
- .map(Commons::nativeTypeToClass)
+ List<Type> colNames = cur.metadata().columns().stream()
+ .map(ColumnMetadata::type)
+ .map(Commons::columnTypeToClass)
.collect(Collectors.toList());
assertThat("Column types don't match", colNames, equalTo(expectedColumnTypes));
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
index bb52c3aeb..721ea764b 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
@@ -27,6 +27,7 @@ import org.apache.ignite.internal.schema.configuration.SchemaDescriptorConverter
import org.apache.ignite.internal.schema.mapping.ColumnMapper;
import org.apache.ignite.internal.schema.mapping.ColumnMapping;
import org.apache.ignite.lang.IgniteStringFormatter;
+import org.apache.ignite.schema.definition.ColumnType;
import org.apache.ignite.schema.definition.TableDefinition;
/**
@@ -147,4 +148,69 @@ public class SchemaUtils {
return true;
}
+
+ /**
+ * Convert calcite date type to Ignite native type.
+ */
+ public static ColumnType columnType(NativeType type) {
+ switch (type.spec()) {
+ case DATE:
+ return ColumnType.DATE;
+ case TIME: {
+ TemporalNativeType type0 = (TemporalNativeType)type;
+
+ return type0.precision() > 0 ? ColumnType.time(type0.precision()) : ColumnType.time();
+ }
+ case DATETIME: {
+ TemporalNativeType type0 = (TemporalNativeType)type;
+
+ return type0.precision() > 0 ? ColumnType.datetime(type0.precision()) : ColumnType.datetime();
+ }
+ case TIMESTAMP: {
+ TemporalNativeType type0 = (TemporalNativeType)type;
+
+ return type0.precision() > 0 ? ColumnType.timestamp(type0.precision()) : ColumnType.timestamp();
+ }
+ case INT64:
+ return ColumnType.INT64;
+ case INT32:
+ return ColumnType.INT32;
+ case INT16:
+ return ColumnType.INT16;
+ case INT8:
+ return ColumnType.INT8;
+ case DOUBLE:
+ return ColumnType.DOUBLE;
+ case FLOAT:
+ return ColumnType.FLOAT;
+ case NUMBER: {
+ NumberNativeType type0 = (NumberNativeType)type;
+
+ return type0.precision() > 0 ? ColumnType.numberOf(type0.precision()) : ColumnType.numberOf();
+ }
+ case DECIMAL: {
+ DecimalNativeType type0 = (DecimalNativeType)type;
+
+ return type0.precision() > 0 ? ColumnType.decimalOf(type0.precision(), type0.scale()) : ColumnType.decimalOf();
+ }
+ case BITMASK:
+ return ColumnType.bitmaskOf(((BitmaskNativeType)type).bits());
+ case UUID:
+ return ColumnType.UUID;
+ case STRING: {
+ VarlenNativeType type0 = (VarlenNativeType)type;
+
+ return type0.length() > 0 ? ColumnType.stringOf(type0.length()) : ColumnType.string();
+ }
+ case BYTES: {
+ VarlenNativeType type0 = (VarlenNativeType)type;
+
+ return type0.length() > 0 ? ColumnType.blobOf(type0.length()) : ColumnType.blobOf();
+ }
+
+ default:
+ assert false : "Unexpected type of column: " + type;
+ return null;
+ }
+ }
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursor.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursor.java
index 9025179e9..be1056774 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursor.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursor.java
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.sql.engine;
+import org.apache.ignite.sql.ResultSetMetadata;
+
/**
* Sql query cursor.
*
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
index ebdf96be6..9d8faaf30 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
@@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.CompletionStage;
import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Sql query cursor.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/ResultFieldMetadata.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/ResultFieldMetadata.java
deleted file mode 100644
index dd6a02df1..000000000
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/ResultFieldMetadata.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.sql.engine;
-
-import java.util.List;
-import org.apache.ignite.internal.schema.NativeType;
-
-/**
- * Metadata of the field of a query result set.
- */
-public interface ResultFieldMetadata {
- /**
- * Get name of the result's field.
- */
- String name();
-
- /**
- * Get index (order) of the result's field (starts from 0).
- */
- int order();
-
- /**
- * Get type of the result's field.
- */
- NativeType type();
-
- /**
- * Get nullable flag of the result's field.
- */
- boolean isNullable();
-
- /**
- * Example: SELECT SUM(price), category, subcategory FROM Goods WHERE [condition] GROUP_BY category, subcategory.
- *
- * <p>Field - Origin SUM(price) - null; category - {"PUBLIC", "Goods", "category"};
- * subcategory - {"PUBLIC", "Goods", "subcategory"};
- *
- * @return field's origin (or where a field value comes from).
- */
- List<String> origin();
-}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/ResultSetMetadata.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/ResultSetMetadata.java
deleted file mode 100644
index fd75b7ba0..000000000
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/ResultSetMetadata.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.sql.engine;
-
-import java.util.List;
-
-/**
- * Results set metadata.
- */
-public interface ResultSetMetadata {
- /**
- * Get fields metadata.
- */
- List<ResultFieldMetadata> fields();
-}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlCursor.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlCursor.java
index 0ba4f82a8..1699e1546 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlCursor.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlCursor.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.sql.engine;
import org.apache.ignite.internal.util.Cursor;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Sql query cursor.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/AbstractMultiStepPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/AbstractMultiStepPlan.java
index 9d885fa8e..b47dd8baf 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/AbstractMultiStepPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/AbstractMultiStepPlan.java
@@ -23,12 +23,12 @@ import static org.apache.ignite.internal.util.IgniteUtils.capacity;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import java.util.List;
import java.util.Objects;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.metadata.ColocationGroup;
import org.apache.ignite.internal.sql.engine.metadata.FragmentMapping;
import org.apache.ignite.internal.sql.engine.metadata.MappingService;
import org.apache.ignite.internal.sql.engine.rel.IgniteReceiver;
import org.apache.ignite.internal.sql.engine.rel.IgniteSender;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* AbstractMultiStepPlan.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java
index ed5f05565..d1a4aefd6 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java
@@ -18,8 +18,8 @@
package org.apache.ignite.internal.sql.engine.prepare;
import java.util.List;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.prepare.ddl.DdlCommand;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* DdlPlan.
@@ -45,7 +45,7 @@ public class DdlPlan implements QueryPlan {
/** {@inheritDoc} */
@Override
public ResultSetMetadata metadata() {
- return List::of;
+ return new ResultSetMetadataImpl(List.of());
}
/** {@inheritDoc} */
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ExplainPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ExplainPlan.java
index 1b0aa23e4..64dd04a37 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ExplainPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ExplainPlan.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.prepare;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Query explain plan.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/FragmentPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/FragmentPlan.java
index 6a4a5c650..c92466ed4 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/FragmentPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/FragmentPlan.java
@@ -19,9 +19,9 @@ package org.apache.ignite.internal.sql.engine.prepare;
import java.util.List;
import org.apache.calcite.plan.RelOptCluster;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
import org.apache.ignite.internal.sql.engine.util.Commons;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* FragmentPlan.
@@ -53,7 +53,7 @@ public class FragmentPlan implements QueryPlan {
/** {@inheritDoc} */
@Override
public ResultSetMetadata metadata() {
- return List::of;
+ return new ResultSetMetadataImpl(List.of());
}
/** {@inheritDoc} */
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/LazyResultSetMetadata.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/LazyResultSetMetadata.java
index 6b5dc91bb..48a54a341 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/LazyResultSetMetadata.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/LazyResultSetMetadata.java
@@ -19,31 +19,40 @@ package org.apache.ignite.internal.sql.engine.prepare;
import java.util.List;
import java.util.function.Supplier;
-import org.apache.ignite.internal.sql.engine.ResultFieldMetadata;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
+import org.apache.ignite.sql.ColumnMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Results set metadata holder.
*/
public class LazyResultSetMetadata implements ResultSetMetadata {
- private final Supplier<List<ResultFieldMetadata>> fieldsMetaProvider;
+ /** Metadata provider. */
+ private final Supplier<ResultSetMetadata> columnMetadataProvider;
- /** Fields metadata. */
- private volatile List<ResultFieldMetadata> fields;
+ /** Columns metadata. */
+ private volatile ResultSetMetadata metadata;
- public LazyResultSetMetadata(
- Supplier<List<ResultFieldMetadata>> fieldsMetaProvider
- ) {
- this.fieldsMetaProvider = fieldsMetaProvider;
+ public LazyResultSetMetadata(Supplier<ResultSetMetadata> columnMetadataProvider) {
+ this.columnMetadataProvider = columnMetadataProvider;
}
/** {@inheritDoc} */
@Override
- public List<ResultFieldMetadata> fields() {
- if (fields == null) {
- fields = fieldsMetaProvider.get();
+ public List<ColumnMetadata> columns() {
+ if (metadata == null) {
+ metadata = columnMetadataProvider.get();
}
- return fields;
+ return metadata.columns();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int indexOf(String columnName) {
+ if (metadata == null) {
+ metadata = columnMetadataProvider.get();
+ }
+
+ return metadata.indexOf(columnName);
}
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepDmlPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepDmlPlan.java
index 65d4b0a38..4ea35ba4b 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepDmlPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepDmlPlan.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.prepare;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Distributed dml plan.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepQueryPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepQueryPlan.java
index ead9e477e..35aa4dcbf 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepQueryPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/MultiStepQueryPlan.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.prepare;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* Distributed query plan.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
index b092e1fef..5bbb3e655 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImpl.java
@@ -23,6 +23,7 @@ import static org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimi
import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@@ -41,8 +42,6 @@ import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
import org.apache.calcite.sql.type.SqlTypeName;
-import org.apache.ignite.internal.sql.engine.ResultFieldMetadata;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
import org.apache.ignite.internal.sql.engine.prepare.ddl.DdlSqlToCommandConverter;
import org.apache.ignite.internal.sql.engine.rel.IgniteRel;
import org.apache.ignite.internal.sql.engine.schema.SchemaUpdateListener;
@@ -53,6 +52,8 @@ import org.apache.ignite.internal.storage.DataStorageManager;
import org.apache.ignite.internal.thread.NamedThreadFactory;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.lang.IgniteInternalException;
+import org.apache.ignite.sql.ColumnMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
import org.jetbrains.annotations.Nullable;
/**
@@ -274,23 +275,22 @@ public class PrepareServiceImpl implements PrepareService, SchemaUpdateListener
() -> {
RelDataType rowType = TypeUtils.getResultType(ctx.typeFactory(), ctx.catalogReader(), sqlType, origins);
- List<ResultFieldMetadata> fieldsMeta = new ArrayList<>(rowType.getFieldCount());
+ List<ColumnMetadata> fieldsMeta = new ArrayList<>(rowType.getFieldCount());
for (int i = 0; i < rowType.getFieldCount(); ++i) {
RelDataTypeField fld = rowType.getFieldList().get(i);
- fieldsMeta.add(
- new ResultFieldMetadataImpl(
- fld.getName(),
- TypeUtils.nativeType(fld.getType()),
- fld.getIndex(),
- fld.getType().isNullable(),
- origins == null ? List.of() : origins.get(i)
- )
+ ResultFieldMetadataImpl fldMeta = new ResultFieldMetadataImpl(
+ fld.getName(),
+ TypeUtils.columnType(fld.getType()),
+ fld.getType().isNullable(),
+ origins == null ? List.of() : origins.get(i)
);
+
+ fieldsMeta.add(fldMeta);
}
- return fieldsMeta;
+ return new ResultSetMetadataImpl(fieldsMeta);
}
);
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryPlan.java
index d0102aecc..faac05e35 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/QueryPlan.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.prepare;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
* QueryPlan interface.
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultFieldMetadataImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultFieldMetadataImpl.java
index b4325254f..92a000773 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultFieldMetadataImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultFieldMetadataImpl.java
@@ -18,21 +18,20 @@
package org.apache.ignite.internal.sql.engine.prepare;
import java.util.List;
-import org.apache.ignite.internal.schema.NativeType;
-import org.apache.ignite.internal.sql.engine.ResultFieldMetadata;
+import org.apache.ignite.internal.sql.engine.util.Commons;
+import org.apache.ignite.internal.tostring.S;
+import org.apache.ignite.schema.definition.ColumnType;
+import org.apache.ignite.sql.ColumnMetadata;
/**
* Metadata of the field of a query result set.
*/
-public class ResultFieldMetadataImpl implements ResultFieldMetadata {
+public class ResultFieldMetadataImpl implements ColumnMetadata {
/** Name of the result's field. */
private final String name;
/** Type of the result's field. */
- private final NativeType type;
-
- /** Order of the result's field. */
- private final int order;
+ private final ColumnType type;
/** Nullable flag of the result's field. */
private final boolean nullable;
@@ -46,14 +45,12 @@ public class ResultFieldMetadataImpl implements ResultFieldMetadata {
*/
public ResultFieldMetadataImpl(
String name,
- NativeType type,
- int order,
+ ColumnType type,
boolean nullable,
List<String> origin
) {
this.name = name;
this.type = type;
- this.order = order;
this.nullable = nullable;
this.origin = origin;
}
@@ -66,19 +63,19 @@ public class ResultFieldMetadataImpl implements ResultFieldMetadata {
/** {@inheritDoc} */
@Override
- public int order() {
- return order;
+ public ColumnType type() {
+ return type;
}
/** {@inheritDoc} */
@Override
- public NativeType type() {
- return type;
+ public Class<?> valueClass() {
+ return Commons.columnTypeToClass(type);
}
/** {@inheritDoc} */
@Override
- public boolean isNullable() {
+ public boolean nullable() {
return nullable;
}
@@ -87,4 +84,8 @@ public class ResultFieldMetadataImpl implements ResultFieldMetadata {
public List<String> origin() {
return origin;
}
+
+ @Override public String toString() {
+ return S.toString(ResultFieldMetadataImpl.class, this);
+ }
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultSetMetadataImpl.java
similarity index 52%
copy from modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java
copy to modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultSetMetadataImpl.java
index ed5f05565..6af422ae9 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/DdlPlan.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ResultSetMetadataImpl.java
@@ -17,45 +17,43 @@
package org.apache.ignite.internal.sql.engine.prepare;
+import java.util.HashMap;
import java.util.List;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
-import org.apache.ignite.internal.sql.engine.prepare.ddl.DdlCommand;
+import java.util.Map;
+import org.apache.ignite.sql.ColumnMetadata;
+import org.apache.ignite.sql.ResultSetMetadata;
/**
- * DdlPlan.
- * TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
+ * Results set metadata holder.
*/
-public class DdlPlan implements QueryPlan {
- private final DdlCommand cmd;
+public class ResultSetMetadataImpl implements ResultSetMetadata {
+ /** Column`s metadata ordered list. */
+ private final List<ColumnMetadata> columns;
- public DdlPlan(DdlCommand cmd) {
- this.cmd = cmd;
- }
+ /** Column`s metadata map. */
+ private final Map<String, Integer> columnsIndices;
- public DdlCommand command() {
- return cmd;
- }
+ public ResultSetMetadataImpl(List<ColumnMetadata> columns) {
+ this.columns = columns;
- /** {@inheritDoc} */
- @Override
- public Type type() {
- return Type.DDL;
+ columnsIndices = new HashMap(columns.size());
+
+ for (int i = 0; i < columns.size(); i++) {
+ columnsIndices.put(columns.get(i).name(), i);
+ }
}
/** {@inheritDoc} */
@Override
- public ResultSetMetadata metadata() {
- return List::of;
+ public List<ColumnMetadata> columns() {
+ return columns;
}
/** {@inheritDoc} */
@Override
- public QueryPlan copy() {
- return this;
- }
+ public int indexOf(String columnName) {
+ Integer idx = columnsIndices.get(columnName);
- /** {@inheritDoc} */
- @Override public String toString() {
- return cmd.toString();
+ return idx == null ? -1 : idx;
}
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/ColumnDescriptorImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/ColumnDescriptorImpl.java
index f09541e80..bdbab6149 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/ColumnDescriptorImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/schema/ColumnDescriptorImpl.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.sql.engine.schema;
-import static org.apache.ignite.internal.sql.engine.util.Commons.nativeTypeToClass;
+import static org.apache.ignite.internal.sql.engine.util.Commons.columnTypeToClass;
import java.util.function.Supplier;
import org.apache.calcite.rel.type.RelDataType;
@@ -101,7 +101,7 @@ public class ColumnDescriptorImpl implements ColumnDescriptor {
/** {@inheritDoc} */
@Override
public RelDataType logicalType(IgniteTypeFactory f) {
- return f.createJavaType(nativeTypeToClass(storageType));
+ return f.createJavaType(columnTypeToClass(storageType));
}
/** {@inheritDoc} */
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
index 280afaacb..c749004ec 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/Commons.java
@@ -80,13 +80,8 @@ import org.apache.calcite.util.mapping.Mapping;
import org.apache.calcite.util.mapping.MappingType;
import org.apache.calcite.util.mapping.Mappings;
import org.apache.ignite.internal.generated.query.calcite.sql.IgniteSqlParserImpl;
-import org.apache.ignite.internal.schema.BitmaskNativeType;
-import org.apache.ignite.internal.schema.DecimalNativeType;
import org.apache.ignite.internal.schema.NativeType;
-import org.apache.ignite.internal.schema.NumberNativeType;
-import org.apache.ignite.internal.schema.TemporalNativeType;
-import org.apache.ignite.internal.schema.VarlenNativeType;
-import org.apache.ignite.internal.sql.engine.ResultSetMetadata;
+import org.apache.ignite.internal.schema.SchemaUtils;
import org.apache.ignite.internal.sql.engine.SqlCursor;
import org.apache.ignite.internal.sql.engine.SqlQueryType;
import org.apache.ignite.internal.sql.engine.exec.RowHandler;
@@ -112,6 +107,8 @@ import org.apache.ignite.lang.IgniteException;
import org.apache.ignite.lang.IgniteInternalException;
import org.apache.ignite.lang.IgniteLogger;
import org.apache.ignite.lang.IgniteSystemProperties;
+import org.apache.ignite.schema.definition.ColumnType;
+import org.apache.ignite.sql.ResultSetMetadata;
import org.codehaus.commons.compiler.CompilerFactoryFactory;
import org.codehaus.commons.compiler.IClassBodyEvaluator;
import org.codehaus.commons.compiler.ICompilerFactory;
@@ -642,10 +639,17 @@ public final class Commons {
* NativeTypeToClass.
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
*/
- public static Class<?> nativeTypeToClass(NativeType type) {
+ public static Class<?> columnTypeToClass(NativeType type) {
+ return columnTypeToClass(SchemaUtils.columnType(type));
+ }
+
+ /**
+ * Column type to Java class.
+ */
+ public static Class<?> columnTypeToClass(ColumnType type) {
assert type != null;
- switch (type.spec()) {
+ switch (type.typeSpec()) {
case INT8:
return Byte.class;
@@ -676,7 +680,7 @@ public final class Commons {
case STRING:
return String.class;
- case BYTES:
+ case BLOB:
return byte[].class;
case BITMASK:
@@ -695,7 +699,7 @@ public final class Commons {
return Instant.class;
default:
- throw new IllegalArgumentException("Unsupported type " + type.spec());
+ throw new IllegalArgumentException("Unsupported type " + type.typeSpec());
}
}
@@ -703,10 +707,10 @@ public final class Commons {
* NativeTypePrecision.
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
*/
- public static int nativeTypePrecision(NativeType type) {
+ public static int columnTypePrecision(ColumnType type) {
assert type != null;
- switch (type.spec()) {
+ switch (type.typeSpec()) {
case INT8:
return 3;
@@ -724,29 +728,27 @@ public final class Commons {
return 15;
case NUMBER:
- return ((NumberNativeType) type).precision();
+ return ((ColumnType.NumberColumnType) type).precision();
case DECIMAL:
- return ((DecimalNativeType) type).precision();
-
- case UUID:
- case DATE:
- return -1;
+ return ((ColumnType.DecimalColumnType) type).precision();
case TIME:
case DATETIME:
case TIMESTAMP:
- return ((TemporalNativeType) type).precision();
+ return ((ColumnType.TemporalColumnType) type).precision();
- case BYTES:
+ case BLOB:
case STRING:
- return ((VarlenNativeType) type).length();
-
case BITMASK:
- return ((BitmaskNativeType) type).bits();
+ return ((ColumnType.VarLenColumnType) type).length();
+
+ case UUID:
+ case DATE:
+ return -1;
default:
- throw new IllegalArgumentException("Unsupported type " + type.spec());
+ throw new IllegalArgumentException("Unsupported type " + type.typeSpec());
}
}
@@ -754,8 +756,8 @@ public final class Commons {
* NativeTypeScale.
* TODO Documentation https://issues.apache.org/jira/browse/IGNITE-15859
*/
- public static int nativeTypeScale(NativeType type) {
- switch (type.spec()) {
+ public static int columnTypeScale(ColumnType type) {
+ switch (type.typeSpec()) {
case INT8:
case INT16:
case INT32:
@@ -770,16 +772,16 @@ public final class Commons {
case TIME:
case DATETIME:
case TIMESTAMP:
- case BYTES:
+ case BLOB:
case STRING:
case BITMASK:
return Integer.MIN_VALUE;
case DECIMAL:
- return ((DecimalNativeType) type).scale();
+ return ((ColumnType.DecimalColumnType) type).scale();
default:
- throw new IllegalArgumentException("Unsupported type " + type.spec());
+ throw new IllegalArgumentException("Unsupported type " + type.typeSpec());
}
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
index c3e321777..f13377678 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/TypeUtils.java
@@ -18,7 +18,7 @@
package org.apache.ignite.internal.sql.engine.util;
import static org.apache.calcite.util.Util.last;
-import static org.apache.ignite.internal.sql.engine.util.Commons.nativeTypeToClass;
+import static org.apache.ignite.internal.sql.engine.util.Commons.columnTypeToClass;
import static org.apache.ignite.internal.sql.engine.util.Commons.transform;
import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
@@ -52,13 +52,12 @@ import org.apache.calcite.runtime.SqlFunctions;
import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.calcite.util.Pair;
-import org.apache.ignite.internal.schema.NativeType;
-import org.apache.ignite.internal.schema.NativeTypes;
import org.apache.ignite.internal.sql.engine.exec.ExecutionContext;
import org.apache.ignite.internal.sql.engine.exec.RowHandler;
import org.apache.ignite.internal.sql.engine.schema.ColumnDescriptor;
import org.apache.ignite.internal.sql.engine.schema.TableDescriptor;
import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
+import org.apache.ignite.schema.definition.ColumnType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -238,7 +237,7 @@ public class TypeUtils {
assert fldDesc != null;
- return nativeTypeToClass(fldDesc.physicalType());
+ return columnTypeToClass(fldDesc.physicalType());
}
/**
@@ -363,42 +362,40 @@ public class TypeUtils {
/**
* Convert calcite date type to Ignite native type.
*/
- public static NativeType nativeType(RelDataType type) {
+ public static ColumnType columnType(RelDataType type) {
switch (type.getSqlTypeName()) {
case VARCHAR:
case CHAR:
- return type.getPrecision() > 0 ? NativeTypes.stringOf(type.getPrecision()) : NativeTypes.STRING;
+ return type.getPrecision() > 0 ? ColumnType.stringOf(type.getPrecision()) : ColumnType.string();
case DATE:
- return NativeTypes.DATE;
+ return ColumnType.DATE;
case TIME:
case TIME_WITH_LOCAL_TIME_ZONE:
- return type.getPrecision() > 0 ? NativeTypes.time(type.getPrecision()) : NativeTypes.time();
+ return type.getPrecision() > 0 ? ColumnType.time(type.getPrecision()) : ColumnType.time();
case INTEGER:
- return NativeTypes.INT32;
+ return ColumnType.INT32;
case TIMESTAMP:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
- return type.getPrecision() > 0 ? NativeTypes.timestamp(type.getPrecision()) : NativeTypes.timestamp();
+ return type.getPrecision() > 0 ? ColumnType.timestamp(type.getPrecision()) : ColumnType.timestamp();
case BIGINT:
- return NativeTypes.INT64;
+ return ColumnType.INT64;
case SMALLINT:
- return NativeTypes.INT16;
+ return ColumnType.INT16;
case TINYINT:
- return NativeTypes.INT8;
- case DECIMAL:
- return NativeTypes.decimalOf(type.getPrecision(), type.getScale());
case BOOLEAN:
- return NativeTypes.INT8;
+ return ColumnType.INT8;
+ case DECIMAL:
+ return ColumnType.decimalOf(type.getPrecision(), type.getScale());
case DOUBLE:
- return NativeTypes.DOUBLE;
+ return ColumnType.DOUBLE;
case REAL:
case FLOAT:
- return NativeTypes.FLOAT;
+ return ColumnType.FLOAT;
case BINARY:
case VARBINARY:
- return NativeTypes.blobOf(type.getPrecision());
case ANY:
case OTHER:
- return NativeTypes.blobOf(type.getPrecision());
+ return ColumnType.blobOf(type.getPrecision());
default:
assert false : "Unexpected type of result: " + type.getSqlTypeName();
return null;