org.teiid.query.sql.lang.Query.getHaving()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(14.6k)|赞(0)|评价(0)|浏览(646)

本文整理了Java中org.teiid.query.sql.lang.Query.getHaving方法的一些代码示例,展示了Query.getHaving的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Query.getHaving方法的具体详情如下:
包路径:org.teiid.query.sql.lang.Query
类名称:Query
方法名:getHaving

Query.getHaving介绍

[英]Get the having clause for the query.
[中]获取查询的having子句。

代码示例

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. public boolean hasAggregates() {
  2. return getGroupBy() != null
  3. || getHaving() != null
  4. || !AggregateSymbolCollectorVisitor.getAggregates(getSelect(), false).isEmpty();
  5. }

代码示例来源:origin: org.teiid/teiid-engine

  1. public boolean hasAggregates() {
  2. return getGroupBy() != null
  3. || getHaving() != null
  4. || !AggregateSymbolCollectorVisitor.getAggregates(getSelect(), false).isEmpty();
  5. }

代码示例来源:origin: teiid/teiid

  1. public boolean hasAggregates() {
  2. return getGroupBy() != null
  3. || getHaving() != null
  4. || !AggregateSymbolCollectorVisitor.getAggregates(getSelect(), false).isEmpty();
  5. }

代码示例来源:origin: org.teiid/teiid-engine

  1. private void processCriteria(Collection<GroupSymbol> leftGroups,
  2. PlannedResult plannedResult, List<GroupSymbol> rightGroups,
  3. Set<Expression> requiredExpressions, final SymbolMap refs,
  4. Criteria joinCriteria, GroupBy groupBy, boolean where) {
  5. if (joinCriteria == null) {
  6. return;
  7. }
  8. List<Criteria> crits = Criteria.separateCriteriaByAnd((Criteria)joinCriteria.clone());
  9. for (Iterator<Criteria> critIter = crits.iterator(); critIter.hasNext();) {
  10. Criteria conjunct = critIter.next();
  11. List<Expression> additionalRequired = new LinkedList<Expression>();
  12. AggregateSymbolCollectorVisitor.getAggregates(conjunct, additionalRequired, additionalRequired, additionalRequired, null, groupBy!=null?groupBy.getSymbols():null);
  13. ReferenceReplacementVisitor emv = new ReferenceReplacementVisitor(refs);
  14. DeepPostOrderNavigator.doVisit(conjunct, emv);
  15. if (!emv.replacedAny) {
  16. //if not correlated, then leave it on the query
  17. critIter.remove();
  18. if (where) {
  19. plannedResult.query.setCriteria(Criteria.combineCriteria(plannedResult.query.getCriteria(), conjunct));
  20. } else {
  21. plannedResult.query.setHaving(Criteria.combineCriteria(plannedResult.query.getHaving(), conjunct));
  22. }
  23. } else {
  24. requiredExpressions.addAll(additionalRequired);
  25. }
  26. }
  27. RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, plannedResult.leftExpressions, plannedResult.rightExpressions, crits, plannedResult.nonEquiJoinCriteria);
  28. }

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. private boolean requiresDistinctRows(Query query) {
  2. Set<AggregateSymbol> aggs = new HashSet<AggregateSymbol>();
  3. aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getSelect(), false));
  4. aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getHaving(), false));
  5. if (!aggs.isEmpty() || query.getGroupBy() != null) {
  6. if (!AggregateSymbol.areAggregatesCardinalityDependent(aggs)) {
  7. return false;
  8. }
  9. } else if (query.getSelect().isDistinct()) {
  10. for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
  11. Expression ex = SymbolMap.getExpression(projectSymbol);
  12. if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
  13. return true;
  14. }
  15. if (!ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ex).isEmpty()) {
  16. return true;
  17. }
  18. }
  19. return false;
  20. }
  21. return true;
  22. }

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. private void processCriteria(Collection<GroupSymbol> leftGroups,
  2. PlannedResult plannedResult, List<GroupSymbol> rightGroups,
  3. Set<Expression> requiredExpressions, final SymbolMap refs,
  4. Criteria joinCriteria, GroupBy groupBy, boolean where) {
  5. if (joinCriteria == null) {
  6. return;
  7. }
  8. List<Criteria> crits = Criteria.separateCriteriaByAnd((Criteria)joinCriteria.clone());
  9. for (Iterator<Criteria> critIter = crits.iterator(); critIter.hasNext();) {
  10. Criteria conjunct = critIter.next();
  11. List<Expression> additionalRequired = new LinkedList<Expression>();
  12. AggregateSymbolCollectorVisitor.getAggregates(conjunct, additionalRequired, additionalRequired, additionalRequired, null, groupBy!=null?groupBy.getSymbols():null);
  13. ReferenceReplacementVisitor emv = new ReferenceReplacementVisitor(refs);
  14. DeepPostOrderNavigator.doVisit(conjunct, emv);
  15. if (!emv.replacedAny) {
  16. //if not correlated, then leave it on the query
  17. critIter.remove();
  18. if (where) {
  19. plannedResult.query.setCriteria(Criteria.combineCriteria(plannedResult.query.getCriteria(), conjunct));
  20. } else {
  21. plannedResult.query.setHaving(Criteria.combineCriteria(plannedResult.query.getHaving(), conjunct));
  22. }
  23. } else {
  24. requiredExpressions.addAll(additionalRequired);
  25. }
  26. }
  27. RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, plannedResult.leftExpressions, plannedResult.rightExpressions, crits, plannedResult.nonEquiJoinCriteria);
  28. }

代码示例来源:origin: teiid/teiid

  1. /**
  2. * Return true if the result from the subquery may be different
  3. * if non-distinct rows are used as input
  4. * @param query
  5. * @return
  6. */
  7. public static boolean requiresDistinctRows(Query query) {
  8. Set<AggregateSymbol> aggs = new HashSet<AggregateSymbol>();
  9. aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getSelect(), false));
  10. aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getHaving(), false));
  11. if (!aggs.isEmpty() || query.getGroupBy() != null) {
  12. if (!AggregateSymbol.areAggregatesCardinalityDependent(aggs)) {
  13. return false;
  14. }
  15. } else if (query.getSelect().isDistinct()) {
  16. for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
  17. Expression ex = SymbolMap.getExpression(projectSymbol);
  18. if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
  19. return true;
  20. }
  21. if (!ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ex).isEmpty()) {
  22. return true;
  23. }
  24. }
  25. return false;
  26. }
  27. return true;
  28. }

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. private boolean canRaiseInputset(Command command, Collection<ElementSymbol> bindings) {
  2. // check to see if this is query.
  3. if (!(command instanceof Query)) {
  4. return false;
  5. }
  6. Query query = (Query)command;
  7. Criteria crit = query.getCriteria();
  8. if (crit != null && (query.getGroupBy() != null || query.getHaving() != null || query.getLimit() != null)) {
  9. return false;
  10. }
  11. //temporarily remove the criteria
  12. query.setCriteria(null);
  13. //just throw away order by
  14. query.setOrderBy(null);
  15. List<ElementSymbol> references = QueryUtil.getBindingsReferences(query, bindings);
  16. query.setCriteria(crit);
  17. //if there are any input set bindings in the rest of the command, don't convert
  18. return references.isEmpty();
  19. }

代码示例来源:origin: org.teiid/teiid-engine

  1. /**
  2. * Return true if the result from the subquery may be different
  3. * if non-distinct rows are used as input
  4. * @param query
  5. * @return
  6. */
  7. public static boolean requiresDistinctRows(Query query) {
  8. Set<AggregateSymbol> aggs = new HashSet<AggregateSymbol>();
  9. aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getSelect(), false));
  10. aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(query.getHaving(), false));
  11. if (!aggs.isEmpty() || query.getGroupBy() != null) {
  12. if (!AggregateSymbol.areAggregatesCardinalityDependent(aggs)) {
  13. return false;
  14. }
  15. } else if (query.getSelect().isDistinct()) {
  16. for (Expression projectSymbol : query.getSelect().getProjectedSymbols()) {
  17. Expression ex = SymbolMap.getExpression(projectSymbol);
  18. if (FunctionCollectorVisitor.isNonDeterministic(ex)) {
  19. return true;
  20. }
  21. if (!ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ex).isEmpty()) {
  22. return true;
  23. }
  24. }
  25. return false;
  26. }
  27. return true;
  28. }

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. /**
  2. * visit the query in definition order
  3. */
  4. public void visit(Query obj) {
  5. visitNodes(obj.getWith());
  6. if (obj.getOrderBy() != null || obj.getLimit() != null) {
  7. visitor.namingContext.aliasColumns = !stripColumnAliases;
  8. }
  9. visitNode(obj.getFrom());
  10. if (this.aliasMapping != null) {
  11. HashSet<String> newSymbols = new HashSet<String>();
  12. for (Map.Entry<String, String> entry : this.visitor.namingContext.groupNames.entrySet()) {
  13. if (!newSymbols.add(entry.getValue())) {
  14. throw new TeiidRuntimeException(new QueryPlannerException(QueryPlugin.Event.TEIID31126, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31126, entry.getValue())));
  15. }
  16. }
  17. }
  18. visitNode(obj.getCriteria());
  19. visitNode(obj.getGroupBy());
  20. visitNode(obj.getHaving());
  21. visitNode(obj.getSelect());
  22. visitNode(obj.getOrderBy());
  23. }

代码示例来源:origin: org.teiid/teiid-engine

  1. /**
  2. * visit the query in definition order
  3. */
  4. public void visit(Query obj) {
  5. visitNodes(obj.getWith());
  6. if (obj.getOrderBy() != null || obj.getLimit() != null) {
  7. visitor.namingContext.aliasColumns = !stripColumnAliases;
  8. }
  9. visitNode(obj.getFrom());
  10. if (this.aliasMapping != null) {
  11. HashSet<String> newSymbols = new HashSet<String>();
  12. for (Map.Entry<String, String> entry : this.visitor.namingContext.groupNames.entrySet()) {
  13. if (!newSymbols.add(entry.getValue())) {
  14. throw new TeiidRuntimeException(new QueryPlannerException(QueryPlugin.Event.TEIID31126, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31126, entry.getValue())));
  15. }
  16. }
  17. }
  18. visitNode(obj.getCriteria());
  19. visitNode(obj.getGroupBy());
  20. visitNode(obj.getHaving());
  21. visitNode(obj.getSelect());
  22. visitNode(obj.getOrderBy());
  23. }

代码示例来源:origin: teiid/teiid

  1. @Test public void testRewriteCorrelatedSubqueryInHaving() throws Exception {
  2. 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$
  3. 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$
  4. Query query = (Query)helpTestRewriteCommand(sql, expected);
  5. List<Reference> refs = new LinkedList<Reference>();
  6. GroupSymbol gs = new GroupSymbol("pm1.g1");
  7. ResolverUtil.resolveGroup(gs, RealMetadataFactory.example1Cached());
  8. CorrelatedReferenceCollectorVisitor.collectReferences(query.getHaving(), Arrays.asList(gs), refs, RealMetadataFactory.example1Cached());//$NON-NLS-1$
  9. assertEquals(1, refs.size());
  10. }

代码示例来源:origin: teiid/teiid

  1. /**
  2. * visit the query in definition order
  3. */
  4. public void visit(Query obj) {
  5. visitNodes(obj.getWith());
  6. if (obj.getOrderBy() != null || obj.getLimit() != null) {
  7. visitor.namingContext.aliasColumns = !stripColumnAliases;
  8. }
  9. visitNode(obj.getFrom());
  10. if (this.aliasMapping != null) {
  11. HashSet<String> newSymbols = new HashSet<String>();
  12. for (Map.Entry<String, String> entry : this.visitor.namingContext.groupNames.entrySet()) {
  13. if (!newSymbols.add(entry.getValue())) {
  14. throw new TeiidRuntimeException(new QueryPlannerException(QueryPlugin.Event.TEIID31126, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31126, entry.getValue())));
  15. }
  16. }
  17. }
  18. visitNode(obj.getCriteria());
  19. visitNode(obj.getGroupBy());
  20. visitNode(obj.getHaving());
  21. visitNode(obj.getSelect());
  22. visitNode(obj.getOrderBy());
  23. }

代码示例来源:origin: org.teiid/teiid-engine

  1. /**
  2. * Compare two queries for equality. Queries will only evaluate to equal if
  3. * they are IDENTICAL: select variables are in the same order, criteria are in
  4. * the same exact structure.
  5. * @param obj Other object
  6. * @return True if equal
  7. */
  8. public boolean equals(Object obj) {
  9. if(this == obj) {
  10. return true;
  11. }
  12. if(!(obj instanceof Query)) {
  13. return false;
  14. }
  15. Query other = (Query) obj;
  16. return EquivalenceUtil.areEqual(getSelect(), other.getSelect()) &&
  17. EquivalenceUtil.areEqual(getFrom(), other.getFrom()) &&
  18. EquivalenceUtil.areEqual(getCriteria(), other.getCriteria()) &&
  19. EquivalenceUtil.areEqual(getGroupBy(), other.getGroupBy()) &&
  20. EquivalenceUtil.areEqual(getHaving(), other.getHaving()) &&
  21. EquivalenceUtil.areEqual(getOrderBy(), other.getOrderBy()) &&
  22. EquivalenceUtil.areEqual(getLimit(), other.getLimit()) &&
  23. EquivalenceUtil.areEqual(getWith(), other.getWith()) &&
  24. sameOptionAndHint(other);
  25. }

代码示例来源:origin: teiid/teiid

  1. /**
  2. * Compare two queries for equality. Queries will only evaluate to equal if
  3. * they are IDENTICAL: select variables are in the same order, criteria are in
  4. * the same exact structure.
  5. * @param obj Other object
  6. * @return True if equal
  7. */
  8. public boolean equals(Object obj) {
  9. if(this == obj) {
  10. return true;
  11. }
  12. if(!(obj instanceof Query)) {
  13. return false;
  14. }
  15. Query other = (Query) obj;
  16. return EquivalenceUtil.areEqual(getSelect(), other.getSelect()) &&
  17. EquivalenceUtil.areEqual(getFrom(), other.getFrom()) &&
  18. EquivalenceUtil.areEqual(getCriteria(), other.getCriteria()) &&
  19. EquivalenceUtil.areEqual(getGroupBy(), other.getGroupBy()) &&
  20. EquivalenceUtil.areEqual(getHaving(), other.getHaving()) &&
  21. EquivalenceUtil.areEqual(getOrderBy(), other.getOrderBy()) &&
  22. EquivalenceUtil.areEqual(getLimit(), other.getLimit()) &&
  23. EquivalenceUtil.areEqual(getWith(), other.getWith()) &&
  24. sameOptionAndHint(other);
  25. }

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. private void validateXMLQuery(Query obj) {
  2. if(obj.getGroupBy() != null) {
  3. handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0031"), obj); //$NON-NLS-1$
  4. }
  5. if(obj.getHaving() != null) {
  6. handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0032"), obj); //$NON-NLS-1$
  7. }
  8. if(obj.getLimit() != null) {
  9. handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.limit_not_valid_for_xml"), obj); //$NON-NLS-1$
  10. }
  11. if (obj.getOrderBy() != null) {
  12. OrderBy orderBy = obj.getOrderBy();
  13. for (OrderByItem item : orderBy.getOrderByItems()) {
  14. if (!(item.getSymbol() instanceof ElementSymbol)) {
  15. handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.orderby_expression_xml"), obj); //$NON-NLS-1$
  16. }
  17. }
  18. }
  19. }

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. /**
  2. * Compare two queries for equality. Queries will only evaluate to equal if
  3. * they are IDENTICAL: select variables are in the same order, criteria are in
  4. * the same exact structure.
  5. * @param obj Other object
  6. * @return True if equal
  7. */
  8. public boolean equals(Object obj) {
  9. if(this == obj) {
  10. return true;
  11. }
  12. if(!(obj instanceof Query)) {
  13. return false;
  14. }
  15. Query other = (Query) obj;
  16. return EquivalenceUtil.areEqual(getSelect(), other.getSelect()) &&
  17. EquivalenceUtil.areEqual(getFrom(), other.getFrom()) &&
  18. EquivalenceUtil.areEqual(getCriteria(), other.getCriteria()) &&
  19. EquivalenceUtil.areEqual(getGroupBy(), other.getGroupBy()) &&
  20. EquivalenceUtil.areEqual(getHaving(), other.getHaving()) &&
  21. EquivalenceUtil.areEqual(getOrderBy(), other.getOrderBy()) &&
  22. EquivalenceUtil.areEqual(getLimit(), other.getLimit()) &&
  23. EquivalenceUtil.areEqual(getWith(), other.getWith()) &&
  24. getIsXML() == other.getIsXML() &&
  25. sameOptionAndHint(other);
  26. }

代码示例来源:origin: org.teiid/teiid-engine

  1. public void visit(Query obj) {
  2. preVisitVisitor(obj);
  3. visitNodes(obj.getWith());
  4. visitNode(obj.getSelect());
  5. visitNode(obj.getInto());
  6. visitNode(obj.getFrom());
  7. visitNode(obj.getCriteria());
  8. visitNode(obj.getGroupBy());
  9. visitNode(obj.getHaving());
  10. visitNode(obj.getOrderBy());
  11. visitNode(obj.getLimit());
  12. visitNode(obj.getOption());
  13. postVisitVisitor(obj);
  14. }
  15. public void visit(RaiseStatement obj) {

代码示例来源:origin: org.jboss.teiid/teiid-engine

  1. public void visit(Query obj) {
  2. preVisitVisitor(obj);
  3. visitNodes(obj.getWith());
  4. visitNode(obj.getSelect());
  5. visitNode(obj.getInto());
  6. visitNode(obj.getFrom());
  7. visitNode(obj.getCriteria());
  8. visitNode(obj.getGroupBy());
  9. visitNode(obj.getHaving());
  10. visitNode(obj.getOrderBy());
  11. visitNode(obj.getLimit());
  12. visitNode(obj.getOption());
  13. postVisitVisitor(obj);
  14. }
  15. public void visit(RaiseStatement obj) {

代码示例来源:origin: teiid/teiid

  1. public void visit(Query obj) {
  2. preVisitVisitor(obj);
  3. visitNodes(obj.getWith());
  4. visitNode(obj.getSelect());
  5. visitNode(obj.getInto());
  6. visitNode(obj.getFrom());
  7. visitNode(obj.getCriteria());
  8. visitNode(obj.getGroupBy());
  9. visitNode(obj.getHaving());
  10. visitNode(obj.getOrderBy());
  11. visitNode(obj.getLimit());
  12. visitNode(obj.getOption());
  13. postVisitVisitor(obj);
  14. }
  15. public void visit(RaiseStatement obj) {

相关文章