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 <andrey.mashen...@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);