Class PostJoinCursor

java.lang.Object
org.apache.druid.segment.join.PostJoinCursor
All Implemented Interfaces:
Cursor

public class PostJoinCursor extends Object implements Cursor
A Cursor decorator used by HashJoinSegmentCursorFactory.makeCursorHolder(CursorBuildSpec) to add post-join virtual columns and filters.
  • Method Details

    • wrap

      public static PostJoinCursor wrap(Cursor baseCursor, VirtualColumns virtualColumns, @Nullable Filter filter)
    • setValueMatcher

      public void setValueMatcher(@Nullable ValueMatcher valueMatcher)
    • getColumnSelectorFactory

      public ColumnSelectorFactory getColumnSelectorFactory()
      Description copied from interface: Cursor
      Get a ColumnSelectorFactory whose selectors will be backed by the row values at the current position of the cursor
      Specified by:
      getColumnSelectorFactory in interface Cursor
    • getPostJoinFilter

      @Nullable public Filter getPostJoinFilter()
    • advance

      public void advance()
      Description copied from interface: Cursor
      Advance the cursor to the next position, checking if thread has been interrupted after advancing and possibly throwing QueryInterruptedException if so. Callers should check Cursor.isDone() or Cursor.isDoneOrInterrupted() before getting the next value from a selector.
      Specified by:
      advance in interface Cursor
    • advanceUninterruptibly

      public void advanceUninterruptibly()
      Advancing the post-join requires evaluating the join on whole segment and advancing without interruption can take a long time if there are no matches but the join itself is big. This can leave the thread running well after the timeout elapses. One such issue is described in CPU thread running PostJoinCursor cannot be terminated
      Specified by:
      advanceUninterruptibly in interface Cursor
    • isDone

      public boolean isDone()
      Description copied from interface: Cursor
      Check if the current cursor position is valid, returning false if there are values to read from selectors created by Cursor.getColumnSelectorFactory(). If true, any such selectors will no longer produce values.
      Specified by:
      isDone in interface Cursor
    • isDoneOrInterrupted

      public boolean isDoneOrInterrupted()
      Description copied from interface: Cursor
      Check if the current cursor position is valid, or if the thread has been interrupted.
      Specified by:
      isDoneOrInterrupted in interface Cursor
      See Also:
    • reset

      public void reset()
      Description copied from interface: Cursor
      Reset to start of cursor. Most cursor implementations are backed by immutable data, but there is generically no guarantee that advancing through a cursor again will read exactly the same data or even number of rows, since the underlying data might be mutable in some cases.
      Specified by:
      reset in interface Cursor