Class SetOpResultSet

All Implemented Interfaces:
CursorResultSet, NoPutResultSet, ResultSet, RowLocationRetRowSource, RowSource

class SetOpResultSet extends NoPutResultSetImpl implements CursorResultSet
Takes the result set produced by an ordered UNION ALL of two tagged result sets and produces the INTERSECT or EXCEPT of the two input result sets. This also projects out the tag, the last column of the input rows.
  • Field Details

    • leftSource

      private final NoPutResultSet leftSource
    • rightSource

      private final NoPutResultSet rightSource
    • activation

      private final Activation activation
    • opType

      private final int opType
    • all

      private final boolean all
    • resultSetNumber

      private final int resultSetNumber
    • prevCols

      private DataValueDescriptor[] prevCols
    • leftInputRow

      private ExecRow leftInputRow
    • rightInputRow

      private ExecRow rightInputRow
    • intermediateOrderByColumns

      private final int[] intermediateOrderByColumns
    • intermediateOrderByDirection

      private final int[] intermediateOrderByDirection
    • intermediateOrderByNullsLow

      private final boolean[] intermediateOrderByNullsLow
    • rowsSeenLeft

      private int rowsSeenLeft
    • rowsSeenRight

      private int rowsSeenRight
    • rowsReturned

      private int rowsReturned
  • Constructor Details

    • SetOpResultSet

      SetOpResultSet(NoPutResultSet leftSource, NoPutResultSet rightSource, Activation activation, int resultSetNumber, long optimizerEstimatedRowCount, double optimizerEstimatedCost, int opType, boolean all, int intermediateOrderByColumnsSavedObject, int intermediateOrderByDirectionSavedObject, int intermediateOrderByNullsLowSavedObject)
  • Method Details

    • openCore

      public void openCore() throws StandardException
      open the first source.
      Specified by:
      openCore in interface NoPutResultSet
      Throws:
      StandardException - thrown on failure
    • getNextRowCore

      public ExecRow getNextRowCore() throws StandardException
      Description copied from interface: NoPutResultSet
      Return the requested values computed from the next row (if any) for which the restriction evaluates to true.

      restriction and projection parameters are evaluated for each row.

      Specified by:
      getNextRowCore in interface NoPutResultSet
      Specified by:
      getNextRowCore in class BasicNoPutResultSetImpl
      Returns:
      the next row of the intersect or except, null if there is none
      Throws:
      StandardException - thrown on failure
      See Also:
    • advanceRightPastDuplicates

      private void advanceRightPastDuplicates(DataValueDescriptor[] leftColumns) throws StandardException
      Throws:
      StandardException
    • compare

      private int compare(DataValueDescriptor[] leftCols, DataValueDescriptor[] rightCols) throws StandardException
      Throws:
      StandardException
    • isDuplicate

      private boolean isDuplicate(DataValueDescriptor[] curColumns) throws StandardException
      Throws:
      StandardException
    • getCurrentRow

      public ExecRow getCurrentRow()
      Description copied from interface: CursorResultSet
      Returns the current row of the result set. REMIND: eventually, this will only return the current row for result sets that need to return it; either some field in the activation or a parameter in the constructor will be used to signal that this needs to function. This will let us limit the number of live objects we are holding on to.

      Specified by:
      getCurrentRow in interface CursorResultSet
      Returns:
      the last row returned by getNextRow. null if closed.
    • close

      public void close() throws StandardException
      If the result set has been opened, close the currently open source.
      Specified by:
      close in interface ResultSet
      Overrides:
      close in class NoPutResultSetImpl
      Throws:
      StandardException - thrown on error
    • finish

      public void finish() throws StandardException
      Description copied from interface: ResultSet
      Tells the system that there will be no more access to any database information via this result set; in particular, no more calls to open(). Will close the result set if it is not already closed.
      Specified by:
      finish in interface ResultSet
      Overrides:
      finish in class BasicNoPutResultSetImpl
      Throws:
      StandardException - on error
    • getTimeSpent

      public long getTimeSpent(int type)
      Return the total amount of time spent in this ResultSet
      Specified by:
      getTimeSpent in interface ResultSet
      Parameters:
      type - CURRENT_RESULTSET_ONLY - time spent only in this ResultSet ENTIRE_RESULTSET_TREE - time spent in this ResultSet and below.
      Returns:
      long The total amount of time spent (in milliseconds).
    • getRowLocation

      public RowLocation getRowLocation() throws StandardException
      Description copied from interface: CursorResultSet
      Returns the row location of the current base table row of the cursor. If this cursor's row is composed of multiple base tables' rows, i.e. due to a join, then a null is returned.
      Specified by:
      getRowLocation in interface CursorResultSet
      Returns:
      the row location of the current cursor row.
      Throws:
      StandardException - thrown on failure
      See Also:
    • getOpType

      public int getOpType()
      Return the set operation of this SetOpResultSet
      Returns:
      the set operation of this ResultSet, the value is either IntersectOrExceptNode.INTERSECT_OP for Intersect operation or IntersectOrExceptNode.EXCEPT_OP for Except operation
      See Also:
    • getResultSetNumber

      public int getResultSetNumber()
      Return the result set number
      Returns:
      the result set number
    • getLeftSourceInput

      public NoPutResultSet getLeftSourceInput()
      Return the left source input of this SetOpResultSet
      Returns:
      the left source input of this SetOpResultSet
      See Also:
    • getRightSourceInput

      public NoPutResultSet getRightSourceInput()
      Return the right source input of this SetOpResultSet
      Returns:
      the right source input of this SetOpResultSet
      See Also:
    • getRowsSeenLeft

      public int getRowsSeenLeft()
      Return the number of rows seen on the left source input
      Returns:
      the number of rows seen on the left source input
    • getRowsSeenRight

      public int getRowsSeenRight()
      Return the number of rows seen on the right source input
      Returns:
      the number of rows seen on the right source input
    • getRowsReturned

      public int getRowsReturned()
      Return the number of rows returned from the result set
      Returns:
      the number of rows returned from the result set