本文整理了Java中org.teiid.query.sql.lang.Query.getHaving
方法的一些代码示例,展示了Query.getHaving
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Query.getHaving
方法的具体详情如下:
包路径:org.teiid.query.sql.lang.Query
类名称:Query
方法名:getHaving
[英]Get the having clause for the query.
[中]获取查询的having子句。
代码示例来源:origin: org.jboss.teiid/teiid-engine
public boolean hasAggregates() {
return getGroupBy() != null
|| getHaving() != null
|| !AggregateSymbolCollectorVisitor.getAggregates(getSelect(), false).isEmpty();
}
代码示例来源:origin: org.teiid/teiid-engine
public boolean hasAggregates() {
return getGroupBy() != null
|| getHaving() != null
|| !AggregateSymbolCollectorVisitor.getAggregates(getSelect(), false).isEmpty();
}
代码示例来源:origin: teiid/teiid
public boolean hasAggregates() {
return getGroupBy() != null
|| getHaving() != null
|| !AggregateSymbolCollectorVisitor.getAggregates(getSelect(), false).isEmpty();
}
代码示例来源:origin: org.teiid/teiid-engine
private void processCriteria(Collection<GroupSymbol> leftGroups,
PlannedResult plannedResult, List<GroupSymbol> rightGroups,
Set<Expression> requiredExpressions, final SymbolMap refs,
Criteria joinCriteria, GroupBy groupBy, boolean where) {
if (joinCriteria == null) {
return;
}
List<Criteria> crits = Criteria.separateCriteriaByAnd((Criteria)joinCriteria.clone());
for (Iterator<Criteria> critIter = crits.iterator(); critIter.hasNext();) {
Criteria conjunct = critIter.next();
List<Expression> additionalRequired = new LinkedList<Expression>();
AggregateSymbolCollectorVisitor.getAggregates(conjunct, additionalRequired, additionalRequired, additionalRequired, null, groupBy!=null?groupBy.getSymbols():null);
ReferenceReplacementVisitor emv = new ReferenceReplacementVisitor(refs);
DeepPostOrderNavigator.doVisit(conjunct, emv);
if (!emv.replacedAny) {
//if not correlated, then leave it on the query
critIter.remove();
if (where) {
plannedResult.query.setCriteria(Criteria.combineCriteria(plannedResult.query.getCriteria(), conjunct));
} else {
plannedResult.query.setHaving(Criteria.combineCriteria(plannedResult.query.getHaving(), conjunct));
}
} else {
requiredExpressions.addAll(additionalRequired);
}
}
RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, plannedResult.leftExpressions, plannedResult.rightExpressions, crits, plannedResult.nonEquiJoinCriteria);
}
代码示例来源:origin: org.jboss.teiid/teiid-engine
private boolean requiresDistinctRows(Query query) {
Set<AggregateSymbol> aggs = new HashSet<AggregateSymbol>();
aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getSelect(), false));
aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getHaving(), false));
if (!aggs.isEmpty() || query.getGroupBy() != null) {
if (!AggregateSymbol.areAggregatesCardinalityDependent(aggs)) {
return false;
}
} else if (query.getSelect().isDistinct()) {
for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
Expression ex = SymbolMap.getExpression(projectSymbol);
if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
return true;
}
if (!ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ex).isEmpty()) {
return true;
}
}
return false;
}
return true;
}
代码示例来源:origin: org.jboss.teiid/teiid-engine
private void processCriteria(Collection<GroupSymbol> leftGroups,
PlannedResult plannedResult, List<GroupSymbol> rightGroups,
Set<Expression> requiredExpressions, final SymbolMap refs,
Criteria joinCriteria, GroupBy groupBy, boolean where) {
if (joinCriteria == null) {
return;
}
List<Criteria> crits = Criteria.separateCriteriaByAnd((Criteria)joinCriteria.clone());
for (Iterator<Criteria> critIter = crits.iterator(); critIter.hasNext();) {
Criteria conjunct = critIter.next();
List<Expression> additionalRequired = new LinkedList<Expression>();
AggregateSymbolCollectorVisitor.getAggregates(conjunct, additionalRequired, additionalRequired, additionalRequired, null, groupBy!=null?groupBy.getSymbols():null);
ReferenceReplacementVisitor emv = new ReferenceReplacementVisitor(refs);
DeepPostOrderNavigator.doVisit(conjunct, emv);
if (!emv.replacedAny) {
//if not correlated, then leave it on the query
critIter.remove();
if (where) {
plannedResult.query.setCriteria(Criteria.combineCriteria(plannedResult.query.getCriteria(), conjunct));
} else {
plannedResult.query.setHaving(Criteria.combineCriteria(plannedResult.query.getHaving(), conjunct));
}
} else {
requiredExpressions.addAll(additionalRequired);
}
}
RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, plannedResult.leftExpressions, plannedResult.rightExpressions, crits, plannedResult.nonEquiJoinCriteria);
}
代码示例来源:origin: teiid/teiid
/**
* Return true if the result from the subquery may be different
* if non-distinct rows are used as input
* @param query
* @return
*/
public static boolean requiresDistinctRows(Query query) {
Set<AggregateSymbol> aggs = new HashSet<AggregateSymbol>();
aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getSelect(), false));
aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getHaving(), false));
if (!aggs.isEmpty() || query.getGroupBy() != null) {
if (!AggregateSymbol.areAggregatesCardinalityDependent(aggs)) {
return false;
}
} else if (query.getSelect().isDistinct()) {
for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
Expression ex = SymbolMap.getExpression(projectSymbol);
if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
return true;
}
if (!ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ex).isEmpty()) {
return true;
}
}
return false;
}
return true;
}
代码示例来源:origin: org.jboss.teiid/teiid-engine
private boolean canRaiseInputset(Command command, Collection<ElementSymbol> bindings) {
// check to see if this is query.
if (!(command instanceof Query)) {
return false;
}
Query query = (Query)command;
Criteria crit = query.getCriteria();
if (crit != null && (query.getGroupBy() != null || query.getHaving() != null || query.getLimit() != null)) {
return false;
}
//temporarily remove the criteria
query.setCriteria(null);
//just throw away order by
query.setOrderBy(null);
List<ElementSymbol> references = QueryUtil.getBindingsReferences(query, bindings);
query.setCriteria(crit);
//if there are any input set bindings in the rest of the command, don't convert
return references.isEmpty();
}
代码示例来源:origin: org.teiid/teiid-engine
/**
* Return true if the result from the subquery may be different
* if non-distinct rows are used as input
* @param query
* @return
*/
public static boolean requiresDistinctRows(Query query) {
Set<AggregateSymbol> aggs = new HashSet<AggregateSymbol>();
aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getSelect(), false));
aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getHaving(), false));
if (!aggs.isEmpty() || query.getGroupBy() != null) {
if (!AggregateSymbol.areAggregatesCardinalityDependent(aggs)) {
return false;
}
} else if (query.getSelect().isDistinct()) {
for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
Expression ex = SymbolMap.getExpression(projectSymbol);
if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
return true;
}
if (!ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ex).isEmpty()) {
return true;
}
}
return false;
}
return true;
}
代码示例来源:origin: org.jboss.teiid/teiid-engine
/**
* visit the query in definition order
*/
public void visit(Query obj) {
visitNodes(obj.getWith());
if (obj.getOrderBy() != null || obj.getLimit() != null) {
visitor.namingContext.aliasColumns = !stripColumnAliases;
}
visitNode(obj.getFrom());
if (this.aliasMapping != null) {
HashSet<String> newSymbols = new HashSet<String>();
for (Map.Entry<String, String> entry : this.visitor.namingContext.groupNames.entrySet()) {
if (!newSymbols.add(entry.getValue())) {
throw new TeiidRuntimeException(new QueryPlannerException(QueryPlugin.Event.TEIID31126, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31126, entry.getValue())));
}
}
}
visitNode(obj.getCriteria());
visitNode(obj.getGroupBy());
visitNode(obj.getHaving());
visitNode(obj.getSelect());
visitNode(obj.getOrderBy());
}
代码示例来源:origin: org.teiid/teiid-engine
/**
* visit the query in definition order
*/
public void visit(Query obj) {
visitNodes(obj.getWith());
if (obj.getOrderBy() != null || obj.getLimit() != null) {
visitor.namingContext.aliasColumns = !stripColumnAliases;
}
visitNode(obj.getFrom());
if (this.aliasMapping != null) {
HashSet<String> newSymbols = new HashSet<String>();
for (Map.Entry<String, String> entry : this.visitor.namingContext.groupNames.entrySet()) {
if (!newSymbols.add(entry.getValue())) {
throw new TeiidRuntimeException(new QueryPlannerException(QueryPlugin.Event.TEIID31126, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31126, entry.getValue())));
}
}
}
visitNode(obj.getCriteria());
visitNode(obj.getGroupBy());
visitNode(obj.getHaving());
visitNode(obj.getSelect());
visitNode(obj.getOrderBy());
}
代码示例来源:origin: teiid/teiid
@Test public void testRewriteCorrelatedSubqueryInHaving() throws Exception {
String sql = "select pm1.g1.e1 from pm1.g1 group by pm1.g1.e1 having pm1.g1.e1 in (select pm1.g1.e1 from pm1.g2)"; //$NON-NLS-1$
String expected = "SELECT pm1.g1.e1 FROM pm1.g1 GROUP BY pm1.g1.e1 HAVING pm1.g1.e1 IN (SELECT pm1.g1.e1 FROM pm1.g2)"; //$NON-NLS-1$
Query query = (Query)helpTestRewriteCommand(sql, expected);
List<Reference> refs = new LinkedList<Reference>();
GroupSymbol gs = new GroupSymbol("pm1.g1");
ResolverUtil.resolveGroup(gs, RealMetadataFactory.example1Cached());
CorrelatedReferenceCollectorVisitor.collectReferences(query.getHaving(), Arrays.asList(gs), refs, RealMetadataFactory.example1Cached());//$NON-NLS-1$
assertEquals(1, refs.size());
}
代码示例来源:origin: teiid/teiid
/**
* visit the query in definition order
*/
public void visit(Query obj) {
visitNodes(obj.getWith());
if (obj.getOrderBy() != null || obj.getLimit() != null) {
visitor.namingContext.aliasColumns = !stripColumnAliases;
}
visitNode(obj.getFrom());
if (this.aliasMapping != null) {
HashSet<String> newSymbols = new HashSet<String>();
for (Map.Entry<String, String> entry : this.visitor.namingContext.groupNames.entrySet()) {
if (!newSymbols.add(entry.getValue())) {
throw new TeiidRuntimeException(new QueryPlannerException(QueryPlugin.Event.TEIID31126, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31126, entry.getValue())));
}
}
}
visitNode(obj.getCriteria());
visitNode(obj.getGroupBy());
visitNode(obj.getHaving());
visitNode(obj.getSelect());
visitNode(obj.getOrderBy());
}
代码示例来源:origin: org.teiid/teiid-engine
/**
* Compare two queries for equality. Queries will only evaluate to equal if
* they are IDENTICAL: select variables are in the same order, criteria are in
* the same exact structure.
* @param obj Other object
* @return True if equal
*/
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(!(obj instanceof Query)) {
return false;
}
Query other = (Query) obj;
return EquivalenceUtil.areEqual(getSelect(), other.getSelect()) &&
EquivalenceUtil.areEqual(getFrom(), other.getFrom()) &&
EquivalenceUtil.areEqual(getCriteria(), other.getCriteria()) &&
EquivalenceUtil.areEqual(getGroupBy(), other.getGroupBy()) &&
EquivalenceUtil.areEqual(getHaving(), other.getHaving()) &&
EquivalenceUtil.areEqual(getOrderBy(), other.getOrderBy()) &&
EquivalenceUtil.areEqual(getLimit(), other.getLimit()) &&
EquivalenceUtil.areEqual(getWith(), other.getWith()) &&
sameOptionAndHint(other);
}
代码示例来源:origin: teiid/teiid
/**
* Compare two queries for equality. Queries will only evaluate to equal if
* they are IDENTICAL: select variables are in the same order, criteria are in
* the same exact structure.
* @param obj Other object
* @return True if equal
*/
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(!(obj instanceof Query)) {
return false;
}
Query other = (Query) obj;
return EquivalenceUtil.areEqual(getSelect(), other.getSelect()) &&
EquivalenceUtil.areEqual(getFrom(), other.getFrom()) &&
EquivalenceUtil.areEqual(getCriteria(), other.getCriteria()) &&
EquivalenceUtil.areEqual(getGroupBy(), other.getGroupBy()) &&
EquivalenceUtil.areEqual(getHaving(), other.getHaving()) &&
EquivalenceUtil.areEqual(getOrderBy(), other.getOrderBy()) &&
EquivalenceUtil.areEqual(getLimit(), other.getLimit()) &&
EquivalenceUtil.areEqual(getWith(), other.getWith()) &&
sameOptionAndHint(other);
}
代码示例来源:origin: org.jboss.teiid/teiid-engine
private void validateXMLQuery(Query obj) {
if(obj.getGroupBy() != null) {
handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0031"), obj); //$NON-NLS-1$
}
if(obj.getHaving() != null) {
handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0032"), obj); //$NON-NLS-1$
}
if(obj.getLimit() != null) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.limit_not_valid_for_xml"), obj); //$NON-NLS-1$
}
if (obj.getOrderBy() != null) {
OrderBy orderBy = obj.getOrderBy();
for (OrderByItem item : orderBy.getOrderByItems()) {
if (!(item.getSymbol() instanceof ElementSymbol)) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.orderby_expression_xml"), obj); //$NON-NLS-1$
}
}
}
}
代码示例来源:origin: org.jboss.teiid/teiid-engine
/**
* Compare two queries for equality. Queries will only evaluate to equal if
* they are IDENTICAL: select variables are in the same order, criteria are in
* the same exact structure.
* @param obj Other object
* @return True if equal
*/
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(!(obj instanceof Query)) {
return false;
}
Query other = (Query) obj;
return EquivalenceUtil.areEqual(getSelect(), other.getSelect()) &&
EquivalenceUtil.areEqual(getFrom(), other.getFrom()) &&
EquivalenceUtil.areEqual(getCriteria(), other.getCriteria()) &&
EquivalenceUtil.areEqual(getGroupBy(), other.getGroupBy()) &&
EquivalenceUtil.areEqual(getHaving(), other.getHaving()) &&
EquivalenceUtil.areEqual(getOrderBy(), other.getOrderBy()) &&
EquivalenceUtil.areEqual(getLimit(), other.getLimit()) &&
EquivalenceUtil.areEqual(getWith(), other.getWith()) &&
getIsXML() == other.getIsXML() &&
sameOptionAndHint(other);
}
代码示例来源:origin: org.teiid/teiid-engine
public void visit(Query obj) {
preVisitVisitor(obj);
visitNodes(obj.getWith());
visitNode(obj.getSelect());
visitNode(obj.getInto());
visitNode(obj.getFrom());
visitNode(obj.getCriteria());
visitNode(obj.getGroupBy());
visitNode(obj.getHaving());
visitNode(obj.getOrderBy());
visitNode(obj.getLimit());
visitNode(obj.getOption());
postVisitVisitor(obj);
}
public void visit(RaiseStatement obj) {
代码示例来源:origin: org.jboss.teiid/teiid-engine
public void visit(Query obj) {
preVisitVisitor(obj);
visitNodes(obj.getWith());
visitNode(obj.getSelect());
visitNode(obj.getInto());
visitNode(obj.getFrom());
visitNode(obj.getCriteria());
visitNode(obj.getGroupBy());
visitNode(obj.getHaving());
visitNode(obj.getOrderBy());
visitNode(obj.getLimit());
visitNode(obj.getOption());
postVisitVisitor(obj);
}
public void visit(RaiseStatement obj) {
代码示例来源:origin: teiid/teiid
public void visit(Query obj) {
preVisitVisitor(obj);
visitNodes(obj.getWith());
visitNode(obj.getSelect());
visitNode(obj.getInto());
visitNode(obj.getFrom());
visitNode(obj.getCriteria());
visitNode(obj.getGroupBy());
visitNode(obj.getHaving());
visitNode(obj.getOrderBy());
visitNode(obj.getLimit());
visitNode(obj.getOption());
postVisitVisitor(obj);
}
public void visit(RaiseStatement obj) {
内容来源于网络,如有侵权,请联系作者删除!