Class BasicNoPutResultSetImpl

  • All Implemented Interfaces:
    NoPutResultSet, ResultSet, RowLocationRetRowSource, RowSource
    Direct Known Subclasses:
    NoPutResultSetImpl

    abstract class BasicNoPutResultSetImpl
    extends java.lang.Object
    implements NoPutResultSet
    Abstract ResultSet for for operations that return rows but do not allow the caller to put data on output pipes. This basic implementation does not include support for an Activiation. See NoPutResultSetImpl.java for an implementaion with support for an activiation.

    This abstract class does not define the entire ResultSet interface, but leaves the 'get' half of the interface for subtypes to implement. It is package-visible only, with its methods being public for exposure by its subtypes.

    • Field Detail

      • isOpen

        protected boolean isOpen
      • finished

        protected boolean finished
      • currentRow

        protected ExecRow currentRow
      • isTopResultSet

        protected boolean isTopResultSet
      • warnings

        private java.sql.SQLWarning warnings
      • numOpens

        public int numOpens
      • rowsSeen

        public int rowsSeen
      • rowsFiltered

        public int rowsFiltered
      • startExecutionTime

        protected long startExecutionTime
      • endExecutionTime

        protected long endExecutionTime
      • beginTime

        public long beginTime
      • constructorTime

        public long constructorTime
      • openTime

        public long openTime
      • nextTime

        public long nextTime
      • closeTime

        public long closeTime
      • optimizerEstimatedRowCount

        public double optimizerEstimatedRowCount
      • optimizerEstimatedCost

        public double optimizerEstimatedCost
      • subqueryTrackingArray

        public NoPutResultSet[] subqueryTrackingArray
      • activation

        protected final Activation activation
      • statisticsTimingOn

        private final boolean statisticsTimingOn
      • baseColumnMap

        private int[] baseColumnMap
    • Constructor Detail

      • BasicNoPutResultSetImpl

        BasicNoPutResultSetImpl​(ResultDescription resultDescription,
                                Activation activation,
                                double optimizerEstimatedRowCount,
                                double optimizerEstimatedCost)
        Constructor.
        Sets beginTime for all children to use to measue constructor time.
        Parameters:
        resultDescription - the result description. May be null.
        activation - The activation
        optimizerEstimatedRowCount - The optimizer's estimate of the total number of rows for this result set
        optimizerEstimatedCost - The optimizer's estimated cost for this result set
    • Method Detail

      • recordConstructorTime

        protected final void recordConstructorTime()
        Allow sub-classes to record the total time spent in their constructor time.
      • isXplainOnlyMode

        protected final boolean isXplainOnlyMode()
      • reopenCore

        public void reopenCore()
                        throws StandardException
        This is the default implementation of reopenCore(). It simply does a close() followed by an open(). If there are optimizations to be made (caching, etc), this is a good place to do it -- this will be overridden by a number of resultSet imlementations. and SHOULD be overridden by any node that can get between a base table and a join.
        Specified by:
        reopenCore in interface NoPutResultSet
        Throws:
        StandardException - thrown if cursor finished.
        See Also:
        NoPutResultSet.openCore()
      • getPointOfAttachment

        public int getPointOfAttachment()
        Description copied from interface: NoPutResultSet
        Return the point of attachment for this subquery. (Only meaningful for Any and Once ResultSets, which can and will only be at the top of a ResultSet for a subquery.)
        Specified by:
        getPointOfAttachment in interface NoPutResultSet
        Returns:
        int Point of attachment (result set number) for this subquery. (-1 if not a subquery - also Sanity violation)
        See Also:
        NoPutResultSet.getPointOfAttachment()
      • markAsTopResultSet

        public void markAsTopResultSet()
        Mark the ResultSet as the topmost one in the ResultSet tree. Useful for closing down the ResultSet on an error.
        Specified by:
        markAsTopResultSet in interface NoPutResultSet
      • open

        public final void open()
                        throws StandardException
        open a scan on the table. scan parameters are evaluated at each open, so there is probably some way of altering their values... NOTE: This method should only be called on the top ResultSet of a ResultSet tree to ensure that the entire ResultSet tree gets closed down on an error. the openCore() method will be called for all other ResultSets in the tree.
        Specified by:
        open in interface ResultSet
        Throws:
        StandardException - thrown if cursor finished.
      • getAbsoluteRow

        public ExecRow getAbsoluteRow​(int row)
                               throws StandardException
        Returns the row at the absolute position from the query, and returns NULL when there is no such position. (Negative position means from the end of the result set.) Moving the cursor to an invalid position leaves the cursor positioned either before the first row (negative position) or after the last row (positive position). NOTE: An exception will be thrown on 0.
        Specified by:
        getAbsoluteRow in interface ResultSet
        Parameters:
        row - The position.
        Returns:
        The row at the absolute position, or NULL if no such position.
        Throws:
        StandardException - Thrown on failure
        See Also:
        Row
      • getRelativeRow

        public ExecRow getRelativeRow​(int row)
                               throws StandardException
        Returns the row at the relative position from the current cursor position, and returns NULL when there is no such position. (Negative position means toward the beginning of the result set.) Moving the cursor to an invalid position leaves the cursor positioned either before the first row (negative position) or after the last row (positive position). NOTE: 0 is valid. NOTE: An exception is thrown if the cursor is not currently positioned on a row.
        Specified by:
        getRelativeRow in interface ResultSet
        Parameters:
        row - The position.
        Returns:
        The row at the relative position, or NULL if no such position.
        Throws:
        StandardException - Thrown on failure
        See Also:
        Row
      • checkRowPosition

        public boolean checkRowPosition​(int isType)
                                 throws StandardException
        Determine if the cursor is before the first row in the result set.
        Specified by:
        checkRowPosition in interface ResultSet
        Returns:
        true if before the first row, false otherwise. Returns false when the result set contains no rows.
        Throws:
        StandardException - Thrown on error.
      • getRowNumber

        public int getRowNumber()
        Returns the row number of the current row. Row numbers start from 1 and go to 'n'. Corresponds to row numbering used to position current row in the result set (as per JDBC).
        Specified by:
        getRowNumber in interface ResultSet
        Returns:
        the row number, or 0 if not on a row
      • getNextRow

        public final ExecRow getNextRow()
                                 throws StandardException
        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. NOTE: This method should only be called on the top ResultSet of a ResultSet tree to ensure that the entire ResultSet tree gets closed down on an error. the getNextRowCore() method will be called for all other ResultSets in the tree.

        Specified by:
        getNextRow in interface ResultSet
        Returns:
        the next row in the result
        Throws:
        StandardException - thrown on failure.
        StandardException - ResultSetNotOpen thrown if not yet open.
        See Also:
        Row
      • getPreviousRow

        public ExecRow getPreviousRow()
                               throws StandardException
        Returns the previous row from the query, and returns NULL when there are no more previous rows.
        Specified by:
        getPreviousRow in interface ResultSet
        Returns:
        The previous row, or NULL if no more previous rows.
        Throws:
        StandardException - Thrown on failure
        See Also:
        Row
      • returnsRows

        public boolean returnsRows()
        Returns true.
        Specified by:
        returnsRows in interface ResultSet
        Returns:
        TRUE if the statement returns rows, FALSE if not.
      • modifiedRowCount

        public final long modifiedRowCount()
        Description copied from interface: ResultSet
        Returns the number of rows affected by the statement. Only valid of returnsRows() returns false. For other DML statements, it returns the number of rows modified by the statement. For statements that do not affect rows (like DDL statements), it returns zero.
        Specified by:
        modifiedRowCount in interface ResultSet
        Returns:
        The number of rows affect by the statement, so far.
      • isClosed

        public boolean isClosed()
        Report if closed.
        Specified by:
        isClosed in interface ResultSet
        Returns:
        true if the ResultSet has been closed.
      • 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
        Throws:
        StandardException - on error
      • getResultDescription

        public ResultDescription getResultDescription()
        Returns the description of the table's rows
        Specified by:
        getResultDescription in interface ResultSet
        Returns:
        A ResultDescription describing the results of the statement.
      • getExecuteTime

        public long getExecuteTime()
        Get the execution time in milliseconds.
        Specified by:
        getExecuteTime in interface ResultSet
        Returns:
        long The execution time in milliseconds.
      • getBeginExecutionTimestamp

        public java.sql.Timestamp getBeginExecutionTimestamp()
        Get the Timestamp for the beginning of execution.
        Specified by:
        getBeginExecutionTimestamp in interface ResultSet
        Returns:
        Timestamp The Timestamp for the beginning of execution.
      • getEndExecutionTimestamp

        public java.sql.Timestamp getEndExecutionTimestamp()
        Get the Timestamp for the end of execution.
        Specified by:
        getEndExecutionTimestamp in interface ResultSet
        Returns:
        Timestamp The Timestamp for the end of execution.
      • getSubqueryTrackingArray

        public final NoPutResultSet[] getSubqueryTrackingArray​(int numSubqueries)
        Description copied from interface: ResultSet
        Get the subquery ResultSet tracking array from the top ResultSet. (Used for tracking open subqueries when closing down on an error.)
        Specified by:
        getSubqueryTrackingArray in interface ResultSet
        Parameters:
        numSubqueries - The size of the array (For allocation on demand.)
        Returns:
        NoPutResultSet[] Array of NoPutResultSets for subqueries.
        See Also:
        ResultSet.getSubqueryTrackingArray(int)
      • getCurrentTimeMillis

        protected final long getCurrentTimeMillis()
        Return the current time in milliseconds, if DEBUG and RunTimeStats is on, else return 0. (Only pay price of system call if need to.)
        Returns:
        long Current time in milliseconds.
      • getElapsedMillis

        protected final long getElapsedMillis​(long beginTime)
        Return the elapsed time in milliseconds, between now and the beginTime, if DEBUG and RunTimeStats is on, else return 0. (Only pay price of system call if need to.)
        Returns:
        long Elapsed time in milliseconds.
      • dumpTimeStats

        protected final java.lang.String dumpTimeStats​(java.lang.String indent,
                                                       java.lang.String subIndent)
        Dump out the time information for run time stats.
        Returns:
        Nothing.
      • attachStatementContext

        protected void attachStatementContext()
                                       throws StandardException
        Attach this result set to the top statement context on the stack. Result sets can be directly read from the JDBC layer. The JDBC layer will push and pop a statement context around each ResultSet.getNext(). There's no guarantee that the statement context used for the last getNext() will be the context used for the current getNext(). The last statement context may have been popped off the stack and so will not be available for cleanup if an error occurs. To make sure that we will be cleaned up, we always attach ourselves to the top context. The fun and games occur in nested contexts: using JDBC result sets inside user code that is itself invoked from queries or CALL statements.
        Throws:
        StandardException - thrown if cursor finished.
      • getLanguageConnectionContext

        protected final LanguageConnectionContext getLanguageConnectionContext()
        Cache the language connection context. Return it.
        Returns:
        the language connection context
      • getExecutionFactory

        final ExecutionFactory getExecutionFactory()
        Get a execution factory
        Returns:
        the execution factory
      • getTransactionController

        final TransactionController getTransactionController()
        Get the current transaction controller.
      • getCompactRow

        protected ExecRow getCompactRow​(ExecRow candidate,
                                        FormatableBitSet accessedCols,
                                        boolean isKeyed)
                                 throws StandardException
        Get a compacted version of the candidate row according to the columns specified in the bit map. Share the holders between rows. If there is no bit map, use the candidate row as the compact row. Also, create an array of ints mapping base column positions to compact column positions, to make it cheaper to copy columns to the compact row, if we ever have to do it again.
        Parameters:
        candidate - The row to get the columns from
        accessedCols - A bit map of the columns that are accessed in the candidate row
        isKeyed - Tells whether to return a ValueRow or an IndexRow
        Returns:
        A compact row.
        Throws:
        StandardException
      • setCompactRow

        protected ExecRow setCompactRow​(ExecRow candidateRow,
                                        ExecRow compactRow)
        Copy columns from the candidate row from the store to the given compact row. If there is no column map, just use the candidate row. This method assumes the above method (getCompactRow()) was called first. getCompactRow() sets up the baseColumnMap.
        Parameters:
        candidateRow - The candidate row from the store
        compactRow - The compact row to fill in
        Returns:
        The compact row to use
      • isForUpdate

        public boolean isForUpdate()
        Is this ResultSet or it's source result set for update This method will be overriden in the inherited Classes if it is true
        Specified by:
        isForUpdate in interface NoPutResultSet
        Returns:
        Whether or not the result set is for update.
      • checkCancellationFlag

        public void checkCancellationFlag()
                                   throws StandardException
        Checks whether the currently executing statement has been cancelled. This is done by checking the statement's allocated StatementContext object.
        Throws:
        StandardException
        See Also:
        StatementContext
      • addWarning

        public final void addWarning​(java.sql.SQLWarning w)
        Description copied from interface: ResultSet
        Add a warning to this result set.
        Specified by:
        addWarning in interface ResultSet
        Parameters:
        w - the warning to add
      • getWarnings

        public final java.sql.SQLWarning getWarnings()
        Description copied from interface: ResultSet
        Return the set of warnings generated during the execution of this result set. The warnings are cleared once this call returns.
        Specified by:
        getWarnings in interface ResultSet
      • toXML

        public org.w3c.dom.Element toXML​(org.w3c.dom.Element parentNode,
                                         java.lang.String tag)
                                  throws java.lang.Exception
        Description copied from interface: ResultSet

        Produce an xml image of this ResultSet and its descendant ResultSets. Appends an element to the parentNode and returns the appended element.

        Specified by:
        toXML in interface ResultSet
        Parameters:
        parentNode - Node to put content into.
        tag - Element tag for content
        Returns:
        the content as an element with the given tag name
        Throws:
        java.lang.Exception
      • toXML

        public static org.w3c.dom.Element toXML​(org.w3c.dom.Element parentNode,
                                                java.lang.String childTag,
                                                ResultSet rs)
                                         throws java.lang.Exception

        Pretty-print a ResultSet as an xml child of a parent node. Return the node representing the ResultSet child.

        Throws:
        java.lang.Exception
      • stripPackage

        private static java.lang.String stripPackage​(java.lang.String className)
        Strip the package location from a class name
      • childrenToXML

        public static org.w3c.dom.Element childrenToXML​(org.w3c.dom.Element outerNode,
                                                        ResultSet outerRS)
                                                 throws java.lang.Exception

        Pretty-print the inner ResultSet fields inside an outer ResultSet. Returns the outerNode.

        Throws:
        java.lang.Exception
      • findResultSetFields

        private static void findResultSetFields​(java.util.ArrayList<java.lang.reflect.Field> fieldList,
                                                java.lang.Class<?> klass)
                                         throws java.lang.Exception

        Find all fields of type ResultSet.

        Throws:
        java.lang.Exception