/** * Take all independent iterators from context and remove the one which matches for this Index's * independent iterator. Then get all Dependent iterators from given context for this Index's * independent iterator. * * @param context from executing query. * @return List of all iterators pertaining to this Index. */ private List getAllDependentRuntimeIterators(ExecutionContext context) { List<RuntimeIterator> indItrs = context .getCurrScopeDpndntItrsBasedOnSingleIndpndntItr(getRuntimeIteratorForThisIndex(context)); List<String> definitions = Arrays.asList(this.getCanonicalizedIteratorDefinitions()); // These are the common iterators between query from clause and index from clause. List itrs = new ArrayList(); for (RuntimeIterator itr : indItrs) { if (definitions.contains(itr.getDefinition())) { itrs.add(itr); } } return itrs; }
/** * Matches the Collection reference in given context for this index's from-clause in all current * independent collection references associated to the context. For example, if a join Query has * "/region1 p, region2 e" from clause context contains two region references for p and e and * Index could be used for any of those of both of those regions. * * Note: This Index contains its own from clause definition which corresponds to a region * collection reference in given context and must be contained at 0th index in * {@link AbstractIndex#canonicalizedDefinitions}. * * @return {@link RuntimeIterator} this should not be null ever. */ RuntimeIterator getRuntimeIteratorForThisIndex(ExecutionContext context) { List<RuntimeIterator> indItrs = context.getCurrentIterators(); Region rgn = this.getRegion(); if (rgn instanceof BucketRegion) { rgn = ((Bucket) rgn).getPartitionedRegion(); } String regionPath = rgn.getFullPath(); String definition = this.getCanonicalizedIteratorDefinitions()[0]; for (RuntimeIterator itr : indItrs) { if (itr.getDefinition().equals(regionPath) || itr.getDefinition().equals(definition)) { return itr; } } return null; }
if (projExpr instanceof RuntimeIterator) { RuntimeIterator rIter = (RuntimeIterator) projExpr; name = rIter.getDefinition(); int index = name.lastIndexOf('.'); if (index > 0) {
while (iterator.hasNext()) { RuntimeIterator rIterator = (RuntimeIterator) iterator.next(); definitions[i++] = rIterator.getDefinition();
String definition = this.getCanonicalizedIteratorDefinitions()[0]; for (RuntimeIterator itr : indItrs) { if (itr.getDefinition().equals(regionPath) || itr.getDefinition().equals(definition)) {
String definition = rIter.getDefinition(); this.canonicalizedIteratorDefinitions = new String[1]; this.canonicalizedIteratorDefinitions[0] = definition;
String definition = rIter.getDefinition(); this.canonicalizedIteratorDefinitions[i] = definition; if (rIter.getDefinition().contains(this.canonicalizedIteratorNames[0])) { newItr = (CompiledIteratorDef) getModifiedDependentCompiledValue(this.context, i, iterDef, true);
if (currentLevel.getCmpIteratorDefn().getCollectionExpr() .getType() == OQLLexerTokenTypes.RegionPath) { key = currentLevel.getCmpIteratorDefn().getName() + ':' + currentLevel.getDefinition(); } else if (currentLevel.getCmpIteratorDefn().getCollectionExpr() .getType() == OQLLexerTokenTypes.LITERAL_select) { if (useDerivedResults && derivedResults != null && path.hasIdentifierAtLeafNode()) { key = getCompiledIdFromPath(path).getId() + ':' + currentLevel.getDefinition(); if (derivedResults.containsKey(key)) { c = derivedResults.get(key);
CompiledIteratorDef iterDef = (CompiledIteratorDef) cv; RuntimeIterator rItr = (RuntimeIterator) context.getCurrentIterators().get(currItrID); String canonFrmClause = rItr.getDefinition();