public boolean hasFilters() { return isSubselect() ? (!postFilters.isEmpty() || subselect.getWhere() != null || subselect.getHaving() != null) : !preFilters.isEmpty(); }
public SelectStatement getAsSingleSubquery(SelectStatement query, boolean asSubquery) throws SQLException { assert (isFlat(query)); if (asSubquery) return query; return NODE_FACTORY.select(select, query.getFrom(), query.getWhere()); }
private SelectStatement applyPostFilters(SelectStatement statement, List<ParseNode> postFilters) throws SQLException { List<ParseNode> postFiltersRewrite = Lists.<ParseNode>newArrayListWithExpectedSize(postFilters.size()); for (ParseNode node : postFilters) { postFiltersRewrite.add(node.accept(this)); } if (statement.getGroupBy().isEmpty()) { ParseNode where = statement.getWhere(); if (where != null) { postFiltersRewrite.add(where); } return NODE_FACTORY.select(statement, combine(postFiltersRewrite)); } ParseNode having = statement.getHaving(); if (having != null) { postFiltersRewrite.add(having); } return NODE_FACTORY.select(statement, statement.getWhere(), combine(postFiltersRewrite)); }
/** * Rewrite the select statement by filtering out expression nodes from the WHERE clause * @param statement the select statement from which to filter. * @param removeNodes expression nodes to filter out of WHERE clause. * @return new select statement * @throws SQLException */ public static SelectStatement removeFromWhereClause(SelectStatement statement, Set<ParseNode> removeNodes) throws SQLException { if (removeNodes.isEmpty()) { return statement; } ParseNode where = statement.getWhere(); SelectStatementRewriter rewriter = new SelectStatementRewriter(removeNodes); where = where.accept(rewriter); // Return new SELECT statement with updated WHERE clause return NODE_FACTORY.select(statement, where); }
public static SelectStatement transform(SelectStatement select, ColumnResolver resolver, PhoenixConnection connection) throws SQLException { ParseNode where = select.getWhere(); if (where == null) return select; SubqueryRewriter rewriter = new SubqueryRewriter(select, resolver, connection); ParseNode normWhere = rewrite(where, rewriter); if (normWhere == where) return select; return NODE_FACTORY.select(select, rewriter.tableNode, normWhere); }
/** * Rewrite the select statement by filtering out expression nodes from the HAVING clause * and anding them with the WHERE clause. * @param statement the select statement from which to move the nodes. * @param moveNodes expression nodes to filter out of HAVING clause and add to WHERE clause. * @return new select statement * @throws SQLException */ public static SelectStatement moveFromHavingToWhereClause(SelectStatement statement, Set<ParseNode> moveNodes) throws SQLException { if (moveNodes.isEmpty()) { return statement; } ParseNode andNode = NODE_FACTORY.and(new ArrayList<ParseNode>(moveNodes)); ParseNode having = statement.getHaving(); SelectStatementRewriter rewriter = new SelectStatementRewriter(moveNodes); having = having.accept(rewriter); ParseNode where = statement.getWhere(); if (where == null) { where = andNode; } else { where = NODE_FACTORY.and(Arrays.asList(where,andNode)); } // Return new SELECT statement with updated WHERE and HAVING clauses return NODE_FACTORY.select(statement, where, having); }
public SelectStatement combine(ParseNode where) { if (where == null) { return this; } if (this.getWhere() != null) { where = new AndParseNode(Arrays.asList(this.getWhere(), where)); } return new SelectStatement(this.getFrom(), this.getHint(), this.isDistinct(), this.getSelect(), where, this.getGroupBy(), this.getHaving(), this.getOrderBy(), this.getLimit(), this.getOffset(), this.getBindCount(), this.isAggregate(), this.hasSequence(), this.selects, this.udfParseNodes); }
String rhsTableAlias = ParseNodeFactory.createTempAlias(); JoinConditionExtractor conditionExtractor = new JoinConditionExtractor(subquery, resolver, connection, rhsTableAlias); ParseNode where = subquery.getWhere() == null ? null : subquery.getWhere().accept(conditionExtractor); if (where == subquery.getWhere()) { // non-correlated EXISTS subquery, add LIMIT 1 subquery = NODE_FACTORY.select(subquery, NODE_FACTORY.limit(NODE_FACTORY.literal(1))); subqueryNode = NODE_FACTORY.subquery(subquery, false);
normSelectNodes, statement.getWhere(), statement.getGroupBy(), statement.getHaving(), statement.getOrderBy(), statement.getLimit(), statement.getOffset(), statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes());
public SelectStatement select(SelectStatement statement, List<OrderByNode> orderBy, LimitNode limit, OffsetNode offset, int bindCount, boolean isAggregate) { return select(statement.getFrom(), statement.getHint(), statement.isDistinct(), statement.getSelect(), statement.getWhere(), statement.getGroupBy(), statement.getHaving(), orderBy, limit, offset, bindCount, isAggregate || statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
public static SelectStatement create(SelectStatement select, List<OrderByNode> orderBy, LimitNode limit, OffsetNode offset, boolean isAggregate) { return new SelectStatement(select.getFrom(), select.getHint(), select.isDistinct(), select.getSelect(), select.getWhere(), select.getGroupBy(), select.getHaving(), orderBy, limit, offset, select.getBindCount(), isAggregate, select.hasSequence(), select.getSelects(), select.getUdfParseNodes()); }
public SelectStatement select(SelectStatement statement, List<OrderByNode> orderBy, LimitNode limit, OffsetNode offset) { return select(statement.getFrom(), statement.getHint(), statement.isDistinct(), statement.getSelect(), statement.getWhere(), statement.getGroupBy(), statement.getHaving(), orderBy, limit,offset, statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
ColumnResolver resolver = FromCompiler.getResolver(new TableRef(table)); SelectStatement translatedSelect = IndexStatementRewriter.translate(select, resolver); ParseNode whereNode = translatedSelect.getWhere(); PhoenixStatement statement = new PhoenixStatement(conn); TableRef indexTableRef = new TableRef(index) {
public SelectStatement select(SelectStatement statement, boolean isDistinct, List<AliasedNode> select) { return select(statement.getFrom(), statement.getHint(), isDistinct, select, statement.getWhere(), statement.getGroupBy(), statement.getHaving(), statement.getOrderBy(), statement.getLimit(), statement.getOffset(), statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
public static SelectStatement create(SelectStatement select, List<AliasedNode> selects) { return new SelectStatement(select.getFrom(), select.getHint(), select.isDistinct(), selects, select.getWhere(), select.getGroupBy(), select.getHaving(), select.getOrderBy(), select.getLimit(), select.getOffset(), select.getBindCount(), select.isAggregate(), select.hasSequence(), select.getSelects(), select.getUdfParseNodes()); }
public SelectStatement select(SelectStatement statement, LimitNode limit) { return select(statement.getFrom(), statement.getHint(), statement.isDistinct(), statement.getSelect(), statement.getWhere(), statement.getGroupBy(), statement.getHaving(), statement.getOrderBy(), limit, statement.getOffset(), statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
public SelectStatement select(SelectStatement statement, TableNode table) { return select(table, statement.getHint(), statement.isDistinct(), statement.getSelect(), statement.getWhere(), statement.getGroupBy(), statement.getHaving(), statement.getOrderBy(), statement.getLimit(), statement.getOffset(), statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
public SelectStatement select(SelectStatement statement, List<OrderByNode> orderBy) { return select(statement.getFrom(), statement.getHint(), statement.isDistinct(), statement.getSelect(), statement.getWhere(), statement.getGroupBy(), statement.getHaving(), orderBy, statement.getLimit(), statement.getOffset(), statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
public SelectStatement select(SelectStatement statement, HintNode hint) { return hint == null || hint.isEmpty() ? statement : select(statement.getFrom(), hint, statement.isDistinct(), statement.getSelect(), statement.getWhere(), statement.getGroupBy(), statement.getHaving(), statement.getOrderBy(), statement.getLimit(), statement.getOffset(), statement.getBindCount(), statement.isAggregate(), statement.hasSequence(), statement.getSelects(), statement.getUdfParseNodes()); }
public static SelectStatement create(SelectStatement select, HintNode hint) { if (select.getHint() == hint || hint.isEmpty()) { return select; } return new SelectStatement(select.getFrom(), hint, select.isDistinct(), select.getSelect(), select.getWhere(), select.getGroupBy(), select.getHaving(), select.getOrderBy(), select.getLimit(), select.getOffset(), select.getBindCount(), select.isAggregate(), select.hasSequence(), select.getSelects(), select.getUdfParseNodes()); }