/// extract from index values private ArrayList<Long> ExtractFromIndex( NodeReference node, ArrayList<Long> previousSetToScan, FilterExpression expression, ArrayList<FilterCondition> conditions, String indexName) { ArrayList<Long> setToScan = new ArrayList<Long>(); // prepare range ArrayList<FilterCondition> range = PrepareIndexRangeByConditions(conditions); if (range == null) return setToScan; FilterCondition left = range.get(0); FilterCondition right = range.get(1); String leftsubscript = ""; if (left != null) { leftsubscript = left.FilterValue.toString(); } String rightsubscript = ""; if (right != null) { rightsubscript = right.FilterValue.toString(); } rightsubscript = IndexManager.ConvertToIndex(rightsubscript); leftsubscript = IndexManager.ConvertToIndex(leftsubscript); String key = ""; while (true) { key = node.nextSubscript(indexName, leftsubscript, key); if (key.equals("")) { leftsubscript = node.nextSubscript(indexName, leftsubscript); key = node.nextSubscript(indexName, leftsubscript, key); } if (key.equals("")) { break; } if (leftsubscript.equals(rightsubscript)) { break; } Long parsedKey = Long.parseLong(key); if (previousSetToScan == null || (!previousSetToScan.contains(parsedKey))) continue; setToScan.add(parsedKey); } return setToScan; }