Interface GroupByColumnSelectorStrategy

    • Method Detail

      • getGroupingKeySize

        int getGroupingKeySize()
        Return the size, in bytes, of this dimension's values in the grouping key. For example, a String implementation would return 4, the size of an int.
        Returns:
        size, in bytes, of this dimension's values in the grouping key.
      • processValueFromGroupingKey

        void processValueFromGroupingKey​(GroupByColumnSelectorPlus selectorPlus,
                                         ByteBuffer key,
                                         ResultRow resultRow,
                                         int keyBufferPosition)
        Read a value from a grouping key and add it to the group by query result row, using the output name specified in a DimensionSpec. An implementation may choose to not add anything to the result row (e.g., as the String implementation does for empty rows) selectorPlus provides access to: - the keyBufferPosition offset from which to read the value - the dimension value selector - the DimensionSpec for this dimension from the query
        Parameters:
        selectorPlus - dimension info containing the key offset, value selector, and dimension spec
        resultRow - result row for the group by query being served
        key - grouping key
        keyBufferPosition - buffer position for the grouping key, added to support chaining multiple ColumnSelectorStrategy
      • initColumnValues

        int initColumnValues​(ColumnValueSelector selector,
                             int columnIndex,
                             Object[] valuess)
        Retrieve a row object from the ColumnValueSelector and put it in valuess at columnIndex.
        Parameters:
        selector - Value selector for a column.
        columnIndex - Index of the column within the row values array
        valuess - Row values array, one index per column
        Returns:
        estimated increase in internal state footprint, in bytes, as a result of this operation. May be zero if memory did not increase as a result of this operation. Will not be negative.
      • initGroupingKeyColumnValue

        void initGroupingKeyColumnValue​(int keyBufferPosition,
                                        int dimensionIndex,
                                        Object rowObj,
                                        ByteBuffer keyBuffer,
                                        int[] stack)
        Read the first value within a row values object (e. g. IndexedInts, as the value in a dictionary-encoded string column) and write that value to the keyBuffer at keyBufferPosition. If the row size is 0 (e. g. IndexedInts.size()), write GROUP_BY_MISSING_VALUE instead. If the size of the row is > 0, write 1 to stack[] at columnIndex, otherwise write 0.
        Parameters:
        keyBufferPosition - Starting offset for this column's value within the grouping key.
        dimensionIndex - Index of this dimension within the stack array
        rowObj - Row value object for this column
        keyBuffer - grouping key
        stack - array containing the current within-row value index for each column
      • checkRowIndexAndAddValueToGroupingKey

        boolean checkRowIndexAndAddValueToGroupingKey​(int keyBufferPosition,
                                                      Object rowObj,
                                                      int rowValIdx,
                                                      ByteBuffer keyBuffer)
        If rowValIdx is less than the size of rowObj (haven't handled all of the row values): First, read the value at rowValIdx from a rowObj and write that value to the keyBuffer at keyBufferPosition. Then return true Otherwise, return false.
        Parameters:
        keyBufferPosition - Starting offset for this column's value within the grouping key.
        rowObj - Row value object for this column (e.g., IndexedInts)
        rowValIdx - Index of the current value being grouped on within the row
        keyBuffer - grouping key
        Returns:
        true if rowValIdx < size of rowObj, false otherwise
      • writeToKeyBuffer

        int writeToKeyBuffer​(int keyBufferPosition,
                             ColumnValueSelector selector,
                             ByteBuffer keyBuffer)
        Write a single object from the given selector to the keyBuffer at keyBufferPosition. The reading column must have a single value. The position of the keyBuffer may be modified.
        Parameters:
        keyBufferPosition - starting offset for this column's value within the grouping key
        selector - selector to retrieve row value object from
        keyBuffer - grouping key
        Returns:
        estimated increase in internal state footprint, in bytes, as a result of this operation. May be zero if memory did not increase as a result of this operation. Will not be negative.
      • bufferComparator

        Grouper.BufferComparator bufferComparator​(int keyBufferPosition,
                                                  @Nullable
                                                  StringComparator stringComparator)
        Return BufferComparator for values written using this strategy when limit is pushed down to segment scan.
        Parameters:
        keyBufferPosition - starting offset for this column's value within the grouping key
        stringComparator - stringComparator from LimitSpec for this column. If this is null, implementations will use the StringComparators.LEXICOGRAPHIC comparator.
        Returns:
        BufferComparator for comparing values written