From a550c4f1ca2e63308d1f1c96d424f572b8d0d026 Mon Sep 17 00:00:00 2001 From: Ryan Caudy Date: Fri, 17 May 2024 17:10:36 -0400 Subject: [PATCH] Factory for Vectors over entire columns from a Table (#5506) * Move vector column wrappers to engine-api * User-facing factory for vector column wrappers --- engine/api/build.gradle | 2 + .../vectors}/ByteVectorColumnWrapper.java | 4 +- .../vectors}/CharVectorColumnWrapper.java | 4 +- .../engine/table/vectors/ColumnVectors.java | 435 ++++++++++++++++++ .../vectors}/DoubleVectorColumnWrapper.java | 4 +- .../vectors}/FloatVectorColumnWrapper.java | 4 +- .../vectors}/IntVectorColumnWrapper.java | 4 +- .../vectors}/LongVectorColumnWrapper.java | 4 +- .../vectors}/ObjectVectorColumnWrapper.java | 4 +- .../vectors}/ShortVectorColumnWrapper.java | 4 +- .../VectorColumnWrapperConstants.java | 7 +- .../vectors}/ByteVectorColumnWrapperTest.java | 4 +- .../vectors}/CharVectorColumnWrapperTest.java | 4 +- .../DoubleVectorColumnWrapperTest.java | 4 +- .../FloatVectorColumnWrapperTest.java | 4 +- .../vectors}/IntVectorColumnWrapperTest.java | 4 +- .../vectors}/LongVectorColumnWrapperTest.java | 4 +- .../ObjectVectorColumnWrapperTest.java | 4 +- .../ShortVectorColumnWrapperTest.java | 4 +- .../table/vectors/TestColumnVectors.java | 97 ++++ .../table/impl/by/AggregationContext.java | 2 +- .../impl/select/AbstractFormulaColumn.java | 2 +- .../table/impl/select/ConditionFilter.java | 2 +- .../table/impl/select/DhFormulaColumn.java | 2 +- .../aggregate/ByteAggregateColumnSource.java | 2 +- .../aggregate/CharAggregateColumnSource.java | 2 +- .../DoubleAggregateColumnSource.java | 2 +- .../aggregate/FloatAggregateColumnSource.java | 2 +- .../aggregate/IntAggregateColumnSource.java | 2 +- .../aggregate/LongAggregateColumnSource.java | 2 +- .../ObjectAggregateColumnSource.java | 2 +- .../RangeAggregateColumnSourceByte.java | 2 +- .../RangeAggregateColumnSourceChar.java | 2 +- .../RangeAggregateColumnSourceDouble.java | 2 +- .../RangeAggregateColumnSourceFloat.java | 2 +- .../RangeAggregateColumnSourceInt.java | 2 +- .../RangeAggregateColumnSourceLong.java | 2 +- .../RangeAggregateColumnSourceObject.java | 2 +- .../RangeAggregateColumnSourceShort.java | 2 +- .../aggregate/ShortAggregateColumnSource.java | 2 +- .../SlicedByteAggregateColumnSource.java | 2 +- .../SlicedCharAggregateColumnSource.java | 2 +- .../SlicedDoubleAggregateColumnSource.java | 2 +- .../SlicedFloatAggregateColumnSource.java | 2 +- .../SlicedIntAggregateColumnSource.java | 2 +- .../SlicedLongAggregateColumnSource.java | 2 +- .../SlicedObjectAggregateColumnSource.java | 2 +- .../SlicedShortAggregateColumnSource.java | 2 +- .../impl/select/FilterKernelArraySample.java | 4 +- .../table/impl/select/FormulaSample.java | 2 +- .../ReplicateVectorColumnWrappers.java | 4 +- .../table/stats/ChunkedStatsKernelTest.java | 3 - 52 files changed, 601 insertions(+), 73 deletions(-) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/ByteVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/CharVectorColumnWrapper.java (98%) create mode 100644 engine/api/src/main/java/io/deephaven/engine/table/vectors/ColumnVectors.java rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/DoubleVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/FloatVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/IntVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/LongVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/ObjectVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/ShortVectorColumnWrapper.java (98%) rename engine/{table/src/main/java/io/deephaven/engine/table/impl/vector => api/src/main/java/io/deephaven/engine/table/vectors}/VectorColumnWrapperConstants.java (63%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/ByteVectorColumnWrapperTest.java (84%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/CharVectorColumnWrapperTest.java (80%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/DoubleVectorColumnWrapperTest.java (84%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/FloatVectorColumnWrapperTest.java (84%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/IntVectorColumnWrapperTest.java (84%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/LongVectorColumnWrapperTest.java (84%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/ObjectVectorColumnWrapperTest.java (84%) rename engine/{table/src/test/java/io/deephaven/engine/table/impl/vector => api/src/test/java/io/deephaven/engine/table/vectors}/ShortVectorColumnWrapperTest.java (84%) create mode 100644 engine/api/src/test/java/io/deephaven/engine/table/vectors/TestColumnVectors.java diff --git a/engine/api/build.gradle b/engine/api/build.gradle index 75eaf57dd6b..f6e10a07df2 100644 --- a/engine/api/build.gradle +++ b/engine/api/build.gradle @@ -25,6 +25,8 @@ dependencies { compileOnly 'com.google.code.findbugs:jsr305:3.0.2' testImplementation project(':engine-test-utils') + testImplementation TestTools.projectDependency(project, 'engine-table') + testImplementation TestTools.projectDependency(project, 'engine-vector') testImplementation depCommonsLang3 Classpaths.inheritJUnitClassic(project, 'testImplementation') diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ByteVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ByteVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ByteVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/ByteVectorColumnWrapper.java index b5e311d977f..116eea06bfc 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ByteVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ByteVectorColumnWrapper.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapper and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -28,7 +28,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfByte.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfByte.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_BYTE; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapper.java index 0f0f82f78d8..232d8b1c12a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapper.java @@ -1,7 +1,7 @@ // // Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending // -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -24,7 +24,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfChar.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfChar.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_CHAR; diff --git a/engine/api/src/main/java/io/deephaven/engine/table/vectors/ColumnVectors.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ColumnVectors.java new file mode 100644 index 00000000000..1aeca0799e9 --- /dev/null +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ColumnVectors.java @@ -0,0 +1,435 @@ +// +// Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending +// +package io.deephaven.engine.table.vectors; + +import io.deephaven.engine.rowset.TrackingRowSet; +import io.deephaven.engine.table.ColumnDefinition; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; +import io.deephaven.vector.ByteVector; +import io.deephaven.vector.CharVector; +import io.deephaven.vector.DoubleVector; +import io.deephaven.vector.FloatVector; +import io.deephaven.vector.IntVector; +import io.deephaven.vector.LongVector; +import io.deephaven.vector.ObjectVector; +import io.deephaven.vector.ShortVector; +import io.deephaven.vector.Vector; +import org.jetbrains.annotations.NotNull; + +/** + * Utility methods for constructing {@link Vector Vectors} from the columns of a {@link Table}, enabling random and bulk + * access to column data by row position. + *

+ * Users should note that random access by row position (e.g. {@code get} methods) maybe be inefficient due to the need + * to convert row positions to row keys and acquire implementation-specific resources once per row. Thus, random access + * should generally be avoided when possible. On the other hand, bulk access methods (e.g. {@code iterator} and + * {@code toArray} methods) are generally quite efficient because they can amortize row position to row key conversions + * via iteration patterns and use bulk data movement operators. + *

+ * Most usage of these APIs is perfectly safe, because script commands are run using an exclusive lock that inhibits + * concurrent update processing, and table listeners run during a period when it is always safe to access previous and + * current data for the table. That said, if the table is {@link Table#isRefreshing() refreshing}, it's important to + * note that the returned vectors are only valid for use during the current cycle (or + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase, when + * {@code usePreviousValues = true}). See + * Engine Locking for more + * information on safe, consistent data access. {@link Vector#getDirect() Direct vectors} or {@link Vector#copyToArray() + * copied arrays} are always safe to use if they are created while the vector is valid. + */ +public final class ColumnVectors { + + private ColumnVectors() {} + + /** + * Get a {@link Vector} of the data belonging to the specified column. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + *

+ * Users should generally prefer one of the typed variants, e.g. {@link #ofChar ofChar} or {@link #ofObject + * ofObject}, rather than this method. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link Vector} of the data belonging to the specified column + */ + public static Vector of( + @NotNull final Table table, + @NotNull final String columnName) { + return of(table, columnName, false); + } + + /** + * Get a {@link Vector} of the data belonging to the specified column. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + *

+ * Users should generally prefer one of the typed variants, e.g. {@link #ofChar ofChar} or {@link #ofObject + * ofObject}, rather than this method. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link Vector} of the data belonging to the specified column + */ + public static Vector of( + @NotNull final Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table.getDefinition().checkHasColumn(columnName); + final ColumnDefinition columnDefinition = table.getDefinition().getColumn(columnName); + final Class type = columnDefinition.getDataType(); + if (type == char.class || type == Character.class) { + return ofChar(table, columnName, usePreviousValues); + } + if (type == byte.class || type == Byte.class) { + return ofByte(table, columnName, usePreviousValues); + } + if (type == short.class || type == Short.class) { + return ofShort(table, columnName, usePreviousValues); + } + if (type == int.class || type == Integer.class) { + return ofInt(table, columnName, usePreviousValues); + } + if (type == long.class || type == Long.class) { + return ofLong(table, columnName, usePreviousValues); + } + if (type == float.class || type == Float.class) { + return ofFloat(table, columnName, usePreviousValues); + } + if (type == double.class || type == Double.class) { + return ofDouble(table, columnName, usePreviousValues); + } + return ofObject(table, columnName, type, usePreviousValues); + } + + /** + * Get a {@link CharVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code char}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link CharVector} of the data belonging to the specified column + */ + public static CharVector ofChar(@NotNull final Table table, @NotNull final String columnName) { + return ofChar(table, columnName, false); + } + + /** + * Get a {@link CharVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code char}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link CharVector} of the data belonging to the specified column + */ + public static CharVector ofChar( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, char.class); + return usePreviousValues && table.isRefreshing() + ? new CharVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new CharVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get a {@link ByteVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code byte}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link ByteVector} of the data belonging to the specified column + */ + public static ByteVector ofByte(@NotNull final Table table, @NotNull final String columnName) { + return ofByte(table, columnName, false); + } + + /** + * Get a {@link ByteVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code byte}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link ByteVector} of the data belonging to the specified column + */ + public static ByteVector ofByte( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, byte.class); + return usePreviousValues && table.isRefreshing() + ? new ByteVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new ByteVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get a {@link ShortVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code short}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link ShortVector} of the data belonging to the specified column + */ + public static ShortVector ofShort(@NotNull final Table table, @NotNull final String columnName) { + return ofShort(table, columnName, false); + } + + /** + * Get a {@link ShortVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code short}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link ShortVector} of the data belonging to the specified column + */ + public static ShortVector ofShort( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, short.class); + return usePreviousValues && table.isRefreshing() + ? new ShortVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new ShortVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get an {@link IntVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code int}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return An {@link IntVector} of the data belonging to the specified column + */ + public static IntVector ofInt(@NotNull final Table table, @NotNull final String columnName) { + return ofInt(table, columnName, false); + } + + /** + * Get an {@link IntVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code int}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return An {@link IntVector} of the data belonging to the specified column + */ + public static IntVector ofInt( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, int.class); + return usePreviousValues && table.isRefreshing() + ? new IntVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new IntVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get a {@link LongVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code long}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link LongVector} of the data belonging to the specified column + */ + public static LongVector ofLong(@NotNull final Table table, @NotNull final String columnName) { + return ofLong(table, columnName, false); + } + + /** + * Get a {@link LongVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code long}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link LongVector} of the data belonging to the specified column + */ + public static LongVector ofLong( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, long.class); + return usePreviousValues && table.isRefreshing() + ? new LongVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new LongVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get a {@link FloatVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code float}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link FloatVector} of the data belonging to the specified column + */ + public static FloatVector ofFloat(@NotNull final Table table, @NotNull final String columnName) { + return ofFloat(table, columnName, false); + } + + /** + * Get a {@link FloatVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code float}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link FloatVector} of the data belonging to the specified column + */ + public static FloatVector ofFloat( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, float.class); + return usePreviousValues && table.isRefreshing() + ? new FloatVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new FloatVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get a {@link DoubleVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code double}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @return A {@link DoubleVector} of the data belonging to the specified column + */ + public static DoubleVector ofDouble(@NotNull final Table table, @NotNull final String columnName) { + return ofDouble(table, columnName, false); + } + + /** + * Get a {@link DoubleVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code double}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return A {@link DoubleVector} of the data belonging to the specified column + */ + public static DoubleVector ofDouble( + @NotNull Table table, + @NotNull final String columnName, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, double.class); + return usePreviousValues && table.isRefreshing() + ? new DoubleVectorColumnWrapper(columnSource.getPrevSource(), rowSet.prev()) + : new DoubleVectorColumnWrapper(columnSource, rowSet); + } + + /** + * Get an {@link ObjectVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code DATA_TYPE}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param type The data type of the column + * @return An {@link ObjectVector} of the data belonging to the specified column + */ + public static ObjectVector ofObject( + @NotNull final Table table, + @NotNull final String columnName, + @NotNull final Class type) { + return ofObject(table, columnName, type, false); + } + + /** + * Get an {@link ObjectVector} of the data belonging to the specified column, which must be of + * {@link ColumnSource#getType() type} {@code DATA_TYPE}. + *

+ * See {@link ColumnVectors class-level documentation} for more details on recommended usage and safety. + * + * @param table The {@link Table} to access column data from + * @param columnName The name of the column to access + * @param type The data type of the column + * @param usePreviousValues Whether the resulting vector should contain the previous values of the column. This is + * only meaningful if {@code table} is {@link Table#isRefreshing() refreshing}, and only defined during the + * {@link io.deephaven.engine.updategraph.LogicalClock.State#Updating Updating} phase of a cycle that isn't + * the instantiation cycle of {@code table}. + * @return An {@link ObjectVector} of the data belonging to the specified column + */ + public static ObjectVector ofObject( + @NotNull Table table, + @NotNull final String columnName, + @NotNull final Class type, + final boolean usePreviousValues) { + table = table.coalesce(); + final TrackingRowSet rowSet = table.getRowSet(); + final ColumnSource columnSource = table.getColumnSource(columnName, type); + return usePreviousValues && table.isRefreshing() + ? new ObjectVectorColumnWrapper<>(columnSource.getPrevSource(), rowSet.prev()) + : new ObjectVectorColumnWrapper<>(columnSource, rowSet); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/DoubleVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/DoubleVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/DoubleVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/DoubleVectorColumnWrapper.java index 2e34b276206..fe8c1a1378e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/DoubleVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/DoubleVectorColumnWrapper.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapper and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -28,7 +28,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfDouble.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfDouble.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_DOUBLE; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/FloatVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/FloatVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/FloatVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/FloatVectorColumnWrapper.java index f4e595d080e..d0813b9ad83 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/FloatVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/FloatVectorColumnWrapper.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapper and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -28,7 +28,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfFloat.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfFloat.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_FLOAT; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/IntVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/IntVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/IntVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/IntVectorColumnWrapper.java index 0289a5d52ad..fd32052f6ba 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/IntVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/IntVectorColumnWrapper.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapper and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -28,7 +28,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfInt.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfInt.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_INT; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/LongVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/LongVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/LongVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/LongVectorColumnWrapper.java index aaa37ea4e90..8c328819b4b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/LongVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/LongVectorColumnWrapper.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapper and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -28,7 +28,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfLong.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfLong.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_LONG; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ObjectVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ObjectVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ObjectVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/ObjectVectorColumnWrapper.java index 52765da0efd..a2bdd12c891 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ObjectVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ObjectVectorColumnWrapper.java @@ -1,7 +1,7 @@ // // Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending // -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -26,7 +26,7 @@ import static io.deephaven.engine.primitive.iterator.CloseableIterator.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseableIterator.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; public class ObjectVectorColumnWrapper extends ObjectVector.Indirect { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ShortVectorColumnWrapper.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ShortVectorColumnWrapper.java similarity index 98% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ShortVectorColumnWrapper.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/ShortVectorColumnWrapper.java index 5ee8f9bd67b..2f27e6e207b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/ShortVectorColumnWrapper.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/ShortVectorColumnWrapper.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapper and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.base.ClampUtil; import io.deephaven.base.verify.Assert; @@ -28,7 +28,7 @@ import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfShort.maybeConcat; import static io.deephaven.engine.primitive.iterator.CloseablePrimitiveIteratorOfShort.repeat; import static io.deephaven.engine.rowset.RowSequence.NULL_ROW_KEY; -import static io.deephaven.engine.table.impl.vector.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; +import static io.deephaven.engine.table.vectors.VectorColumnWrapperConstants.CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD; import static io.deephaven.engine.table.iterators.ChunkedColumnIterator.DEFAULT_CHUNK_SIZE; import static io.deephaven.util.QueryConstants.NULL_SHORT; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/VectorColumnWrapperConstants.java b/engine/api/src/main/java/io/deephaven/engine/table/vectors/VectorColumnWrapperConstants.java similarity index 63% rename from engine/table/src/main/java/io/deephaven/engine/table/impl/vector/VectorColumnWrapperConstants.java rename to engine/api/src/main/java/io/deephaven/engine/table/vectors/VectorColumnWrapperConstants.java index 0a658b278d5..6bc0de52bf8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/vector/VectorColumnWrapperConstants.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/vectors/VectorColumnWrapperConstants.java @@ -1,9 +1,7 @@ // // Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending // -package io.deephaven.engine.table.impl.vector; - -import io.deephaven.configuration.Configuration; +package io.deephaven.engine.table.vectors; /** * Repository for constants used by the column-wrapper vector implementations. @@ -15,6 +13,5 @@ public class VectorColumnWrapperConstants { * {@link io.deephaven.engine.table.iterators.ChunkedColumnIterator ChunkedColumnIterator} instead of a * {@link io.deephaven.engine.table.iterators.SerialColumnIterator SerialColumnIterator}. */ - static final int CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD = Configuration.getInstance().getIntegerWithDefault( - "VectorColumnWrapper.chunkedColumnIteratorSizeThreshold", 1 << 7); + static final int CHUNKED_COLUMN_ITERATOR_SIZE_THRESHOLD = 1 << 7; } diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ByteVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/ByteVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ByteVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/ByteVectorColumnWrapperTest.java index e162757704c..f8ce9e70c33 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ByteVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/ByteVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link ByteVectorTest} implementation for {@link ByteVectorColumnWrapper}. + * {@link ByteVectorTest} implementation for {@link io.deephaven.engine.table.vectors.ByteVectorColumnWrapper}. */ public class ByteVectorColumnWrapperTest extends ByteVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapperTest.java similarity index 80% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapperTest.java index 5991a92028d..a70c89b5d2c 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapperTest.java @@ -1,7 +1,7 @@ // // Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending // -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link CharVectorTest} implementation for {@link CharVectorColumnWrapper}. + * {@link CharVectorTest} implementation for {@link io.deephaven.engine.table.vectors.CharVectorColumnWrapper}. */ public class CharVectorColumnWrapperTest extends CharVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/DoubleVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/DoubleVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/DoubleVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/DoubleVectorColumnWrapperTest.java index 6e5114a354b..870435aa3dc 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/DoubleVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/DoubleVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link DoubleVectorTest} implementation for {@link DoubleVectorColumnWrapper}. + * {@link DoubleVectorTest} implementation for {@link io.deephaven.engine.table.vectors.DoubleVectorColumnWrapper}. */ public class DoubleVectorColumnWrapperTest extends DoubleVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/FloatVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/FloatVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/FloatVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/FloatVectorColumnWrapperTest.java index c94d567b435..3875a62d6dd 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/FloatVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/FloatVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link FloatVectorTest} implementation for {@link FloatVectorColumnWrapper}. + * {@link FloatVectorTest} implementation for {@link io.deephaven.engine.table.vectors.FloatVectorColumnWrapper}. */ public class FloatVectorColumnWrapperTest extends FloatVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/IntVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/IntVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/IntVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/IntVectorColumnWrapperTest.java index bd4560090ca..e89bb02cdbf 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/IntVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/IntVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link IntVectorTest} implementation for {@link IntVectorColumnWrapper}. + * {@link IntVectorTest} implementation for {@link io.deephaven.engine.table.vectors.IntVectorColumnWrapper}. */ public class IntVectorColumnWrapperTest extends IntVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/LongVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/LongVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/LongVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/LongVectorColumnWrapperTest.java index fc2a2a1c50b..c26f888004c 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/LongVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/LongVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link LongVectorTest} implementation for {@link LongVectorColumnWrapper}. + * {@link LongVectorTest} implementation for {@link io.deephaven.engine.table.vectors.LongVectorColumnWrapper}. */ public class LongVectorColumnWrapperTest extends LongVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ObjectVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/ObjectVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ObjectVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/ObjectVectorColumnWrapperTest.java index 6862255819b..bb3520afae7 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ObjectVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/ObjectVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link ObjectVectorTest} implementation for {@link ObjectVectorColumnWrapper}. + * {@link ObjectVectorTest} implementation for {@link io.deephaven.engine.table.vectors.ObjectVectorColumnWrapper}. */ public class ObjectVectorColumnWrapperTest extends ObjectVectorTest { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ShortVectorColumnWrapperTest.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/ShortVectorColumnWrapperTest.java similarity index 84% rename from engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ShortVectorColumnWrapperTest.java rename to engine/api/src/test/java/io/deephaven/engine/table/vectors/ShortVectorColumnWrapperTest.java index a428af5af77..8ec6df5a48b 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/vector/ShortVectorColumnWrapperTest.java +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/ShortVectorColumnWrapperTest.java @@ -5,7 +5,7 @@ // ****** Edit CharVectorColumnWrapperTest and run "./gradlew replicateVectorColumnWrappers" to regenerate // // @formatter:off -package io.deephaven.engine.table.impl.vector; +package io.deephaven.engine.table.vectors; import io.deephaven.engine.table.impl.sources.ArrayBackedColumnSource; import io.deephaven.engine.rowset.RowSetFactory; @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; /** - * {@link ShortVectorTest} implementation for {@link ShortVectorColumnWrapper}. + * {@link ShortVectorTest} implementation for {@link io.deephaven.engine.table.vectors.ShortVectorColumnWrapper}. */ public class ShortVectorColumnWrapperTest extends ShortVectorTest { diff --git a/engine/api/src/test/java/io/deephaven/engine/table/vectors/TestColumnVectors.java b/engine/api/src/test/java/io/deephaven/engine/table/vectors/TestColumnVectors.java new file mode 100644 index 00000000000..3233e5a091e --- /dev/null +++ b/engine/api/src/test/java/io/deephaven/engine/table/vectors/TestColumnVectors.java @@ -0,0 +1,97 @@ +// +// Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending +// +package io.deephaven.engine.table.vectors; + +import io.deephaven.base.verify.Assert; +import io.deephaven.engine.context.ExecutionContext; +import io.deephaven.engine.rowset.RowSetFactory; +import io.deephaven.engine.table.ColumnDefinition; +import io.deephaven.engine.table.ColumnSource; +import io.deephaven.engine.table.Table; +import io.deephaven.engine.table.impl.QueryTable; +import io.deephaven.engine.table.impl.TimeTable; +import io.deephaven.engine.table.impl.sources.InMemoryColumnSource; +import io.deephaven.engine.testutil.ControlledUpdateGraph; +import io.deephaven.engine.testutil.TstUtils; +import io.deephaven.engine.testutil.junit4.EngineCleanup; +import io.deephaven.engine.util.TestClock; +import junit.framework.TestCase; +import org.jetbrains.annotations.NotNull; +import org.junit.Rule; +import org.junit.Test; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Unit tests for {@link ColumnVectors}. + */ +public class TestColumnVectors { + + @Rule + public final EngineCleanup base = new EngineCleanup(); + + @Test + public void testSmallTable() { + testTable(10); + } + + @Test + public void testLargeTable() { + testTable(1_000_000); + } + + private void testTable(final int size) { + final ControlledUpdateGraph updateGraph = ExecutionContext.getContext().getUpdateGraph().cast(); + final TestClock clock = new TestClock(); + final TimeTable timeTable = new TimeTable(updateGraph, clock, null, 1, false); + final Table source = timeTable + .updateView( + "B = ii % 3 == 0 ? NULL_BYTE : (byte) ii", + "C = ii % 3 == 0 ? NULL_CHAR : (char) ('A' + ii % 27)", + "S = ii % 3 == 0 ? NULL_SHORT : (short) ii", + "I = ii % 3 == 0 ? NULL_INT : (int) ii", + "L = ii % 3 == 0 ? NULL_LONG : ii", + "F = ii % 3 == 0 ? NULL_FLOAT : (float) (ii * 0.25)", + "D = ii % 3 == 0 ? NULL_DOUBLE : ii * 1.25", + "Bl = ii % 3 == 0 ? null : ii % 3 == 1", + "Str = ii % 3 == 0 ? null : Long.toString(ii)") + .tail(size); + TestCase.assertTrue(source.isEmpty()); + TstUtils.assertTableEquals(source, copyTable(source, false)); + + for (int si = 0; si < 10; ++si) { + final Table prevSourceSnapshot = source.snapshot(); + + updateGraph.startCycleForUnitTests(); + try { + clock.now += 1_000_000_000L; + timeTable.run(); + updateGraph.flushAllNormalNotificationsForUnitTests(); + + TstUtils.assertTableEquals(prevSourceSnapshot, copyTable(source, true)); + TstUtils.assertTableEquals(source, copyTable(source, false)); + } finally { + updateGraph.completeCycleForUnitTests(); + } + } + } + + private static Table copyTable(@NotNull final Table source, final boolean prev) { + final Table coalesced = source.coalesce(); + return new QueryTable( + coalesced.getDefinition(), + RowSetFactory.flat(prev ? coalesced.getRowSet().sizePrev() : coalesced.size()).toTracking(), + (Map>) coalesced.getDefinition().getColumnStream() + .collect(Collectors.toMap( + ColumnDefinition::getName, + cd -> InMemoryColumnSource.getImmutableMemoryColumnSource( + ColumnVectors.of(coalesced, cd.getName(), prev).copyToArray(), + cd.getDataType(), + cd.getComponentType()), + Assert::neverInvoked, + LinkedHashMap::new))); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationContext.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationContext.java index a4031ae4fb2..1362675a5ac 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationContext.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationContext.java @@ -29,7 +29,7 @@ * Provides utility methods for the ChunkedOperationAggregationHelper to manipulate and interrogate the operators, * inputs and outputs. */ -class AggregationContext { +public class AggregationContext { /** * Our operators. */ diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/AbstractFormulaColumn.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/AbstractFormulaColumn.java index 03fd59fdd77..06cbd79fd70 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/AbstractFormulaColumn.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/AbstractFormulaColumn.java @@ -12,8 +12,8 @@ import io.deephaven.engine.table.impl.MatchPair; import io.deephaven.engine.table.impl.QueryCompilerRequestProcessor; import io.deephaven.util.CompletionStageFuture; +import io.deephaven.engine.table.vectors.*; import io.deephaven.vector.Vector; -import io.deephaven.engine.table.impl.vector.*; import io.deephaven.engine.table.impl.select.formula.*; import io.deephaven.engine.table.impl.sources.*; import io.deephaven.engine.rowset.RowSet; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/ConditionFilter.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/ConditionFilter.java index f08995981e0..51351cfb516 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/ConditionFilter.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/ConditionFilter.java @@ -528,7 +528,7 @@ private StringBuilder getClassBody( final String arrayType = columnType.getCanonicalName().replace( "io.deephaven.vector", - "io.deephaven.engine.table.impl.vector") + "ColumnWrapper"; + "io.deephaven.engine.table.vectors") + "ColumnWrapper"; /* * Adding array column fields. diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/DhFormulaColumn.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/DhFormulaColumn.java index 31a80d3a4e2..56a8aecfddc 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/DhFormulaColumn.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/DhFormulaColumn.java @@ -344,7 +344,7 @@ private CodeGenerator generateConstructor() { final String vtp = getVectorType(ac.columnDefinition.getDataType()).getCanonicalName().replace( "io.deephaven.vector", - "io.deephaven.engine.table.impl.vector"); + "io.deephaven.engine.table.vectors"); fc.replace("VECTOR_TYPE_PREFIX", vtp); return null; }, diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ByteAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ByteAggregateColumnSource.java index 5ea1c04d06b..13558593236 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ByteAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ByteAggregateColumnSource.java @@ -9,7 +9,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.ByteVector; -import io.deephaven.engine.table.impl.vector.ByteVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ByteVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/CharAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/CharAggregateColumnSource.java index ec34f7268a2..3ab84136b9c 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/CharAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/CharAggregateColumnSource.java @@ -5,7 +5,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.CharVector; -import io.deephaven.engine.table.impl.vector.CharVectorColumnWrapper; +import io.deephaven.engine.table.vectors.CharVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/DoubleAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/DoubleAggregateColumnSource.java index e1188a5aa24..b2d0700bcac 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/DoubleAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/DoubleAggregateColumnSource.java @@ -9,7 +9,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.DoubleVector; -import io.deephaven.engine.table.impl.vector.DoubleVectorColumnWrapper; +import io.deephaven.engine.table.vectors.DoubleVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/FloatAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/FloatAggregateColumnSource.java index df40db76a81..c122f0a3fe4 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/FloatAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/FloatAggregateColumnSource.java @@ -9,7 +9,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.FloatVector; -import io.deephaven.engine.table.impl.vector.FloatVectorColumnWrapper; +import io.deephaven.engine.table.vectors.FloatVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/IntAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/IntAggregateColumnSource.java index 1b4e52d3ba0..e38bc30e38e 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/IntAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/IntAggregateColumnSource.java @@ -9,7 +9,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.IntVector; -import io.deephaven.engine.table.impl.vector.IntVectorColumnWrapper; +import io.deephaven.engine.table.vectors.IntVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/LongAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/LongAggregateColumnSource.java index 6231769b5e2..25e89cd239c 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/LongAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/LongAggregateColumnSource.java @@ -9,7 +9,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.LongVector; -import io.deephaven.engine.table.impl.vector.LongVectorColumnWrapper; +import io.deephaven.engine.table.vectors.LongVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ObjectAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ObjectAggregateColumnSource.java index 957170f435e..906711ca14c 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ObjectAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ObjectAggregateColumnSource.java @@ -4,7 +4,7 @@ package io.deephaven.engine.table.impl.sources.aggregate; import io.deephaven.vector.ObjectVector; -import io.deephaven.engine.table.impl.vector.ObjectVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ObjectVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceByte.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceByte.java index b547bfddfba..b2a8ea2669b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceByte.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceByte.java @@ -15,7 +15,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.ByteVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ByteVectorColumnWrapper; import io.deephaven.vector.ByteVector; import io.deephaven.vector.ByteVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceChar.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceChar.java index 570a679c5cb..cc94b65172c 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceChar.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceChar.java @@ -11,7 +11,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.CharVectorColumnWrapper; +import io.deephaven.engine.table.vectors.CharVectorColumnWrapper; import io.deephaven.vector.CharVector; import io.deephaven.vector.CharVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceDouble.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceDouble.java index c5a7b2fadb3..e7a5781c59a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceDouble.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceDouble.java @@ -15,7 +15,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.DoubleVectorColumnWrapper; +import io.deephaven.engine.table.vectors.DoubleVectorColumnWrapper; import io.deephaven.vector.DoubleVector; import io.deephaven.vector.DoubleVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceFloat.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceFloat.java index e529944ad60..1f1b451abfa 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceFloat.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceFloat.java @@ -15,7 +15,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.FloatVectorColumnWrapper; +import io.deephaven.engine.table.vectors.FloatVectorColumnWrapper; import io.deephaven.vector.FloatVector; import io.deephaven.vector.FloatVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceInt.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceInt.java index 1afcd63185b..55a47a15ec5 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceInt.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceInt.java @@ -15,7 +15,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.IntVectorColumnWrapper; +import io.deephaven.engine.table.vectors.IntVectorColumnWrapper; import io.deephaven.vector.IntVector; import io.deephaven.vector.IntVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceLong.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceLong.java index 5037e76f297..25d4d8dc18a 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceLong.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceLong.java @@ -15,7 +15,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.LongVectorColumnWrapper; +import io.deephaven.engine.table.vectors.LongVectorColumnWrapper; import io.deephaven.vector.LongVector; import io.deephaven.vector.LongVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceObject.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceObject.java index 070e6be9998..b1dc40ab913 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceObject.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceObject.java @@ -11,7 +11,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.ObjectVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ObjectVectorColumnWrapper; import io.deephaven.vector.*; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceShort.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceShort.java index 0beaa4bbe2a..84934926d40 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceShort.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/RangeAggregateColumnSourceShort.java @@ -15,7 +15,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.ShortVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ShortVectorColumnWrapper; import io.deephaven.vector.ShortVector; import io.deephaven.vector.ShortVectorSlice; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ShortAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ShortAggregateColumnSource.java index 47450e5ea76..9d4ebdebf26 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ShortAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/ShortAggregateColumnSource.java @@ -9,7 +9,7 @@ import io.deephaven.engine.rowset.RowSequence; import io.deephaven.vector.ShortVector; -import io.deephaven.engine.table.impl.vector.ShortVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ShortVectorColumnWrapper; import io.deephaven.engine.table.ColumnSource; import io.deephaven.chunk.attributes.Values; import io.deephaven.chunk.ObjectChunk; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedByteAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedByteAggregateColumnSource.java index 1f40ebd38cd..ab535736553 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedByteAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedByteAggregateColumnSource.java @@ -17,7 +17,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.ByteVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ByteVectorColumnWrapper; import io.deephaven.vector.ByteVector; import io.deephaven.vector.ByteVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedCharAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedCharAggregateColumnSource.java index 678c669199c..12429bed3d6 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedCharAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedCharAggregateColumnSource.java @@ -13,7 +13,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.CharVectorColumnWrapper; +import io.deephaven.engine.table.vectors.CharVectorColumnWrapper; import io.deephaven.vector.CharVector; import io.deephaven.vector.CharVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedDoubleAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedDoubleAggregateColumnSource.java index 1d4b1e47df2..038a204e0a2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedDoubleAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedDoubleAggregateColumnSource.java @@ -17,7 +17,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.DoubleVectorColumnWrapper; +import io.deephaven.engine.table.vectors.DoubleVectorColumnWrapper; import io.deephaven.vector.DoubleVector; import io.deephaven.vector.DoubleVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedFloatAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedFloatAggregateColumnSource.java index 2a681152f64..80617617e29 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedFloatAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedFloatAggregateColumnSource.java @@ -17,7 +17,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.FloatVectorColumnWrapper; +import io.deephaven.engine.table.vectors.FloatVectorColumnWrapper; import io.deephaven.vector.FloatVector; import io.deephaven.vector.FloatVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedIntAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedIntAggregateColumnSource.java index c8c8e5a3935..ea80c540ead 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedIntAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedIntAggregateColumnSource.java @@ -17,7 +17,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.IntVectorColumnWrapper; +import io.deephaven.engine.table.vectors.IntVectorColumnWrapper; import io.deephaven.vector.IntVector; import io.deephaven.vector.IntVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedLongAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedLongAggregateColumnSource.java index 5754102e0ce..19176bf3ec8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedLongAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedLongAggregateColumnSource.java @@ -17,7 +17,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.LongVectorColumnWrapper; +import io.deephaven.engine.table.vectors.LongVectorColumnWrapper; import io.deephaven.vector.LongVector; import io.deephaven.vector.LongVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedObjectAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedObjectAggregateColumnSource.java index d1905ddc229..3a9a20942b2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedObjectAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedObjectAggregateColumnSource.java @@ -13,7 +13,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.ObjectVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ObjectVectorColumnWrapper; import io.deephaven.vector.ObjectVector; import io.deephaven.vector.ObjectVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedShortAggregateColumnSource.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedShortAggregateColumnSource.java index 959e4cc7328..9673b1d1bf9 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedShortAggregateColumnSource.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/sources/aggregate/SlicedShortAggregateColumnSource.java @@ -17,7 +17,7 @@ import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.chunkattributes.OrderedRowKeys; import io.deephaven.engine.table.ColumnSource; -import io.deephaven.engine.table.impl.vector.ShortVectorColumnWrapper; +import io.deephaven.engine.table.vectors.ShortVectorColumnWrapper; import io.deephaven.vector.ShortVector; import io.deephaven.vector.ShortVectorDirect; import org.jetbrains.annotations.NotNull; diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FilterKernelArraySample.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FilterKernelArraySample.java index 2be1397d767..04e1c984b5b 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FilterKernelArraySample.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FilterKernelArraySample.java @@ -81,8 +81,8 @@ public class FilterKernelArraySample implements io.deephaven.engine.table.impl.s public FilterKernelArraySample(Table __table, RowSet __fullSet, QueryScopeParam... __params) { // Array Column Variables - v2_ = new io.deephaven.engine.table.impl.vector.DoubleVectorColumnWrapper(__table.getColumnSource("v2"), __fullSet); - v1_ = new io.deephaven.engine.table.impl.vector.ShortVectorColumnWrapper(__table.getColumnSource("v1"), __fullSet); + v2_ = new io.deephaven.engine.table.vectors.DoubleVectorColumnWrapper(__table.getColumnSource("v2"), __fullSet); + v1_ = new io.deephaven.engine.table.vectors.ShortVectorColumnWrapper(__table.getColumnSource("v1"), __fullSet); } @Override public Context getContext(int __maxChunkSize) { diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FormulaSample.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FormulaSample.java index f24fd283dbc..51d41ae0926 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FormulaSample.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/select/FormulaSample.java @@ -90,7 +90,7 @@ public FormulaSample(final String __columnName, this.__columnName = __columnName; II = __columnsToData.get("II"); I = __columnsToData.get("I"); - II_ = new io.deephaven.engine.table.impl.vector.LongVectorColumnWrapper(__columnsToData.get("II"), __rowSet); + II_ = new io.deephaven.engine.table.vectors.LongVectorColumnWrapper(__columnsToData.get("II"), __rowSet); q = (java.lang.Integer) __params[0].getValue(); __lazyResultCache = __lazy ? new ConcurrentHashMap<>() : null; } diff --git a/replication/static/src/main/java/io/deephaven/replicators/ReplicateVectorColumnWrappers.java b/replication/static/src/main/java/io/deephaven/replicators/ReplicateVectorColumnWrappers.java index fc5cb5da264..11ce3d3c95b 100644 --- a/replication/static/src/main/java/io/deephaven/replicators/ReplicateVectorColumnWrappers.java +++ b/replication/static/src/main/java/io/deephaven/replicators/ReplicateVectorColumnWrappers.java @@ -19,9 +19,9 @@ public class ReplicateVectorColumnWrappers { private static final String TASK = "replicateVectorColumnWrappers"; private static final String CHAR_IMPL_PATH = - "engine/table/src/main/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapper.java"; + "engine/api/src/main/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapper.java"; private static final String CHAR_TEST_PATH = - "engine/table/src/test/java/io/deephaven/engine/table/impl/vector/CharVectorColumnWrapperTest.java"; + "engine/api/src/test/java/io/deephaven/engine/table/vectors/CharVectorColumnWrapperTest.java"; public static void main(String[] args) throws IOException { charToAllButBoolean(TASK, CHAR_IMPL_PATH); diff --git a/server/src/test/java/io/deephaven/server/table/stats/ChunkedStatsKernelTest.java b/server/src/test/java/io/deephaven/server/table/stats/ChunkedStatsKernelTest.java index 84ed1d2fc0f..852af6c9a65 100644 --- a/server/src/test/java/io/deephaven/server/table/stats/ChunkedStatsKernelTest.java +++ b/server/src/test/java/io/deephaven/server/table/stats/ChunkedStatsKernelTest.java @@ -8,7 +8,6 @@ import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.QueryTable; import io.deephaven.engine.table.impl.sources.ReinterpretUtils; -import io.deephaven.engine.table.impl.vector.ObjectVectorColumnWrapper; import io.deephaven.engine.testutil.generator.BigDecimalGenerator; import io.deephaven.engine.testutil.generator.BigIntegerGenerator; import io.deephaven.engine.testutil.generator.ByteGenerator; @@ -28,8 +27,6 @@ import java.time.Duration; import java.time.Instant; -import java.time.temporal.TemporalAmount; -import java.util.LinkedHashMap; import java.util.Random; import static io.deephaven.engine.testutil.TstUtils.getTable;