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

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

本文整理了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

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) {

相关文章