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 2024/04/30 10:41:27 UTC
(ignite-3) branch ignite-21732 created (now 552f8ac44f)
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a change to branch ignite-21732
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
at 552f8ac44f Add test.
This branch includes the following new commits:
new 73209f0a8c wip.
new 552f8ac44f Add test.
The 2 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) 02/02: Add test.
Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-21732
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 552f8ac44fe9eef23b4cc520912c8421fe775536
Author: amashenkov <an...@gmail.com>
AuthorDate: Tue Apr 30 13:41:11 2024 +0300
Add test.
---
.../exec/ProjectedTableRowConverterImpl.java | 6 +-
.../sql/engine/exec/TableRowConverterImpl.java | 10 +-
.../exec/ProjectedTableRowConverterSelfTest.java | 122 +++++++++++++++++++++
3 files changed, 129 insertions(+), 9 deletions(-)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java
index a136b9de3c..d7ece09da3 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java
@@ -25,6 +25,7 @@ import org.apache.ignite.internal.schema.BinaryTupleSchema;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaRegistry;
+import org.apache.ignite.internal.sql.engine.exec.RowHandler.RowFactory;
import org.apache.ignite.internal.sql.engine.util.FieldDeserializingProjectedTuple;
import org.apache.ignite.internal.sql.engine.util.FormatAwareProjectedTuple;
@@ -63,7 +64,7 @@ public class ProjectedTableRowConverterImpl extends TableRowConverterImpl {
}
@Override
- protected InternalTuple asInternalTuple(BinaryRow tableRow) {
+ public <RowT> RowT toRow(ExecutionContext<RowT> ectx, BinaryRow tableRow, RowFactory<RowT> factory) {
InternalTuple tuple;
if (tableRow.schemaVersion() == schemaDescriptor.version()) {
BinaryTuple tableTuple = new BinaryTuple(schemaDescriptor.length(), tableRow.tupleSlice());
@@ -78,6 +79,7 @@ public class ProjectedTableRowConverterImpl extends TableRowConverterImpl {
requiredColumnsMapping
);
}
- return tuple;
+
+ return factory.create(tuple);
}
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
index c2d7178f8b..b3e6bb98ce 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
@@ -57,18 +57,14 @@ public class TableRowConverterImpl implements TableRowConverter {
BinaryRow tableRow,
RowHandler.RowFactory<RowT> factory
) {
- InternalTuple tuple = asInternalTuple(tableRow);
-
- return factory.create(tuple);
- }
-
- protected InternalTuple asInternalTuple(BinaryRow tableRow) {
InternalTuple tuple;
+
if (tableRow.schemaVersion() == schemaDescriptor.version()) {
tuple = new BinaryTuple(schemaDescriptor.length(), tableRow.tupleSlice());
} else {
tuple= schemaRegistry.resolve(tableRow, schemaDescriptor);
}
- return tuple;
+
+ return factory.create(tuple);
}
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterSelfTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterSelfTest.java
new file mode 100644
index 0000000000..796ac9248a
--- /dev/null
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterSelfTest.java
@@ -0,0 +1,122 @@
+/*
+ * 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.exec;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import org.apache.calcite.util.BitSets;
+import org.apache.ignite.internal.binarytuple.BinaryTupleBuilder;
+import org.apache.ignite.internal.schema.BinaryRow;
+import org.apache.ignite.internal.schema.BinaryRowImpl;
+import org.apache.ignite.internal.schema.BinaryTupleSchema;
+import org.apache.ignite.internal.schema.Column;
+import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.SchemaRegistry;
+import org.apache.ignite.internal.sql.engine.exec.RowHandler.RowFactory;
+import org.apache.ignite.internal.sql.engine.exec.SqlRowHandler.RowWrapper;
+import org.apache.ignite.internal.sql.engine.exec.row.RowSchema;
+import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
+import org.apache.ignite.internal.type.NativeType;
+import org.apache.ignite.internal.type.NativeTypes;
+import org.jetbrains.annotations.Nullable;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+/**
+ * Tests for {@link TableRowConverterImpl}.
+ */
+@ExtendWith(MockitoExtension.class)
+public class ProjectedTableRowConverterSelfTest extends BaseIgniteAbstractTest {
+
+ @Mock
+ private SchemaRegistry schemaRegistry;
+
+ @Mock
+ private ExecutionContext<RowWrapper> executionContext;
+
+ /** Test checks conversion from storage row to execution engine row. */
+ @Test
+ public void testToEngineRowSameVersion() {
+ SchemaDescriptor schema = newSchema(
+ List.of(
+ Map.entry("c3", NativeTypes.UUID),
+ Map.entry("c2", NativeTypes.STRING),
+ Map.entry("c4", NativeTypes.BOOLEAN),
+ Map.entry("c1", NativeTypes.INT32)
+ ),
+ List.of("c1"),
+ null
+ );
+
+ RowSchema rowSchema = RowSchema.builder()
+ .addField(NativeTypes.STRING)
+ .addField(NativeTypes.INT32)
+ .build();
+
+ RowHandler<RowWrapper> rowHandler = SqlRowHandler.INSTANCE;
+ RowFactory<RowWrapper> rowFactory = rowHandler.factory(rowSchema);
+
+ ByteBuffer tupleBuf = new BinaryTupleBuilder(schema.length())
+ .appendUuid(UUID.randomUUID())
+ .appendString("ABC")
+ .appendBoolean(true)
+ .appendInt(100)
+ .build();
+
+ BinaryRow binaryRow = new BinaryRowImpl(schema.version(), tupleBuf);
+
+ ProjectedTableRowConverterImpl converter = new ProjectedTableRowConverterImpl(
+ schemaRegistry,
+ BinaryTupleSchema.createRowSchema(schema),
+ schema,
+ BitSets.of(1, 3)
+ );
+
+ RowWrapper row = converter.toRow(executionContext, binaryRow, rowFactory);
+ assertEquals("ABC", rowHandler.get(0, row));
+ assertEquals(100, rowHandler.get(1, row));
+ }
+
+ private static SchemaDescriptor newSchema(
+ List<Map.Entry<String, NativeType>> columns,
+ List<String> keyColumns,
+ @Nullable List<String> colocationColumns
+ ) {
+ List<Column> columnList = columns.stream()
+ .map(entry -> {
+ String name = entry.getKey();
+ NativeType type = entry.getValue();
+
+ return new Column(name, type, !keyColumns.contains(name));
+ })
+ .collect(Collectors.toList());
+ return new SchemaDescriptor(
+ 1,
+ columnList,
+ keyColumns,
+ colocationColumns
+ );
+ }
+}
(ignite-3) 01/02: 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-21732
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 73209f0a8cd5dd882ba87883f993b304a78dad3f
Author: amashenkov <an...@gmail.com>
AuthorDate: Tue Apr 30 13:14:26 2024 +0300
wip.
---
...pl.java => ProjectedTableRowConverterImpl.java} | 53 +++++-------------
.../engine/exec/TableRowConverterFactoryImpl.java | 6 +--
.../sql/engine/exec/TableRowConverterImpl.java | 62 +++++-----------------
.../sql/engine/exec/TableRowConverterSelfTest.java | 9 +---
4 files changed, 28 insertions(+), 102 deletions(-)
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java
similarity index 62%
copy from modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
copy to modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java
index 288e5e4e1c..a136b9de3c 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ProjectedTableRowConverterImpl.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.sql.engine.exec;
import java.util.BitSet;
import org.apache.ignite.internal.lang.InternalTuple;
import org.apache.ignite.internal.schema.BinaryRow;
-import org.apache.ignite.internal.schema.BinaryRowEx;
import org.apache.ignite.internal.schema.BinaryTuple;
import org.apache.ignite.internal.schema.BinaryTupleSchema;
import org.apache.ignite.internal.schema.Column;
@@ -28,75 +27,48 @@ import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaRegistry;
import org.apache.ignite.internal.sql.engine.util.FieldDeserializingProjectedTuple;
import org.apache.ignite.internal.sql.engine.util.FormatAwareProjectedTuple;
-import org.jetbrains.annotations.Nullable;
/**
* Converts rows to execution engine representation.
*/
-public class TableRowConverterImpl implements TableRowConverter {
-
- private final SchemaRegistry schemaRegistry;
-
- private final SchemaDescriptor schemaDescriptor;
-
- private final BinaryTupleSchema fullTupleSchema;
-
+public class ProjectedTableRowConverterImpl extends TableRowConverterImpl {
/**
* Mapping of required columns to their indexes in physical schema.
*/
private final int[] requiredColumnsMapping;
- private final boolean skipTrimming;
+ private final BinaryTupleSchema fullTupleSchema;
/** Constructor. */
- TableRowConverterImpl(
+ ProjectedTableRowConverterImpl(
SchemaRegistry schemaRegistry,
BinaryTupleSchema fullTupleSchema,
SchemaDescriptor schemaDescriptor,
- @Nullable BitSet requiredColumns
+ BitSet requiredColumns
) {
- this.schemaRegistry = schemaRegistry;
- this.schemaDescriptor = schemaDescriptor;
- this.fullTupleSchema = fullTupleSchema;
+ super(schemaRegistry, schemaDescriptor);
- this.skipTrimming = requiredColumns == null;
+ this.fullTupleSchema = fullTupleSchema;
- int size = requiredColumns == null
- ? schemaDescriptor.length()
- : requiredColumns.cardinality();
+ int size = requiredColumns.cardinality();
requiredColumnsMapping = new int[size];
int requiredIndex = 0;
for (Column column : schemaDescriptor.columns()) {
- if (requiredColumns == null || requiredColumns.get(column.positionInRow())) {
+ if (requiredColumns.get(column.positionInRow())) {
requiredColumnsMapping[requiredIndex++] = column.positionInRow();
}
}
}
- /** {@inheritDoc} */
@Override
- public <RowT> BinaryRowEx toBinaryRow(ExecutionContext<RowT> ectx, RowT row, boolean key) {
- BinaryTuple binaryTuple = ectx.rowHandler().toBinaryTuple(row);
-
- return SqlOutputBinaryRow.newRow(schemaDescriptor, key, binaryTuple);
- }
-
- /** {@inheritDoc} */
- @Override
- public <RowT> RowT toRow(
- ExecutionContext<RowT> ectx,
- BinaryRow tableRow,
- RowHandler.RowFactory<RowT> factory
- ) {
+ protected InternalTuple asInternalTuple(BinaryRow tableRow) {
InternalTuple tuple;
if (tableRow.schemaVersion() == schemaDescriptor.version()) {
- InternalTuple tableTuple = new BinaryTuple(schemaDescriptor.length(), tableRow.tupleSlice());
+ BinaryTuple tableTuple = new BinaryTuple(schemaDescriptor.length(), tableRow.tupleSlice());
- tuple = skipTrimming
- ? tableTuple
- : new FormatAwareProjectedTuple(tableTuple, requiredColumnsMapping);
+ tuple = new FormatAwareProjectedTuple(tableTuple, requiredColumnsMapping);
} else {
InternalTuple tableTuple = schemaRegistry.resolve(tableRow, schemaDescriptor);
@@ -106,7 +78,6 @@ public class TableRowConverterImpl implements TableRowConverter {
requiredColumnsMapping
);
}
-
- return factory.create(tuple);
+ return tuple;
}
}
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterFactoryImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterFactoryImpl.java
index fa9e932f32..8ce0c7ab28 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterFactoryImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterFactoryImpl.java
@@ -54,9 +54,7 @@ public class TableRowConverterFactoryImpl implements TableRowConverterFactory {
fullRowConverter = new TableRowConverterImpl(
schemaRegistry,
- fullTupleSchema,
- schemaDescriptor,
- null
+ schemaDescriptor
);
}
@@ -66,7 +64,7 @@ public class TableRowConverterFactoryImpl implements TableRowConverterFactory {
return fullRowConverter;
}
- return new TableRowConverterImpl(
+ return new ProjectedTableRowConverterImpl(
schemaRegistry,
fullTupleSchema,
schemaDescriptor,
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
index 288e5e4e1c..c2d7178f8b 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterImpl.java
@@ -17,62 +17,29 @@
package org.apache.ignite.internal.sql.engine.exec;
-import java.util.BitSet;
import org.apache.ignite.internal.lang.InternalTuple;
import org.apache.ignite.internal.schema.BinaryRow;
import org.apache.ignite.internal.schema.BinaryRowEx;
import org.apache.ignite.internal.schema.BinaryTuple;
-import org.apache.ignite.internal.schema.BinaryTupleSchema;
-import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaRegistry;
-import org.apache.ignite.internal.sql.engine.util.FieldDeserializingProjectedTuple;
-import org.apache.ignite.internal.sql.engine.util.FormatAwareProjectedTuple;
-import org.jetbrains.annotations.Nullable;
/**
* Converts rows to execution engine representation.
*/
public class TableRowConverterImpl implements TableRowConverter {
- private final SchemaRegistry schemaRegistry;
+ protected final SchemaRegistry schemaRegistry;
- private final SchemaDescriptor schemaDescriptor;
-
- private final BinaryTupleSchema fullTupleSchema;
-
- /**
- * Mapping of required columns to their indexes in physical schema.
- */
- private final int[] requiredColumnsMapping;
-
- private final boolean skipTrimming;
+ protected final SchemaDescriptor schemaDescriptor;
/** Constructor. */
TableRowConverterImpl(
SchemaRegistry schemaRegistry,
- BinaryTupleSchema fullTupleSchema,
- SchemaDescriptor schemaDescriptor,
- @Nullable BitSet requiredColumns
+ SchemaDescriptor schemaDescriptor
) {
this.schemaRegistry = schemaRegistry;
this.schemaDescriptor = schemaDescriptor;
- this.fullTupleSchema = fullTupleSchema;
-
- this.skipTrimming = requiredColumns == null;
-
- int size = requiredColumns == null
- ? schemaDescriptor.length()
- : requiredColumns.cardinality();
-
- requiredColumnsMapping = new int[size];
-
- int requiredIndex = 0;
- for (Column column : schemaDescriptor.columns()) {
- if (requiredColumns == null || requiredColumns.get(column.positionInRow())) {
- requiredColumnsMapping[requiredIndex++] = column.positionInRow();
- }
- }
}
/** {@inheritDoc} */
@@ -90,23 +57,18 @@ public class TableRowConverterImpl implements TableRowConverter {
BinaryRow tableRow,
RowHandler.RowFactory<RowT> factory
) {
+ InternalTuple tuple = asInternalTuple(tableRow);
+
+ return factory.create(tuple);
+ }
+
+ protected InternalTuple asInternalTuple(BinaryRow tableRow) {
InternalTuple tuple;
if (tableRow.schemaVersion() == schemaDescriptor.version()) {
- InternalTuple tableTuple = new BinaryTuple(schemaDescriptor.length(), tableRow.tupleSlice());
-
- tuple = skipTrimming
- ? tableTuple
- : new FormatAwareProjectedTuple(tableTuple, requiredColumnsMapping);
+ tuple = new BinaryTuple(schemaDescriptor.length(), tableRow.tupleSlice());
} else {
- InternalTuple tableTuple = schemaRegistry.resolve(tableRow, schemaDescriptor);
-
- tuple = new FieldDeserializingProjectedTuple(
- fullTupleSchema,
- tableTuple,
- requiredColumnsMapping
- );
+ tuple= schemaRegistry.resolve(tableRow, schemaDescriptor);
}
-
- return factory.create(tuple);
+ return tuple;
}
}
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterSelfTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterSelfTest.java
index 4715f4b3f9..966da6efad 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterSelfTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/TableRowConverterSelfTest.java
@@ -33,7 +33,6 @@ import org.apache.ignite.internal.schema.BinaryRow;
import org.apache.ignite.internal.schema.BinaryRowEx;
import org.apache.ignite.internal.schema.BinaryRowImpl;
import org.apache.ignite.internal.schema.BinaryTuple;
-import org.apache.ignite.internal.schema.BinaryTupleSchema;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaRegistry;
@@ -94,9 +93,7 @@ public class TableRowConverterSelfTest extends BaseIgniteAbstractTest {
TableRowConverterImpl converter = new TableRowConverterImpl(
schemaRegistry,
- BinaryTupleSchema.createRowSchema(schema),
- schema,
- null
+ schema
);
RowWrapper row = converter.toRow(executionContext, binaryRow, rowFactory);
@@ -134,9 +131,7 @@ public class TableRowConverterSelfTest extends BaseIgniteAbstractTest {
TableRowConverterImpl converter = new TableRowConverterImpl(
schemaRegistry,
- BinaryTupleSchema.createRowSchema(schema),
- schema,
- null
+ schema
);
BinaryRowEx convertedRow = converter.toBinaryRow(executionContext, wrapper, false);