예제 #1
0
  public boolean processIndex(DFUFile indexfiletouse, StringBuilder keyedandwild) {
    boolean isPayloadIndex =
        containsPayload(indexfiletouse.getAllFieldsProps(), parser.getSelectColumns().iterator());

    Vector<String> keyed = new Vector<String>();
    Vector<String> wild = new Vector<String>();

    // Create keyed and wild string
    Properties keyedcols = indexfiletouse.getKeyedColumns();
    for (int i = 1; i <= keyedcols.size(); i++) {
      String keyedcolname = (String) keyedcols.get(i);
      if (parser.whereClauseContainsKey(keyedcolname))
        keyed.add(" " + parser.getExpressionFromName(keyedcolname).toString() + " ");
      else if (keyed.isEmpty()) wild.add(" " + keyedcolname + " ");
    }

    if (isPayloadIndex) {
      if (keyed.size() > 0) {
        keyedandwild.append("KEYED( ");
        for (int i = 0; i < keyed.size(); i++) {
          keyedandwild.append(keyed.get(i));
          if (i < keyed.size() - 1) keyedandwild.append(" AND ");
        }
        keyedandwild.append(" )");
      }
      if (wild.size() > 0) {
        // TODO should I bother making sure there's a KEYED entry ?
        for (int i = 0; i < wild.size(); i++) {
          keyedandwild.append(" and WILD( ");
          keyedandwild.append(wild.get(i));
          keyedandwild.append(" )");
        }
      }

      keyedandwild.append(" and (").append(parser.getWhereClauseString()).append(" )");
    } else // non-payload just AND the keyed expressions
    {
      keyedandwild.append("( ");
      keyedandwild.append(parser.getWhereClauseString());
      keyedandwild.append(" )");
    }

    return isPayloadIndex;
  }