@Override public PlanInfo getPlanInfo(ExecutionContext context) throws FunctionDomainException, TypeMismatchException, NameResolutionException, QueryInvocationTargetException { /* * This function would be called only if the RangeJunction is a part of GroupJunction.It would * be invoked in the organized operands method of GroupJunction. In such case it is guaranteed * that all the operands are the filter operand using the same index. In such case there is zero * possibility o first iterator being either an iter operand or a constant. As those types of * Operands would be part of Group Junction */ return this._operands[0].getPlanInfo(context); }
if (!this._operands[i].getPlanInfo(context).evalAsFilter || ((Filter) this._operands[i]).isLimitApplicableAtIndexLevel(context)) { return false; if (this._operands[i].getPlanInfo(context).evalAsFilter && this._operands[i].getType() == JUNCTION) { return false; } else if (this._operands[i].getPlanInfo(context).evalAsFilter) { foundIndex = true;
PlanInfo pi = this._operands[i].getPlanInfo(context); if (pi.evalAsFilter && this._operands[i].getType() == JUNCTION) { return false; if (!foundRightIndex) { IndexProtocol ip = (IndexProtocol) this._operands[i].getPlanInfo(context).indexes.get(0); if (ip.getCanonicalizedIndexedExpression().equals(canonicalizedOrderByClause) && pi.isPreferred) {
@Override public boolean isProjectionEvaluationAPossibility(ExecutionContext context) throws FunctionDomainException, TypeMismatchException, NameResolutionException, QueryInvocationTargetException { for (int i = 0; i < this._operands.length; ++i) { // LIKE gives rise to a JUNCTION in CompiledLike whether wildcard is present or not if ((this._operands[i].getType() == JUNCTION || this._operands[i].getType() == LIKE) && this._operands[i].getPlanInfo(context).evalAsFilter) { return false; } } return true; }
@Override protected PlanInfo protGetPlanInfo(ExecutionContext context) throws FunctionDomainException, TypeMismatchException, NameResolutionException, QueryInvocationTargetException { Support.Assert(_operator == LITERAL_or || _operator == LITERAL_and); PlanInfo resultPlanInfo = new PlanInfo(); // set default evalAsFilter depending on operator boolean isOr = (_operator == LITERAL_or); resultPlanInfo.evalAsFilter = isOr; // collect indexes // for LITERAL_and operator, if any say yes to filter, // then change default evalAsFilter from false to true // of LITERAL_or operator, if any say no to filter, change to false for (int i = 0; i < _operands.length; i++) { PlanInfo opPlanInfo = _operands[i].getPlanInfo(context); resultPlanInfo.indexes.addAll(opPlanInfo.indexes); if (!isOr && opPlanInfo.evalAsFilter) { resultPlanInfo.evalAsFilter = true; } else if (isOr && !opPlanInfo.evalAsFilter) { resultPlanInfo.evalAsFilter = false; } } return resultPlanInfo; }
IndexInfo[] indx = null; Object listOrPosition = null; boolean evalAsFilter = tempOp.getPlanInfo(context).evalAsFilter;
if (!cv.getPlanInfo(context).evalAsFilter) { itr.remove(); evalOperands.add(cv); boolean isFilterevaluable = tempOp.getPlanInfo(context).evalAsFilter; evalAsFilter = evalAsFilter || isFilterevaluable; IndexInfo[] indx = null;
if (operand.getPlanInfo(context).evalAsFilter) { boolean operandEvalAsFilter = expndOperand.getPlanInfo(context).evalAsFilter; isJunctionNeeded = isJunctionNeeded || operandEvalAsFilter; Set set = QueryUtils.getCurrentScopeUltimateRuntimeIteratorsIfAny(expndOperand, context);
if (_operands[i].getPlanInfo(context).evalAsFilter) { indexCount++; evalOperands.add(0, _operands[i]); PlanInfo pi = _operands[i].getPlanInfo(context);
for (int i = 0; i < _operands.length; i++) { CompiledValue operand = _operands[i]; if (operand.getPlanInfo(context).evalAsFilter) { Indexable cc = (Indexable) operand; if (indxInfo == null) {
PlanInfo planInfo = this.whereClause.getPlanInfo(context); if (context.cacheGet(this.whereClause) == null) { context.cachePut(this.whereClause, CLAUSE_EVALUATED);