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; }