/** * This utility method can be used to combine two criteria using an AND. * If both criteria are null, then null will be returned. If either is null, * then the other will be returned. If neither is null and the primaryCrit is * a CompoundCriteria, then the additionalCrit will be added to the primaryCrit * and the primaryCrit will be returned. If the primaryCrit is not compound, a new * CompoundCriteria will be created and both criteria will be added to it. * @param primaryCrit Primary criteria - may be modified * @param additionalCrit Won't be modified, but will likely be attached to the returned crit * @return Combined criteria */ public static Criteria combineCriteria(Criteria primaryCrit, Criteria additionalCrit) { return combineCriteria(primaryCrit, additionalCrit, false); }
/** * This utility method can be used to combine two criteria using an AND. * If both criteria are null, then null will be returned. If either is null, * then the other will be returned. If neither is null and the primaryCrit is * a CompoundCriteria, then the additionalCrit will be added to the primaryCrit * and the primaryCrit will be returned. If the primaryCrit is not compound, a new * CompoundCriteria will be created and both criteria will be added to it. * @param primaryCrit Primary criteria - may be modified * @param additionalCrit Won't be modified, but will likely be attached to the returned crit * @return Combined criteria */ public static Criteria combineCriteria(Criteria primaryCrit, Criteria additionalCrit) { return combineCriteria(primaryCrit, additionalCrit, false); }
/** * This utility method can be used to combine two criteria using an AND. * If both criteria are null, then null will be returned. If either is null, * then the other will be returned. If neither is null and the primaryCrit is * a CompoundCriteria, then the additionalCrit will be added to the primaryCrit * and the primaryCrit will be returned. If the primaryCrit is not compound, a new * CompoundCriteria will be created and both criteria will be added to it. * @param primaryCrit Primary criteria - may be modified * @param additionalCrit Won't be modified, but will likely be attached to the returned crit * @return Combined criteria */ public static Criteria combineCriteria(Criteria primaryCrit, Criteria additionalCrit) { return combineCriteria(primaryCrit, additionalCrit, false); }
public void addCriteria(Expression filter) { if (filter != null) { Criteria crit = null; if (filter instanceof Criteria) { crit = (Criteria)filter; } else { crit = new ExpressionCriteria(filter); } this.criteria = Criteria.combineCriteria(this.criteria, crit); } }
public void helpTestCombineCriteria(Criteria crit1, Criteria crit2, Criteria expected) { Criteria actual = Criteria.combineCriteria(crit1, crit2); assertEquals("Didn't combine the criteria correctly ", expected, actual); //$NON-NLS-1$ }
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); }
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); }
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); }
/** * Removes non-inferred staging table criteria. Places it directly onto the contextCriteria */ static boolean planStagingTableCriteria(Criteria criteria, XMLPlannerEnvironment planEnv) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { String rootTempGroupName = getStagingTableForConjunct(criteria, planEnv.getGlobalMetadata()); if (rootTempGroupName == null){ return false; } // Defect 13172 - be careful to check for previously found root staging table // conjuncts and combine that with current conjunct ResultSetInfo rs = planEnv.getStagingTableResultsInfo(rootTempGroupName); rs.setCriteria(Criteria.combineCriteria(rs.getCriteria(), criteria)); return true; }
@Override public void visit(UriResourceLambdaAny any) { accept(any.getExpression()); if (this.ctxLambda != null) { org.teiid.query.sql.symbol.Expression predicate = this.stack.pop(); Query q = buildSubquery(this.ctxLambda, new Constant(1)); Criteria crit = null; if (predicate instanceof Criteria) { crit = (Criteria)predicate; } else { crit = new ExpressionCriteria(predicate); } q.setCriteria(Criteria.combineCriteria(q.getCriteria(), crit)); predicate = new ExistsCriteria(q); this.stack.push(predicate); } this.ctxLambda = null; }
query.setCriteria(Criteria.combineCriteria(query.getCriteria(), Criteria.combineCriteria(current)));
query.setCriteria(Criteria.combineCriteria(query.getCriteria(), Criteria.combineCriteria(current)));
query.setCriteria(Criteria.combineCriteria(query.getCriteria(), Criteria.combineCriteria(current)));
private void buildAggregateQuery(DocumentNode node, Query outerQuery, ExpandDocumentNode expandResource, OrderBy expandOrder, Query query, EdmNavigationProperty navigationProperty) throws TeiidException { Select select = query.getSelect(); Array array = new Array(Object.class, new ArrayList<Expression>(select.getSymbols())); select.getSymbols().clear(); AggregateSymbol symbol = new AggregateSymbol(AggregateSymbol.Type.ARRAY_AGG.name(), false, array); select.addSymbol(symbol); symbol.setOrderBy(expandOrder); Criteria crit = node.buildJoinCriteria(expandResource, navigationProperty); if (crit != null) { query.setCriteria(Criteria.combineCriteria(crit, query.getCriteria())); } // else assertion error? expandResource.setColumnIndex(outerQuery.getSelect().getCount() + 1); ScalarSubquery agg = new ScalarSubquery(query); SubqueryHint subqueryHint = new SubqueryHint(); subqueryHint.setMergeJoin(true); agg.setSubqueryHint(subqueryHint); outerQuery.getSelect().addSymbol(agg); }
private void modifyToCheckMatViewStatus(QueryMetadataInterface metadata, QueryCommand queryCommand, Set<Object> ids) throws QueryMetadataException, TeiidComponentException { for (Object viewMatadataId : ids) { String schemaName = metadata.getName(metadata.getModelID(viewMatadataId)); String viewName = metadata.getName(viewMatadataId); Expression expr1 = new Constant(schemaName); Expression expr2 = new Constant(viewName); Function status = new Function("mvstatus", new Expression[] {expr1, expr2}); //$NON-NLS-1$ status.setType(DataTypeManager.DefaultDataClasses.INTEGER); FunctionDescriptor descriptor = metadata.getFunctionLibrary().findFunction("mvstatus", new Class[] { DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.STRING }); //$NON-NLS-1$ status.setFunctionDescriptor(descriptor); Query query = queryCommand.getProjectedQuery(); //insert first so that it gets evaluated ahead of any false predicate query.setCriteria(Criteria.combineCriteria(new CompareCriteria(status, CompareCriteria.EQ, new Constant(1)), query.getCriteria())); } }
private void modifyToCheckMatViewStatus(QueryMetadataInterface metadata, QueryCommand queryCommand, Set<Object> ids) throws QueryMetadataException, TeiidComponentException { for (Object viewMatadataId : ids) { String schemaName = metadata.getName(metadata.getModelID(viewMatadataId)); String viewName = metadata.getName(viewMatadataId); Expression expr1 = new Constant(schemaName); Expression expr2 = new Constant(viewName); Function status = new Function("mvstatus", new Expression[] {expr1, expr2}); //$NON-NLS-1$ status.setType(DataTypeManager.DefaultDataClasses.INTEGER); FunctionDescriptor descriptor = metadata.getFunctionLibrary().findFunction("mvstatus", new Class[] { DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.STRING }); //$NON-NLS-1$ status.setFunctionDescriptor(descriptor); Query query = queryCommand.getProjectedQuery(); //insert first so that it gets evaluated ahead of any false predicate query.setCriteria(Criteria.combineCriteria(new CompareCriteria(status, CompareCriteria.EQ, new Constant(1)), query.getCriteria())); } }
private void modifyToCheckMatViewStatus(QueryMetadataInterface metadata, QueryCommand queryCommand, Set<Object> ids) throws QueryMetadataException, TeiidComponentException { for (Object viewMatadataId : ids) { String schemaName = metadata.getName(metadata.getModelID(viewMatadataId)); String viewName = metadata.getName(viewMatadataId); Expression expr1 = new Constant(schemaName); Expression expr2 = new Constant(viewName); Function status = new Function("mvstatus", new Expression[] {expr1, expr2}); //$NON-NLS-1$ status.setType(DataTypeManager.DefaultDataClasses.INTEGER); FunctionDescriptor descriptor = metadata.getFunctionLibrary().findFunction("mvstatus", new Class[] { DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.STRING }); //$NON-NLS-1$ status.setFunctionDescriptor(descriptor); Query query = queryCommand.getProjectedQuery(); //insert first so that it gets evaluated ahead of any false predicate query.setCriteria(Criteria.combineCriteria(new CompareCriteria(status, CompareCriteria.EQ, new Constant(1)), query.getCriteria())); } }
delete.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(delete.getGroup(), metadata, Command.TYPE_DELETE, true)); if (info.getViewDefinition().getCriteria() != null) { delete.setCriteria(Criteria.combineCriteria(delete.getCriteria(), (Criteria)info.getViewDefinition().getCriteria().clone())); if (crit != null) { PostOrderNavigator.doVisit(crit, emv); query.setCriteria(Criteria.combineCriteria(query.getCriteria(), crit));
delete.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(delete.getGroup(), metadata, Command.TYPE_DELETE, true)); if (info.getViewDefinition().getCriteria() != null) { delete.setCriteria(Criteria.combineCriteria(delete.getCriteria(), (Criteria)info.getViewDefinition().getCriteria().clone())); if (crit != null) { PostOrderNavigator.doVisit(crit, emv); query.setCriteria(Criteria.combineCriteria(query.getCriteria(), crit));
delete.setUpdateInfo(ProcedureContainerResolver.getUpdateInfo(delete.getGroup(), metadata, Command.TYPE_DELETE, true)); if (info.getViewDefinition().getCriteria() != null) { delete.setCriteria(Criteria.combineCriteria(delete.getCriteria(), (Criteria)info.getViewDefinition().getCriteria().clone())); if (crit != null) { PostOrderNavigator.doVisit(crit, emv); query.setCriteria(Criteria.combineCriteria(query.getCriteria(), crit));