Class Select


  • public class Select
    extends Query
    This class represents a simple SELECT statement.

    For each select statement, visibleColumnCount <= distinctColumnCount <= expressionCount. The expression list count could include ORDER BY and GROUP BY expressions that are not in the select list.

    The call sequence is init(), mapColumns() if it's a subquery, prepare().

    • Method Detail

      • isUnion

        public boolean isUnion()
        Description copied from class: Query
        Check if this is a UNION query.
        Specified by:
        isUnion in class Query
        Returns:
        true if this is a UNION query
      • addTableFilter

        public void addTableFilter​(TableFilter filter,
                                   boolean isTop)
        Add a table to the query.
        Parameters:
        filter - the table to add
        isTop - if the table can be the first table in the query plan
      • setExpressions

        public void setExpressions​(java.util.ArrayList<Expression> expressions)
      • setExplicitTable

        public void setExplicitTable()
        Convert this SELECT to an explicit table (TABLE tableName).
      • setWildcard

        public void setWildcard()
        Sets a wildcard expression as in "SELECT * FROM TEST".
      • setGroupQuery

        public void setGroupQuery()
        Set when SELECT statement contains (non-window) aggregate functions, GROUP BY clause or HAVING clause.
      • setWindowQuery

        public void setWindowQuery()
        Called if this query contains window functions.
      • setGroupBy

        public void setGroupBy​(java.util.ArrayList<Expression> group)
      • getGroupBy

        public java.util.ArrayList<Expression> getGroupBy()
      • getGroupDataIfCurrent

        public SelectGroups getGroupDataIfCurrent​(boolean window)
        Get the group data if there is currently a group-by active.
        Parameters:
        window - is this a window function
        Returns:
        the grouped data
      • setDistinct

        public void setDistinct()
        Set the distinct flag.
      • setDistinct

        public void setDistinct​(Expression[] distinctExpressions)
        Set the DISTINCT ON expressions.
        Parameters:
        distinctExpressions - array of expressions
      • isAnyDistinct

        public boolean isAnyDistinct()
        Overrides:
        isAnyDistinct in class Query
        Returns:
        whether this query is a DISTINCT or DISTINCT ON (...) query
      • addWindow

        public boolean addWindow​(java.lang.String name,
                                 Window window)
        Adds a named window definition.
        Parameters:
        name - name
        window - window definition
        Returns:
        true if a new definition was added, false if old definition was replaced
      • getWindow

        public Window getWindow​(java.lang.String name)
        Returns a window with specified name, or null.
        Parameters:
        name - name of the window
        Returns:
        the window with specified name, or null
      • addCondition

        public void addCondition​(Expression cond)
        Add a condition to the list of conditions.
        Parameters:
        cond - the condition to add
      • queryWithoutCache

        protected ResultInterface queryWithoutCache​(long maxRows,
                                                    ResultTarget target)
        Description copied from class: Query
        Execute the query without checking the cache. If a target is specified, the results are written to it, and the method returns null. If no target is specified, a new LocalResult is created and returned.
        Specified by:
        queryWithoutCache in class Query
        Parameters:
        maxRows - the limit as specified in the JDBC method call
        target - the target to write results to
        Returns:
        the result
      • init

        public void init()
        Description copied from class: Query
        Initialize the query.
        Specified by:
        init in class Query
      • preparePlan

        public void preparePlan()
        Specified by:
        preparePlan in class Query
      • getCost

        public double getCost()
        Description copied from class: Query
        Calculate the cost to execute this query.
        Specified by:
        getCost in class Query
        Returns:
        the cost
      • getTables

        public java.util.HashSet<Table> getTables()
        Description copied from class: Query
        Get all tables that are involved in this query.
        Specified by:
        getTables in class Query
        Returns:
        the set of tables
      • fireBeforeSelectTriggers

        public void fireBeforeSelectTriggers()
        Description copied from class: Query
        Call the before triggers on all tables.
        Specified by:
        fireBeforeSelectTriggers in class Query
      • getPlanSQL

        public java.lang.StringBuilder getPlanSQL​(java.lang.StringBuilder builder,
                                                  int sqlFlags)
        Description copied from class: Prepared
        Appends the SQL statement with the execution plan.
        Overrides:
        getPlanSQL in class Prepared
        Parameters:
        builder - string builder
        sqlFlags - formatting flags
        Returns:
        the execution plan
      • setHaving

        public void setHaving​(Expression having)
      • setQualify

        public void setQualify​(Expression qualify)
      • getTopTableFilter

        public TableFilter getTopTableFilter()
      • getForUpdate

        public ForUpdate getForUpdate()
        Description copied from class: Query
        Returns FOR UPDATE clause, if any.
        Overrides:
        getForUpdate in class Query
        Returns:
        FOR UPDATE clause or null
      • setForUpdate

        public void setForUpdate​(ForUpdate b)
        Description copied from class: Query
        Set the FOR UPDATE clause.
        Specified by:
        setForUpdate in class Query
        Parameters:
        b - the new FOR UPDATE clause
      • mapColumns

        public void mapColumns​(ColumnResolver resolver,
                               int level,
                               boolean outer)
        Description copied from class: Query
        Map the columns to the given column resolver.
        Specified by:
        mapColumns in class Query
        Parameters:
        resolver - the resolver
        level - the subquery level (0 is the top level query, 1 is the first subquery level)
        outer - whether this method was called from the outer query
      • setEvaluatable

        public void setEvaluatable​(TableFilter tableFilter,
                                   boolean b)
        Description copied from class: Query
        Change the evaluatable flag. This is used when building the execution plan.
        Specified by:
        setEvaluatable in class Query
        Parameters:
        tableFilter - the table filter
        b - the new value
      • isQuickAggregateQuery

        public boolean isQuickAggregateQuery()
        Check if this is an aggregate query with direct lookup, for example a query of the type SELECT COUNT(*) FROM TEST or SELECT MAX(ID) FROM TEST.
        Returns:
        true if a direct lookup is possible
      • isGroupQuery

        public boolean isGroupQuery()
        Checks if this query is a group query.
        Returns:
        whether this query is a group query.
      • isWindowQuery

        public boolean isWindowQuery()
        Checks if this query contains window functions.
        Returns:
        whether this query contains window functions
      • isGroupWindowStage2

        public boolean isGroupWindowStage2()
        Checks if window stage of group window query is performed. If true, column resolver may not be used.
        Returns:
        true if window stage of group window query is performed
      • addGlobalCondition

        public void addGlobalCondition​(Parameter param,
                                       int columnId,
                                       int comparisonType)
        Description copied from class: Query
        Add a condition to the query. This is used for views.
        Specified by:
        addGlobalCondition in class Query
        Parameters:
        param - the parameter
        columnId - the column index (0 meaning the first column)
        comparisonType - the comparison type
      • updateAggregate

        public void updateAggregate​(SessionLocal s,
                                    int stage)
        Description copied from class: Query
        Update all aggregate function values.
        Specified by:
        updateAggregate in class Query
        Parameters:
        s - the session
        stage - select stage
      • isEverything

        public boolean isEverything​(ExpressionVisitor visitor)
        Description copied from class: Query
        Check if this expression and all sub-expressions can fulfill a criteria. If any part returns false, the result is false.
        Specified by:
        isEverything in class Query
        Parameters:
        visitor - the visitor
        Returns:
        if the criteria can be fulfilled
      • allowGlobalConditions

        public boolean allowGlobalConditions()
        Description copied from class: Query
        Check whether adding condition to the query is allowed. This is not allowed for views that have an order by and a limit, as it would affect the returned results.
        Specified by:
        allowGlobalConditions in class Query
        Returns:
        true if adding global conditions is allowed
      • getSortOrder

        public SortOrder getSortOrder()
      • getParentSelect

        public Select getParentSelect()
        Returns parent select, or null.
        Returns:
        parent select, or null
      • isConstantQuery

        public boolean isConstantQuery()
        Description copied from class: Query
        Check if this query will always return the same value and has no side effects.
        Overrides:
        isConstantQuery in class Query
        Returns:
        if this query will always return the same value and has no side effects.
      • getIfSingleRow

        public Expression getIfSingleRow()
        Description copied from class: Query
        If this query is determined as a single-row query, returns a replacement expression.
        Overrides:
        getIfSingleRow in class Query
        Returns:
        the expression, or null