Interface TableAdapter
- All Superinterfaces:
AttributeMap<Table>
,DynamicNode
,GridAttributes<Table>
,LivenessManager
,LivenessNode
,LivenessReferent
,LogOutputAppendable
,LongSizedDataStructure
,NotificationQueue.Dependency
,SystemicObject<Table>
,Table
,TableDefaults
,TableOperations<Table,
,Table> TableOperationsDefaults<Table,
Table>
TableDefaults
that allows implementors to selectively support an opt-in subset of
the typical concrete methods for a Table
implementation.-
Field Summary
Fields inherited from interface io.deephaven.engine.table.GridAttributes
COLUMN_DESCRIPTIONS_ATTRIBUTE, DESCRIPTION_ATTRIBUTE, LAYOUT_HINTS_ATTRIBUTE, SORTABLE_COLUMNS_ATTRIBUTE
Fields inherited from interface io.deephaven.engine.table.Table
ADD_ONLY_TABLE_ATTRIBUTE, AGGREGATION_ROW_LOOKUP_ATTRIBUTE, APPEND_ONLY_TABLE_ATTRIBUTE, BARRAGE_PERFORMANCE_KEY_ATTRIBUTE, BLINK_TABLE_ATTRIBUTE, FILTERABLE_COLUMNS_ATTRIBUTE, INITIALLY_EMPTY_COALESCED_SOURCE_TABLE_ATTRIBUTE, INPUT_TABLE_ATTRIBUTE, KEY_COLUMNS_ATTRIBUTE, MERGED_TABLE_ATTRIBUTE, NON_DISPLAY_TABLE, PLUGIN_NAME, PREVIEW_PARENT_TABLE, SNAPSHOT_VIEWPORT_TYPE, SORT_REVERSE_LOOKUP_ATTRIBUTE, SORTED_COLUMNS_ATTRIBUTE, SYSTEMIC_TABLE_ATTRIBUTE, TEST_SOURCE_TABLE_ATTRIBUTE, TOTALS_TABLE_ATTRIBUTE, UNIQUE_KEYS_ATTRIBUTE
Fields inherited from interface io.deephaven.engine.table.impl.TableDefaults
ZERO_LENGTH_TABLE_ARRAY
Fields inherited from interface io.deephaven.api.TableOperations
AGG_BY_PRESERVE_EMPTY_DEFAULT
Fields inherited from interface io.deephaven.api.TableOperationsDefaults
ZERO_LENGTH_COLUMNNAME_ARRAY, ZERO_LENGTH_FILTER_ARRAY
-
Method Summary
Modifier and TypeMethodDescriptiondefault void
addParentReference
(Object parent) Called on a dependent node to ensure that a strong reference is maintained to any parent object that is required for the proper maintenance and functioning of the dependent.default void
addUpdateListener
(ShiftObliviousListener listener, boolean replayInitialImage) Subscribe for updates to this table.default void
addUpdateListener
(TableUpdateListener listener) Subscribe for updates to this table.default boolean
addUpdateListener
(TableUpdateListener listener, long requiredLastNotificationStep) Subscribe for updates to this table if its last notification step matchesrequiredLastNotificationStep
.default Table
aggAllBy
(AggSpec spec, ColumnName... groupByColumns) default Table
aggBy
(Collection<? extends Aggregation> aggregations, boolean preserveEmpty, Table initialGroups, Collection<? extends ColumnName> groupByColumns) Produce an aggregated result by groupingthis
according to thegroupByColumns
and applyingaggregations
to each resulting group of rows.default LogOutput
default <R> R
Applies a function to this table.default Table
asOfJoin
(Table rightTable, Collection<? extends JoinMatch> exactMatches, AsOfJoinMatch asOfMatch, Collection<? extends JoinAddition> columnsToAdd) default void
Wait for updates to this Table.default boolean
awaitUpdate
(long timeout) Wait for updates to this Table.default CloseablePrimitiveIteratorOfByte
byteColumnIterator
(@NotNull String columnName) default CloseablePrimitiveIteratorOfChar
characterColumnIterator
(@NotNull String columnName) default Table
Clear all sorting restrictions that were applied to the grid.default <DATA_TYPE>
CloseableIterator<DATA_TYPE>columnIterator
(@NotNull String columnName) doubleColumnIterator
(@NotNull String columnName) default Table
dropColumns
(String... columnNames) Creates a new table without thecolumnNames
fromthis
.default void
Drop a previously-retained reference to this referent.default Table
exactJoin
(Table rightTable, Collection<? extends JoinMatch> columnsToMatch, Collection<? extends JoinAddition> columnsToAdd) Perform an exact-join with therightTable
.default Table
flatten()
Creates a version of this table with a flat RowSet.floatColumnIterator
(@NotNull String columnName) default @Nullable Object
getAttribute
(@NotNull String key) Get the value for the specified attribute key.Get an immutable set of all the attributes that have values in this AttributeMap.Get all attributes in this AttributeMap.getAttributes
(@Nullable Predicate<String> included) Get all attributes from this AttributeMap whose keys are accepted byincluded
.default <T> ColumnSource<T>
getColumnSource
(String sourceName) Retrieves aColumnSource
.default Map<String,
? extends ColumnSource<?>> default Collection<? extends ColumnSource<?>>
default TableDefinition
default String
default TrackingRowSet
default Table
getSubTable
(TrackingRowSet rowSet) Get aTable
that contains a sub-set of the rows fromthis
.default UpdateGraph
default WeakReference<? extends LivenessReferent>
Get aWeakReference
to this referent.default boolean
hasAttribute
(@NotNull String name) Check if the specified attribute exists in this AttributeMap.default Table
head
(long size) default Table
default Table
headPct
(double percent) Provides a head that selects a dynamic number of rows based on a percent.default CloseablePrimitiveIteratorOfInt
integerColumnIterator
(@NotNull String columnName) default boolean
isFailed()
default boolean
isFlat()
Return true if this table is guaranteed to be flat.default boolean
Is the node updating?default Table
join
(Table rightTable, Collection<? extends JoinMatch> columnsToMatch, Collection<? extends JoinAddition> columnsToAdd, int reserveBits) Perform a cross join with therightTable
.default Table
lazyUpdate
(Collection<? extends Selectable> columns) Compute column formulas on demand.default CloseablePrimitiveIteratorOfLong
longColumnIterator
(@NotNull String columnName) default Table
moveColumns
(int index, String... columnsToMove) Produce a new table with the specified columns moved to the specifiedindex
.default Table
naturalJoin
(Table rightTable, Collection<? extends JoinMatch> columnsToMatch, Collection<? extends JoinAddition> columnsToAdd) Perform an exact-join with therightTable
.default <DATA_TYPE>
CloseableIterator<DATA_TYPE>objectColumnIterator
(@NotNull String columnName) default <DATA_TYPE>
CloseableIterator<DATA_TYPE>objectColumnIterator
(@NotNull String columnName, @NotNull Class<? extends DATA_TYPE> clazz) default PartitionedTable
partitionBy
(boolean dropKeys, String... keyColumnNames) Create aPartitionedTable
from this table, partitioned according to the specified key columns.default PartitionedTable
partitionedAggBy
(Collection<? extends Aggregation> aggregations, boolean preserveEmpty, Table initialGroups, String... keyColumnNames) Convenience method that performs anTableOperations.aggBy(io.deephaven.api.agg.Aggregation)
and wraps the result in aPartitionedTable
.default Table
rangeJoin
(@NotNull Table rightTable, @NotNull Collection<? extends JoinMatch> exactMatches, @NotNull RangeJoinMatch rangeMatch, @NotNull Collection<? extends Aggregation> aggregations) Perform a range join withrightTable
.default Table
If this table is a blink table, i.e.default void
removeUpdateListener
(ShiftObliviousListener listener) Unsubscribe the supplied listener.default void
removeUpdateListener
(TableUpdateListener listener) Unsubscribe the supplied listener.default Table
renameColumns
(Collection<Pair> pairs) Produce a new table with the specified columns renamed using the specifiedpairs
.default Table
restrictSortTo
(@NotNull String... allowedSortingColumns) Disallow sorting on all but the specified columns.default Table
retainingAttributes
(@NotNull Collection<String> toRetain) Get an AttributeMap that is the same asthis
, but with only the specified attributes retained.default Table
reverse()
default RollupTable
rollup
(Collection<? extends Aggregation> aggregations, boolean includeConstituents, Collection<? extends ColumnName> groupByColumns) Create a rollup table.default boolean
satisfied
(long step) Is this ancestor satisfied? Note that this method must be safe to call on any thread.default Table
select
(Collection<? extends Selectable> columns) default Table
selectDistinct
(Collection<? extends Selectable> columns) default Table
setLayoutHints
(@NotNull String hints) Set layout hints for this grid.default boolean
setRefreshing
(boolean refreshing) Change the node's run mode.default Table
setTotalsTable
(String directive) Set a totals table for this Table.shortColumnIterator
(@NotNull String columnName) default long
size()
The size of this data structure.default Table
slice
(long firstPositionInclusive, long lastPositionExclusive) Extracts a subset of a table by row position.default Table
slicePct
(double startPercentInclusive, double endPercentExclusive) Extracts a subset of a table by row percentages.default Table
snapshot()
Creates a table with a single static snapshot ofthis
.default Table
snapshotWhen
(Table trigger, SnapshotWhenOptions options) Creates a table that captures a snapshot ofthis
whenevertrigger
updates.default Table
sort
(Collection<SortColumn> columnsToSortBy) default Table
tail
(long size) default Table
default Table
tailPct
(double percent) Provides a tail that selects a dynamic number of rows based on a percent.default TreeTable
Create a hierarchical tree table.default boolean
tryManage
(@NotNull LivenessReferent referent) Attempt to addreferent
to this manager.default boolean
If this referent is "live", behave asLivenessReferent.retainReference()
and return true.default boolean
tryUnmanage
(@NotNull LivenessReferent referent) If this manager manages referent one or more times, drop one such reference.default boolean
tryUnmanage
(@NotNull Stream<? extends LivenessReferent> referents) For each referent in referents, if this manager manages referent one or more times, drop one such reference.default Table
ungroup
(boolean nullFill, Collection<? extends ColumnName> columnsToUngroup) Ungroups a table by expanding columns of arrays or vectors into columns of singular values, creating one row in the output table for each value in the columns to be ungrouped.default Table
update
(Collection<? extends Selectable> columns) default Table
updateBy
(UpdateByControl control, Collection<? extends UpdateByOperation> operations, Collection<? extends ColumnName> byColumns) Creates a table with additional columns calculated from window-based aggregations of columns in its parent.default Table
updateView
(Collection<? extends Selectable> columns) default Table
view
(Collection<? extends Selectable> columns) default Table
default Table
whereIn
(Table rightTable, Collection<? extends JoinMatch> columnsToMatch) Filtersthis
table based on the set of values in therightTable
.default Table
whereNotIn
(Table rightTable, Collection<? extends JoinMatch> columnsToMatch) Filtersthis
table based on the set of values not in therightTable
.default Table
withAttributes
(@NotNull Map<String, Object> toAdd) Get an AttributeMap that is the same asthis
, but with the specified attributes added/replaced.default Table
withAttributes
(@NotNull Map<String, Object> toAdd, @NotNull Collection<String> toRemove) Get an AttributeMap that is the same asthis
, but with the specified attributes added/replaced or removed.default Table
withColumnDescription
(@NotNull String column, @NotNull String description) Add a description for a specific column.default Table
withColumnDescriptions
(@NotNull Map<String, String> descriptions) Add a set of column descriptions to the grid.default Table
withDescription
(@NotNull String description) Apply a description to this grid.default Table
Set the table's key columns.default Table
withoutAttributes
(@NotNull Collection<String> toRemove) Get an AttributeMap that is the same asthis
, but with the specified attributes removed.default Table
withUniqueKeys
(String... columns) Set the table's key columns and indicate that each key set will be unique.default Table
wouldMatch
(WouldMatchPair... matchers) A table operation that applies the supplied predicate to each row in the table and produces columns containing the pass/fail result of the predicate application.Methods inherited from interface io.deephaven.engine.liveness.LivenessManager
manage, unmanage, unmanage
Methods inherited from interface io.deephaven.engine.liveness.LivenessReferent
getReferentDescription, retainReference
Methods inherited from interface io.deephaven.util.datastructures.LongSizedDataStructure
intSize, intSize
Methods inherited from interface io.deephaven.engine.updategraph.NotificationQueue.Dependency
getUpdateGraph
Methods inherited from interface io.deephaven.engine.util.systemicmarking.SystemicObject
isSystemicObject, markSystemic
Methods inherited from interface io.deephaven.engine.table.impl.TableDefaults
addUpdateListener, applyToAllBy, applyToAllBy, applyToAllBy, close, coalesce, dropColumnFormats, formatColumns, formatColumnWhere, formatRowWhere, getColumnSource, getColumnSource, hasColumns, hasColumns, headBy, isEmpty, join, meta, moveColumnsDown, moveColumnsUp, numColumns, partitionBy, releaseCachedResources, renameAllColumns, renameColumns, rollup, rollup, rollup, rollup, rollup, selectDistinct, sizeForInstrumentation, snapshotWhen, snapshotWhen, tailBy, wouldMatch
Methods inherited from interface io.deephaven.api.TableOperationsDefaults
absSumBy, absSumBy, absSumBy, absSumBy, aggAllBy, aggAllBy, aggAllBy, aggBy, aggBy, aggBy, aggBy, aggBy, aggBy, aggBy, aj, aj, avgBy, avgBy, avgBy, avgBy, countBy, countBy, countBy, countBy, dropColumns, dropColumns, exactJoin, exactJoin, firstBy, firstBy, firstBy, firstBy, groupBy, groupBy, groupBy, join, join, join, lastBy, lastBy, lastBy, lastBy, lazyUpdate, maxBy, maxBy, maxBy, maxBy, medianBy, medianBy, medianBy, medianBy, minBy, minBy, minBy, minBy, naturalJoin, naturalJoin, raj, raj, rangeJoin, select, select, selectDistinct, sort, sortDescending, stdBy, stdBy, stdBy, stdBy, sumBy, sumBy, sumBy, sumBy, ungroup, ungroup, ungroup, ungroup, update, updateBy, updateBy, updateBy, updateBy, updateBy, updateBy, updateBy, updateBy, updateView, varBy, varBy, varBy, varBy, view, wavgBy, wavgBy, wavgBy, wavgBy, where, whereIn, whereNotIn, wsumBy, wsumBy, wsumBy, wsumBy
-
Method Details
-
append
- Specified by:
append
in interfaceLogOutputAppendable
-
size
default long size()Description copied from interface:LongSizedDataStructure
The size of this data structure.- Specified by:
size
in interfaceLongSizedDataStructure
- Returns:
- The size
-
getDefinition
- Specified by:
getDefinition
in interfaceTable
-
getDescription
- Specified by:
getDescription
in interfaceTable
-
getUpdateGraph
- Specified by:
getUpdateGraph
in interfaceNotificationQueue.Dependency
- Returns:
- the update graph that this dependency is a part of
-
isRefreshing
default boolean isRefreshing()Description copied from interface:DynamicNode
Is the node updating?- Specified by:
isRefreshing
in interfaceDynamicNode
- Specified by:
isRefreshing
in interfaceTable
- Returns:
- true if the node is updating; false otherwise.
-
setRefreshing
default boolean setRefreshing(boolean refreshing) Description copied from interface:DynamicNode
Change the node's run mode.- Specified by:
setRefreshing
in interfaceDynamicNode
- Parameters:
refreshing
- true to cause the node to update; false otherwise.- Returns:
- new refreshing state
-
addParentReference
Description copied from interface:DynamicNode
Called on a dependent node to ensure that a strong reference is maintained to any parent object that is required for the proper maintenance and functioning of the dependent. In the most common case, the parent object is a child listener to a parent node. The parent node only keeps a weak reference to its child listener, but the listener maintains a strong reference to the parent node. In this scenario, the only strong reference to the listener (and thus indirectly to the parent node itself) is the reference kept by the dependent node.- Specified by:
addParentReference
in interfaceDynamicNode
- Parameters:
parent
- A parent of this node
-
getRowSet
- Specified by:
getRowSet
in interfaceTable
- Returns:
- The
TrackingRowSet
that exposes the row keys present in this Table
-
isFlat
default boolean isFlat()Description copied from interface:Table
Return true if this table is guaranteed to be flat. The RowSet of a flat table will be from 0...numRows-1. -
withAttributes
default Table withAttributes(@NotNull @NotNull Map<String, Object> toAdd, @NotNull @NotNull Collection<String> toRemove) Description copied from interface:AttributeMap
Get an AttributeMap that is the same asthis
, but with the specified attributes added/replaced or removed. If the supplied attributestoAdd
andtoRemove
would not result in any changes tothis
, implementations may returnthis
.- Specified by:
withAttributes
in interfaceAttributeMap<Table>
- Parameters:
toAdd
- Attribute key-value pairs to add or replace (if the key already exists onthis
). Neither keys nor values may benull
.toRemove
- Attribute keys to remove- Returns:
- The result AttributeMap
-
withAttributes
Description copied from interface:AttributeMap
Get an AttributeMap that is the same asthis
, but with the specified attributes added/replaced. If the supplied attributestoAdd
would not result in any changes tothis
, implementations may returnthis
.- Specified by:
withAttributes
in interfaceAttributeMap<Table>
- Parameters:
toAdd
- Attribute key-value pairs to add or replace (if the key already exists onthis
)- Returns:
- The result AttributeMap
-
withoutAttributes
Description copied from interface:AttributeMap
Get an AttributeMap that is the same asthis
, but with the specified attributes removed. If the supplied attributestoRemove
would not result in any changes tothis
, implementations may returnthis
.- Specified by:
withoutAttributes
in interfaceAttributeMap<Table>
- Parameters:
toRemove
- Attribute keys to remove- Returns:
- The result AttributeMap
-
retainingAttributes
Description copied from interface:AttributeMap
Get an AttributeMap that is the same asthis
, but with only the specified attributes retained. If the supplied attributestoAdd
would not result in any changes tothis
, implementations may returnthis
.- Specified by:
retainingAttributes
in interfaceAttributeMap<Table>
- Parameters:
toRetain
- Attribute keys to retain- Returns:
- The result AttributeMap
-
getAttribute
Description copied from interface:AttributeMap
Get the value for the specified attribute key.- Specified by:
getAttribute
in interfaceAttributeMap<Table>
- Parameters:
key
- The name of the attribute- Returns:
- The value, or
null
if there was none.
-
getAttributeKeys
Description copied from interface:AttributeMap
Get an immutable set of all the attributes that have values in this AttributeMap.- Specified by:
getAttributeKeys
in interfaceAttributeMap<Table>
- Returns:
- An immutable set of attribute keys (names)
-
hasAttribute
Description copied from interface:AttributeMap
Check if the specified attribute exists in this AttributeMap.- Specified by:
hasAttribute
in interfaceAttributeMap<Table>
- Parameters:
name
- The key (name) of the attribute- Returns:
true
if the attribute exists
-
getAttributes
Description copied from interface:AttributeMap
Get all attributes in this AttributeMap.- Specified by:
getAttributes
in interfaceAttributeMap<Table>
- Returns:
- An immutable map containing all attributes from this AttributeMap
-
getAttributes
@NotNull default @NotNull Map<String,Object> getAttributes(@Nullable @Nullable Predicate<String> included) Description copied from interface:AttributeMap
Get all attributes from this AttributeMap whose keys are accepted byincluded
.- Specified by:
getAttributes
in interfaceAttributeMap<Table>
- Parameters:
included
- A predicate to determine which attribute keys to include- Returns:
- An immutable map containing AttributeMap's attributes whose keys are accepted by
included
-
getColumnSource
Description copied from interface:Table
Retrieves aColumnSource
. It is conveniently cast toColumnSource<Object>
using the type that caller expects. This differs fromTable.getColumnSource(String, Class)
which uses the providedClass
object to verify that the data type is a subclass of the expected class.The success of this call is equivalent to
getDefinition().checkColumn(sourceName)
, which is the preferred way to check for compatibility in scenarios where the caller does not want the implementation to potentially invokeTable.coalesce()
.- Specified by:
getColumnSource
in interfaceTable
- Type Parameters:
T
- The target type, as a type parameter. Inferred from context.- Parameters:
sourceName
- The name of the column- Returns:
- The column source for
sourceName
, parameterized byT
- See Also:
-
getColumnSourceMap
- Specified by:
getColumnSourceMap
in interfaceTable
-
getColumnSources
- Specified by:
getColumnSources
in interfaceTable
-
columnIterator
default <DATA_TYPE> CloseableIterator<DATA_TYPE> columnIterator(@NotNull @NotNull String columnName) - Specified by:
columnIterator
in interfaceTable
-
characterColumnIterator
default CloseablePrimitiveIteratorOfChar characterColumnIterator(@NotNull @NotNull String columnName) - Specified by:
characterColumnIterator
in interfaceTable
-
byteColumnIterator
- Specified by:
byteColumnIterator
in interfaceTable
-
shortColumnIterator
- Specified by:
shortColumnIterator
in interfaceTable
-
integerColumnIterator
- Specified by:
integerColumnIterator
in interfaceTable
-
longColumnIterator
- Specified by:
longColumnIterator
in interfaceTable
-
floatColumnIterator
- Specified by:
floatColumnIterator
in interfaceTable
-
doubleColumnIterator
default CloseablePrimitiveIteratorOfDouble doubleColumnIterator(@NotNull @NotNull String columnName) - Specified by:
doubleColumnIterator
in interfaceTable
-
objectColumnIterator
default <DATA_TYPE> CloseableIterator<DATA_TYPE> objectColumnIterator(@NotNull @NotNull String columnName) - Specified by:
objectColumnIterator
in interfaceTable
-
objectColumnIterator
default <DATA_TYPE> CloseableIterator<DATA_TYPE> objectColumnIterator(@NotNull @NotNull String columnName, @NotNull @NotNull Class<? extends DATA_TYPE> clazz) - Specified by:
objectColumnIterator
in interfaceTable
-
wouldMatch
Description copied from interface:Table
A table operation that applies the supplied predicate to each row in the table and produces columns containing the pass/fail result of the predicate application. This is similar toTableOperations.where(String...)
except that instead of selecting only rows that meet the criteria, new columns are added with the result of the comparison.- Specified by:
wouldMatch
in interfaceTable
- Returns:
- a table with new columns containing the filter result for each row.
-
dropColumns
Description copied from interface:TableOperations
Creates a new table without thecolumnNames
fromthis
.- Specified by:
dropColumns
in interfaceTableOperations<Table,
Table> - Parameters:
columnNames
- the columns to drop- Returns:
- the table
-
renameColumns
Description copied from interface:Table
Produce a new table with the specified columns renamed using the specifiedpairs
. The renames are simultaneous and unordered, enabling direct swaps between column names. The resulting table retains the original column ordering after applying the specified renames.IllegalArgumentException
will be thrown:- if a source column does not exist
- if a source column is used more than once
- if a destination column is used more than once
- Specified by:
renameColumns
in interfaceTable
- Parameters:
pairs
- The columns to rename- Returns:
- The new table, with the columns renamed
-
moveColumns
Description copied from interface:Table
Produce a new table with the specified columns moved to the specifiedindex
. Column indices begin at 0. Columns can be renamed with the usual syntax, i.e."NewColumnName=OldColumnName")
. The renames are simultaneous and unordered, enabling direct swaps between column names. The resulting table retains the original column ordering except for the specified columns, which are inserted at the specified index, in the order ofcolumnsToMove
, after the effects of applying any renames.IllegalArgumentException
will be thrown:- if a source column does not exist
- if a source column is used more than once
- if a destination column is used more than once
Values of
index
outside the range of 0 to the number of columns in the table (exclusive) will be clamped to the nearest valid index.- Specified by:
moveColumns
in interfaceTable
- Parameters:
index
- The index to which the specified columns should be movedcolumnsToMove
- The columns to move to the specified index (and, optionally, to rename)- Returns:
- The new table, with the columns rearranged as explained above
-
slice
Description copied from interface:TableOperations
Extracts a subset of a table by row position.If both firstPosition and lastPosition are positive, then the rows are counted from the beginning of the table. The firstPosition is inclusive, and the lastPosition is exclusive. The
TableOperations.head(long)
(N) call is equivalent to slice(0, N). The firstPosition must be less than or equal to the lastPosition.If firstPosition is positive and lastPosition is negative, then the firstRow is counted from the beginning of the table, inclusively. The lastPosition is counted from the end of the table. For example, slice(1, -1) includes all rows but the first and last. If the lastPosition would be before the firstRow, the result is an emptyTable.
If firstPosition is negative, and lastPosition is zero, then the firstRow is counted from the end of the table, and the end of the slice is the size of the table. slice(-N, 0) is equivalent to
TableOperations.tail(long)
(N).If the firstPosition is negative and the lastPosition is negative, they are both counted from the end of the table. For example, slice(-2, -1) returns the second to last row of the table.
If firstPosition is negative and lastPosition is positive, then firstPosition is counted from the end of the table, inclusively. The lastPosition is counted from the beginning of the table, exclusively. For example, slice(-3, 5) returns all rows starting from the third-last row to the fifth row of the table. If there are no rows between these positions, the function will return an empty table.
- Specified by:
slice
in interfaceTableOperations<Table,
Table> - Parameters:
firstPositionInclusive
- the first position to include in the resultlastPositionExclusive
- the last position to include in the result- Returns:
- a new Table, which is the request subset of rows from the original table
-
slicePct
Description copied from interface:Table
Extracts a subset of a table by row percentages.Returns a subset of table in the range [floor(startPercentInclusive * sizeOfTable), floor(endPercentExclusive * sizeOfTable)). For example, for a table of size 10, slicePct(0.1, 0.7) will return a subset from the second row to the seventh row. Similarly, slicePct(0, 1) would return the entire table (because row positions run from 0 to size-1). The percentage arguments must be in range [0,1], otherwise the function returns an error.
- Specified by:
slicePct
in interfaceTable
- Parameters:
startPercentInclusive
- the starting percentage point for rows to include in the result, range [0, 1]endPercentExclusive
- the ending percentage point for rows to include in the result, range [0, 1]- Returns:
- a new Table, which is the requested subset of rows from the original table
-
headPct
Description copied from interface:Table
Provides a head that selects a dynamic number of rows based on a percent. -
tailPct
Description copied from interface:Table
Provides a tail that selects a dynamic number of rows based on a percent. -
exactJoin
default Table exactJoin(Table rightTable, Collection<? extends JoinMatch> columnsToMatch, Collection<? extends JoinAddition> columnsToAdd) Description copied from interface:TableOperations
Perform an exact-join with therightTable
.Similar to
TableOperations.naturalJoin(Object, Collection, Collection)
, but requires that exactly one match from therightTable
.- Specified by:
exactJoin
in interfaceTableOperations<Table,
Table> - Parameters:
rightTable
- The right side table on the join.columnsToMatch
- The match pair conditions.columnsToAdd
- The columns from the right side that need to be added to the left side as a result of the match.- Returns:
- the exact-joined table
-
asOfJoin
default Table asOfJoin(Table rightTable, Collection<? extends JoinMatch> exactMatches, AsOfJoinMatch asOfMatch, Collection<? extends JoinAddition> columnsToAdd) - Specified by:
asOfJoin
in interfaceTableOperations<Table,
Table>
-
naturalJoin
default Table naturalJoin(Table rightTable, Collection<? extends JoinMatch> columnsToMatch, Collection<? extends JoinAddition> columnsToAdd) Description copied from interface:TableOperations
Perform an exact-join with therightTable
.Requires zero or one match from the
rightTable
.- Specified by:
naturalJoin
in interfaceTableOperations<Table,
Table> - Parameters:
rightTable
- The right side table on the join.columnsToMatch
- The match pair conditions.columnsToAdd
- The columns from the right side that need to be added to the left side as a result of the match.- Returns:
- the natural-joined table
-
join
default Table join(Table rightTable, Collection<? extends JoinMatch> columnsToMatch, Collection<? extends JoinAddition> columnsToAdd, int reserveBits) Description copied from interface:TableOperations
Perform a cross join with therightTable
.Returns a table that is the cartesian product of left rows X right rows, with one column for each of
this
table's columns, and one column corresponding to each of therightTable
's columns that are included in thecolumnsToAdd
argument. The rows are ordered first by thethis
table then by therightTable
. IfcolumnsToMatch
is non-empty then the product is filtered by the supplied match conditions.To efficiently produce updates, the bits that represent a key for a given row are split into two. Unless specified, join reserves 16 bits to represent a right row. When there are too few bits to represent all of the right rows for a given aggregation group the table will shift a bit from the left side to the right side. The default of 16 bits was carefully chosen because it results in an efficient implementation to process live updates.
An io.deephaven.engine.table.impl.util.OutOfKeySpaceException is thrown when the total number of bits needed to express the result table exceeds that needed to represent Long.MAX_VALUE. There are a few work arounds:
- If the left table is sparse, consider flattening the left table.
- If there are no key-columns and the right table is sparse, consider flattening the right table.
- If the maximum size of a right table's group is small, you can reserve fewer bits by setting
reserveBits
on initialization.Note: If you know that a given group has at most one right-row then you should prefer using
TableOperations.naturalJoin(Object, Collection, Collection)
.- Specified by:
join
in interfaceTableOperations<Table,
Table> - Parameters:
rightTable
- The right side table on the join.columnsToMatch
- The match pair conditions.columnsToAdd
- The columns from the right side that need to be added to the left side as a result of the match.reserveBits
- The number of bits to reserve for rightTable groups.- Returns:
- a new table joined according to the specification in columnsToMatch and columnsToAdd
-
rangeJoin
default Table rangeJoin(@NotNull @NotNull Table rightTable, @NotNull @NotNull Collection<? extends JoinMatch> exactMatches, @NotNull @NotNull RangeJoinMatch rangeMatch, @NotNull @NotNull Collection<? extends Aggregation> aggregations) Description copied from interface:TableOperations
Perform a range join withrightTable
. For each row inthis
Table, this operation joinsaggregations
over a range of responsive rows fromrightTable
according to zero-or-more exact join matches and one range join match.Matching Rules
The exact join matches identify possibly-responsive rows according to exactly matching values between the left exact match columns and the right exact match columns, similar to other join operations. The range join match bounds the beginning of the responsive range for a given output row by the relationship between a left start column and a right range column, governed by the rangeStartRule, and bounds the end of the responsive range for a given output row by the relationship between a left end column and the same right range column, governed by the rangeEndRule.
Right Table Row-Inclusion Criteria and Relative Ordering Requirements
Rows from
rightTable
withnull
orNaN
values for the right range column are discarded; that is, they are never included in the responsive range for any output row. Within a group sharing the same values for the right exact match columns,rightTable
must be relatively ordered (as ifsorted
) according to the right range column for all rows that are not discarded.Special Cases
In order to produce aggregated output, it is required that the two relative match expressions define a range of values to determine the responsive rows to aggregate. There are a few noteworthy special cases of ranges.
- empty range
- An empty range occurs for any left row with no responsive right rows. That is, no non-
null
, non-NaN
right rows were found using the exact join matches, or none were in range according to the range join match. - single-value ranges
- A single-value range is a range where the left row’s values for the left start column and left end
column are equal and both relative matches are inclusive (
<=
and>=
, respectively). For a single-value range, only rows within the bucket where the right range column matches the single value are included in the output aggregations. - invalid ranges
- An invalid range occurs in two scenarios: First, when the range is inverted, i.e. when the value of
the left start column is greater than the value of the left end column. Second, when either relative-match is
exclusive (
<
or>
) and the value in the left start column is equal to the value in the left end column (becausevalue < value == false
). Specifying "allow preceding" or "allow following" for either rule will not constitute an exception to either of these defined scenarios. For invalid ranges, the result row will benull
for all aggregation output columns. - undefined ranges
- An undefined range occurs when either the left start column or the left end column is
NaN
. For rows with an undefined range, the corresponding output values will benull
(as with invalid ranges). - Unbounded Ranges
- A partially or fully unbounded range occurs when either the left start column or the left end column
is
null
. If the left start column value isnull
the range is unbounded at the beginning, and all matched right rows will be included if they respect the match rule for the left end column. If the left end column value isnull
the range is unbounded at the end, and all matched right rows will be included if they respect the match rule for the left start column. If both the left start column and left end column values arenull
the range is unbounded in both directions, and all matched right rows will be included.
- Specified by:
rangeJoin
in interfaceTableOperations<Table,
Table> - Parameters:
rightTable
- The Table to join withexactMatches
- Possibly-empty collection ofjoin matches
that dictate exact-match criteria. That is, rows fromrightTable
that might be responsive to rows fromthis
Table will have identical values for the column pairs expressed by these matches.rangeMatch
- Specifies the range match criteria for determining the responsive rows fromrightTable
for each row fromthis
Table, within the buckets created by matching on theexactMatches
aggregations
- Theaggregations
to perform over the responsive ranges fromrightTable
for each row fromthis
Table- Returns:
- The result Table
-
headBy
-
tailBy
-
apply
Description copied from interface:Table
Applies a function to this table.This is useful if you have a reference to a table or a proxy and want to run a series of operations against the table without each individual operation resulting in an RMI.
-
removeBlink
Description copied from interface:Table
If this table is a blink table, i.e. it hasTable.BLINK_TABLE_ATTRIBUTE
set totrue
, return a child without the attribute, restoring standard semantics for aggregation operations.- Specified by:
removeBlink
in interfaceTable
- Returns:
- A non-blink child table, or this table if it is not a blink table
-
partitionBy
Description copied from interface:Table
Create aPartitionedTable
from this table, partitioned according to the specified key columns.The underlying partitioned table backing the result contains each row in
this
table in exactly one of the result's constituent tables.- Specified by:
partitionBy
in interfaceTable
- Parameters:
dropKeys
- Whether to drop key columns in the output constituent tableskeyColumnNames
- The names of the key columns to partition by- Returns:
- A
PartitionedTable
keyed bykeyColumnNames
-
partitionedAggBy
default PartitionedTable partitionedAggBy(Collection<? extends Aggregation> aggregations, boolean preserveEmpty, Table initialGroups, String... keyColumnNames) Description copied from interface:Table
Convenience method that performs anTableOperations.aggBy(io.deephaven.api.agg.Aggregation)
and wraps the result in aPartitionedTable
. Ifaggregations
does not include apartition
, one will be added automatically with the default constituent column name and behavior used inTable.partitionBy(String...)
.- Specified by:
partitionedAggBy
in interfaceTable
- Parameters:
aggregations
- Theaggregations
to applypreserveEmpty
- Whether to keep result rows for groups that are initially empty or become empty as a result of updates. Each aggregation operator defines its own value for empty groups.initialGroups
- A table whose distinct combinations of values for thegroupByColumns
should be used to create an initial set of aggregation groups. All other columns are ignored. This is useful in combination withpreserveEmpty == true
to ensure that particular groups appear in the result table, or withpreserveEmpty == false
to control the encounter order for a collection of groups and thus their relative order in the result. Changes toinitialGroups
are not expected or handled; ifinitialGroups
is a refreshing table, only its contents at instantiation time will be used. IfinitialGroups == null
, the result will be the same as if a table with no rows was supplied.keyColumnNames
- The names of the key columns to aggregate by- Returns:
- A
PartitionedTable
keyed bykeyColumnNames
-
rollup
default RollupTable rollup(Collection<? extends Aggregation> aggregations, boolean includeConstituents, Collection<? extends ColumnName> groupByColumns) Description copied from interface:Table
Create a rollup table.A rollup table aggregates by the specified columns, and then creates a hierarchical table which re-aggregates using one less aggregation column on each level. The column that is no longer part of the aggregation key is replaced with null on each level.
-
tree
Description copied from interface:Table
Create a hierarchical tree table.The structure of the table is encoded by an "id" and a "parent" column. The id column should represent a unique identifier for a given row, and the parent column indicates which row is the parent for a given row. Rows that have a
null
parent are part of the "root" table.It is possible for rows to be "orphaned" if their parent is non-
null
and does not exist in the table. SeeTreeTable.promoteOrphans(Table, String, String)
.- Specified by:
tree
in interfaceTable
- Parameters:
idColumn
- The name of a column containing a unique identifier for a particular row in the tableparentColumn
- The name of a column containing the parent's identifier,null
for rows that are part of the root table- Returns:
- A
TreeTable
organized according to the parent-child relationships expressed byidColumn
andparentColumn
-
getSubTable
Description copied from interface:Table
Get aTable
that contains a sub-set of the rows fromthis
. The result will share the samecolumn sources
anddefinition
as this table.The result will not update on its own. The caller must also establish an appropriate listener to update
rowSet
and propagateupdates
.- Specified by:
getSubTable
in interfaceTable
- Parameters:
rowSet
- Therow set
for the result- Returns:
- A new sub-table
-
flatten
Description copied from interface:Table
Creates a version of this table with a flat RowSet. -
withKeys
Description copied from interface:Table
Set the table's key columns. -
withUniqueKeys
Description copied from interface:Table
Set the table's key columns and indicate that each key set will be unique.- Specified by:
withUniqueKeys
in interfaceTable
- Returns:
- A copy of this table with the unique key columns specified, or this if no change was needed
-
setTotalsTable
Description copied from interface:Table
Set a totals table for this Table.- Specified by:
setTotalsTable
in interfaceTable
- Parameters:
directive
- A packed string of totals table instructions- Returns:
- A copy of this Table with the
totals table attribute
set
-
awaitUpdate
Description copied from interface:Table
Wait for updates to this Table. Should not be invoked from a
TableListener
or othernotification
on this Table'supdate graph
. It may be suitable to wait from another update graph if doing so does not introduce any cycles.In some implementations, this call may also terminate in case of interrupt or spurious wakeup.
- Specified by:
awaitUpdate
in interfaceTable
- Throws:
InterruptedException
- In the event this thread is interrupted- See Also:
-
awaitUpdate
Description copied from interface:Table
Wait for updates to this Table. Should not be invoked from a
TableListener
or othernotification
on this Table'supdate graph
. It may be suitable to wait from another update graph if doing so does not introduce any cycles.In some implementations, this call may also terminate in case of interrupt or spurious wakeup.
- Specified by:
awaitUpdate
in interfaceTable
- Parameters:
timeout
- The maximum time to wait in milliseconds.- Returns:
- false if the timeout elapses without notification, true otherwise.
- Throws:
InterruptedException
- In the event this thread is interrupted- See Also:
-
addUpdateListener
Description copied from interface:Table
Subscribe for updates to this table. After the optional initial image,listener
will be invoked via theNotificationQueue
associated with this Table.- Specified by:
addUpdateListener
in interfaceTable
- Parameters:
listener
- listener for updatesreplayInitialImage
- true to process updates for all initial rows in the table plus all changes; false to only process changes
-
addUpdateListener
Description copied from interface:Table
Subscribe for updates to this table.listener
will be invoked via theNotificationQueue
associated with this Table.- Specified by:
addUpdateListener
in interfaceTable
- Parameters:
listener
- listener for updates
-
addUpdateListener
Description copied from interface:Table
Subscribe for updates to this table if its last notification step matchesrequiredLastNotificationStep
.listener
will be invoked via theNotificationQueue
associated with this Table.- Specified by:
addUpdateListener
in interfaceTable
- Parameters:
listener
- listener for updatesrequiredLastNotificationStep
- the expected last notification step to match- Returns:
- true if the listener was added, false if the last notification step requirement was not met
-
removeUpdateListener
Description copied from interface:Table
Unsubscribe the supplied listener.- Specified by:
removeUpdateListener
in interfaceTable
- Parameters:
listener
- listener for updates
-
removeUpdateListener
Description copied from interface:Table
Unsubscribe the supplied listener.- Specified by:
removeUpdateListener
in interfaceTable
- Parameters:
listener
- listener for updates
-
isFailed
default boolean isFailed() -
tryManage
Description copied from interface:LivenessManager
Attempt to addreferent
to this manager. Will succeed ifreferent
is live and if this manager is not aLivenessReferent
or is live.- Specified by:
tryManage
in interfaceLivenessManager
- Parameters:
referent
- The referent to add- Returns:
- Whether the referent was in fact added
-
tryUnmanage
Description copied from interface:LivenessManager
If this manager manages referent one or more times, drop one such reference. If this manager is also aLivenessReferent
, then this method is a no-op ifthis
is not live.- Specified by:
tryUnmanage
in interfaceLivenessManager
- Parameters:
referent
- The referent to drop- Returns:
- If this node is also a
LivenessReferent
, whether this node was live and thus in fact tried to drop a reference. Else always returnstrue
if dropping a reference via this method is supported by the implementation.
-
tryUnmanage
Description copied from interface:LivenessManager
For each referent in referents, if this manager manages referent one or more times, drop one such reference. If this manager is also aLivenessReferent
, then this method is a no-op ifthis
is not live.- Specified by:
tryUnmanage
in interfaceLivenessManager
- Parameters:
referents
- The referents to drop- Returns:
- If this node is also a
LivenessReferent
, whether this node was live and thus in fact tried to drop the references. Else always returnstrue
if dropping a reference via this method is supported by the implementation.
-
tryRetainReference
default boolean tryRetainReference()Description copied from interface:LivenessReferent
If this referent is "live", behave asLivenessReferent.retainReference()
and return true. Otherwise, returns false rather than throwing an exception.- Specified by:
tryRetainReference
in interfaceLivenessReferent
- Returns:
- True if this referent was retained, false otherwise
-
dropReference
default void dropReference()Description copied from interface:LivenessReferent
Drop a previously-retained reference to this referent.- Specified by:
dropReference
in interfaceLivenessReferent
-
getWeakReference
Description copied from interface:LivenessReferent
Get aWeakReference
to this referent. This may be cached, or newly created.- Specified by:
getWeakReference
in interfaceLivenessReferent
- Returns:
- A new or cached reference to this referent
-
satisfied
default boolean satisfied(long step) Description copied from interface:NotificationQueue.Dependency
Is this ancestor satisfied? Note that this method must be safe to call on any thread.- Specified by:
satisfied
in interfaceNotificationQueue.Dependency
- Parameters:
step
- The step for which we are testing satisfaction- Returns:
- Whether the dependency is satisfied on
step
(and will not fire subsequent notifications)
-
head
- Specified by:
head
in interfaceTableOperations<Table,
Table>
-
tail
- Specified by:
tail
in interfaceTableOperations<Table,
Table>
-
reverse
- Specified by:
reverse
in interfaceTableOperations<Table,
Table>
-
snapshot
Description copied from interface:TableOperations
Creates a table with a single static snapshot ofthis
.- Specified by:
snapshot
in interfaceTableOperations<Table,
Table> - Returns:
- the snapshot
-
snapshotWhen
Description copied from interface:TableOperations
Creates a table that captures a snapshot ofthis
whenevertrigger
updates.- Specified by:
snapshotWhen
in interfaceTableOperations<Table,
Table> - Parameters:
trigger
- the trigger tableoptions
- the snapshot options- Returns:
- the snapshotting table
- See Also:
-
sort
- Specified by:
sort
in interfaceTableOperations<Table,
Table>
-
where
- Specified by:
where
in interfaceTableOperations<Table,
Table>
-
whereIn
Description copied from interface:TableOperations
Filtersthis
table based on the set of values in therightTable
.Note that when the
rightTable
ticks, all of the rows inthis
table are going to be re-evaluated, thus the intention is that therightTable
is fairly slow moving compared withthis
table.- Specified by:
whereIn
in interfaceTableOperations<Table,
Table> - Parameters:
rightTable
- the filtering table.columnsToMatch
- the columns to match between the two tables- Returns:
- a new table filtered on right table
-
whereNotIn
Description copied from interface:TableOperations
Filtersthis
table based on the set of values not in therightTable
.Note that when the
rightTable
ticks, all of the rows inthis
table are going to be re-evaluated, thus the intention is that therightTable
is fairly slow moving compared withthis
table.- Specified by:
whereNotIn
in interfaceTableOperations<Table,
Table> - Parameters:
rightTable
- the filtering table.columnsToMatch
- the columns to match between the two tables- Returns:
- a new table filtered on right table
-
view
- Specified by:
view
in interfaceTableOperations<Table,
Table>
-
updateView
- Specified by:
updateView
in interfaceTableOperations<Table,
Table>
-
update
- Specified by:
update
in interfaceTableOperations<Table,
Table>
-
lazyUpdate
Description copied from interface:TableOperations
Compute column formulas on demand.Lazy update defers computation until required for a set of values, and caches the results for a set of input values. This uses less RAM than an update statement when you have a smaller set of unique values. Less computation than an updateView is needed, because the results are saved in a cache.
If you have many unique values, you should instead use an update statement, which will have more memory efficient structures. Values are never removed from the lazyUpdate cache, so it should be used judiciously on a ticking table.
- Specified by:
lazyUpdate
in interfaceTableOperations<Table,
Table> - Parameters:
columns
- the columns to add- Returns:
- a new Table with the columns added; to be computed on demand
-
select
- Specified by:
select
in interfaceTableOperations<Table,
Table>
-
aggAllBy
- Specified by:
aggAllBy
in interfaceTableOperations<Table,
Table>
-
aggBy
default Table aggBy(Collection<? extends Aggregation> aggregations, boolean preserveEmpty, Table initialGroups, Collection<? extends ColumnName> groupByColumns) Description copied from interface:TableOperations
Produce an aggregated result by groupingthis
according to thegroupByColumns
and applyingaggregations
to each resulting group of rows. The result table will have one row per group, ordered by the encounter order withinthis
, thereby ensuring that the row key for a given group never changes.- Specified by:
aggBy
in interfaceTableOperations<Table,
Table> - Parameters:
aggregations
- Theaggregations
to applypreserveEmpty
- Whether to keep result rows for groups that are initially empty or become empty as a result of updates. Each aggregation operator defines its own value for empty groups.initialGroups
- A table whose distinct combinations of values for thegroupByColumns
should be used to create an initial set of aggregation groups. All other columns are ignored. This is useful in combination withpreserveEmpty == true
to ensure that particular groups appear in the result table, or withpreserveEmpty == false
to control the encounter order for a collection of groups and thus their relative order in the result. Changes toinitialGroups
are not expected or handled; ifinitialGroups
is a refreshing table, only its contents at instantiation time will be used. IfinitialGroups == null
, the result will be the same as if a table with no rows was supplied.groupByColumns
- Thecolumns
to group by- Returns:
- A new table aggregating the rows of
this
-
updateBy
default Table updateBy(UpdateByControl control, Collection<? extends UpdateByOperation> operations, Collection<? extends ColumnName> byColumns) Description copied from interface:TableOperations
Creates a table with additional columns calculated from window-based aggregations of columns in its parent. The aggregations are defined by theoperations
, which support incremental aggregation over the corresponding rows in the parent table. The aggregations will apply position or time-based windowing and compute the results for the row group (as determined by thebyColumns
).- Specified by:
updateBy
in interfaceTableOperations<Table,
Table> - Parameters:
control
- thecontrol
to use when updating the table.operations
- the operations to apply to the table.byColumns
- the columns to group by before applying.- Returns:
- a table with the same rowSet, with the specified operations applied to each group defined by the
byColumns
-
selectDistinct
- Specified by:
selectDistinct
in interfaceTableOperations<Table,
Table>
-
ungroup
Description copied from interface:TableOperations
Ungroups a table by expanding columns of arrays or vectors into columns of singular values, creating one row in the output table for each value in the columns to be ungrouped. Columns that are not ungrouped have their values duplicated in each output row corresponding to a given input row.- Specified by:
ungroup
in interfaceTableOperations<Table,
Table> - Parameters:
nullFill
- indicates if the ungrouped table should allow disparate sized arrays filling shorter columns with null values. If set to false, then all arrays should be the same length.columnsToUngroup
- the columns to ungroup- Returns:
- the ungrouped table
-
restrictSortTo
Description copied from interface:GridAttributes
Disallow sorting on all but the specified columns.- Specified by:
restrictSortTo
in interfaceGridAttributes<Table>
- Parameters:
allowedSortingColumns
- The columns for which sorting is to be allowed- Returns:
- A copy of this grid with the sort restrictions applied, or this if no change was needed
-
clearSortingRestrictions
Description copied from interface:GridAttributes
Clear all sorting restrictions that were applied to the grid.- Specified by:
clearSortingRestrictions
in interfaceGridAttributes<Table>
- Returns:
- A copy of this grid with the sort restrictions removed, or this if no change was needed
-
withDescription
Description copied from interface:GridAttributes
Apply a description to this grid.- Specified by:
withDescription
in interfaceGridAttributes<Table>
- Parameters:
description
- The description to apply- Returns:
- A copy of this grid with the description applied, or this if no change was needed
-
withColumnDescription
default Table withColumnDescription(@NotNull @NotNull String column, @NotNull @NotNull String description) Description copied from interface:GridAttributes
Add a description for a specific column. Users should useGridAttributes.withColumnDescriptions(Map)
to set several descriptions at once.- Specified by:
withColumnDescription
in interfaceGridAttributes<Table>
- Parameters:
column
- The name of the columndescription
- The column description- Returns:
- A copy of this grid with the description applied, or this if no change was needed
-
withColumnDescriptions
Description copied from interface:GridAttributes
Add a set of column descriptions to the grid.- Specified by:
withColumnDescriptions
in interfaceGridAttributes<Table>
- Parameters:
descriptions
- A map of column name to column description- Returns:
- A copy of this grid with the descriptions applied, or this if no change was needed
-
setLayoutHints
Description copied from interface:GridAttributes
Set layout hints for this grid.- Specified by:
setLayoutHints
in interfaceGridAttributes<Table>
- Parameters:
hints
- A packed string of layout hints- Returns:
- A copy of this grid with the layout hints applied, or this if no change was needed
-