Exemple #1
0
  /// 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;
  }