Ejemplo n.º 1
0
    public List<Map<String, Object>> execute(String columnNames[]) {
      List<Map<String, Object>> combinedRowList = null;
      Set<NoSqlPredicate> inefficientPredicates = new HashSet<NoSqlPredicate>();
      for (NoSqlPredicate predicate : predicateList) {
        if (predicate.canExecuteEfficiently()) {
          List<Map<String, Object>> rowList = predicate.execute(columnNames);
          if (combinedRowList != null) {
            String primaryKeyName = storageSource.getTablePrimaryKeyName(tableName);
            combinedRowList = combineRowLists(primaryKeyName, combinedRowList, rowList, operator);
          } else {
            combinedRowList = rowList;
          }
        } else {
          inefficientPredicates.add(predicate);
        }
      }

      if (inefficientPredicates.isEmpty()) return combinedRowList;

      List<Map<String, Object>> filteredRowList = new ArrayList<Map<String, Object>>();
      for (Map<String, Object> row : combinedRowList) {
        for (NoSqlPredicate predicate : inefficientPredicates) {
          if (predicate.matchesRow(row)) {
            filteredRowList.add(row);
          }
        }
      }

      return filteredRowList;
    }
Ejemplo n.º 2
0
 public boolean canExecuteEfficiently() {
   if (operator == CompoundPredicate.Operator.AND) {
     for (NoSqlPredicate predicate : predicateList) {
       if (predicate.canExecuteEfficiently()) {
         return true;
       }
     }
     return false;
   } else {
     for (NoSqlPredicate predicate : predicateList) {
       if (!predicate.canExecuteEfficiently()) {
         return false;
       }
     }
     return true;
   }
 }
Ejemplo n.º 3
0
  private NoSqlResultSet executeParameterizedQuery(
      String tableName,
      String[] columnNameList,
      IPredicate predicate,
      RowOrdering rowOrdering,
      Map<String, Comparable<?>> parameterMap) {
    NoSqlPredicate noSqlPredicate = convertPredicate(predicate, tableName, parameterMap);
    List<Map<String, Object>> rowList;
    if ((noSqlPredicate != null) && noSqlPredicate.canExecuteEfficiently()) {
      rowList = noSqlPredicate.execute(columnNameList);
    } else {
      rowList = new ArrayList<Map<String, Object>>();
      Collection<Map<String, Object>> allRowList = getAllRows(tableName, columnNameList);
      for (Map<String, Object> row : allRowList) {
        if ((noSqlPredicate == null) || noSqlPredicate.matchesRow(row)) {
          rowList.add(row);
        }
      }
    }
    if (rowOrdering != null) Collections.sort(rowList, new RowComparator(rowOrdering));

    return new NoSqlResultSet(this, tableName, rowList);
  }