Class NestedDataColumnSupplier.FieldsFixupIndexed

java.lang.Object
org.apache.druid.segment.nested.NestedDataColumnSupplier.FieldsFixupIndexed
All Implemented Interfaces:
Iterable<ByteBuffer>, HotLoopCallee, Indexed<ByteBuffer>
Enclosing class:
NestedDataColumnSupplier

public static class NestedDataColumnSupplier.FieldsFixupIndexed extends Object implements Indexed<ByteBuffer>
Indexed implementation which contains a map of positions to replace with corrected values by NestedDataColumnSupplier.getAndFixFieldsSupplier(ByteBuffer, ByteOrder, SegmentFileMapper).

This implementation is no longer Indexed.isSorted(), despite the underlying Indexed being so, as the replaced values might violate the old sort order, so this cannot provide that guarantee. Despite this, indexOf(ByteBuffer) will still function for finding if items exist in the dictionary, the replaced values are searched prior to calling indexOf(ByteBuffer) on the underlying dictionary, so for the values we are trying to find will always report their correct positions. It is important that the fixed dictionary retains its original order because the positions are used as the internal field file names (instead of the paths themselves) in the segment file. Callers however should not expect iterating the dictionary to provide values in sorted order.

  • Method Details

    • size

      public int size()
      Description copied from interface: Indexed
      Number of elements in the value set
      Specified by:
      size in interface Indexed<ByteBuffer>
    • get

      @Nullable public ByteBuffer get(int index)
      Description copied from interface: Indexed
      Get the value at specified position
      Specified by:
      get in interface Indexed<ByteBuffer>
    • indexOf

      public int indexOf(@Nullable ByteBuffer value)
      Description copied from interface: Indexed
      Returns the index of "value" in this Indexed object, or a negative number if the value is not present. The negative number is not guaranteed to be any particular number unless Indexed.isSorted() returns true, in which case it will be a negative number equal to (-(insertion point) - 1), in the manner of Arrays.binarySearch.
      Specified by:
      indexOf in interface Indexed<ByteBuffer>
      Parameters:
      value - value to search for
      Returns:
      index of value, or a negative number (equal to (-(insertion point) - 1) if Indexed.isSorted())
    • iterator

      @Nonnull public Iterator<ByteBuffer> iterator()
      Specified by:
      iterator in interface Iterable<ByteBuffer>
    • inspectRuntimeShape

      public void inspectRuntimeShape(RuntimeShapeInspector inspector)
      Description copied from interface: HotLoopCallee
      Implementations of this method should call inspector.visit() with all fields of this class, which meet two conditions: 1. They are used in methods of this class, annotated with CalledFromHotLoop 2. They are either: a. Nullable objects b. Instances of HotLoopCallee c. Objects, which don't always have a specific class in runtime. For example, a field of type Set could be HashSet or TreeSet in runtime, depending on how this instance (the instance on which inspectRuntimeShape() is called) is configured. d. ByteBuffer or similar objects, where byte order matters e. boolean flags, affecting branch taking f. Arrays of objects, meeting any of conditions a-e.
      Specified by:
      inspectRuntimeShape in interface HotLoopCallee