Expression ex = SymbolMap.getExpression(ses);
if (!(ex instanceof ElementSymbol)) {
continue; //TODO: function based indexes are possible, but we don't have the metadata
}
ElementSymbol element = (ElementSymbol)ex;
GroupSymbol group = element.getGroupSymbol();
if (groups != null && !groups.contains(group)) {
continue;
}
List<Object> elements = groupMap.get(group);
if(elements == null) {
elements = new ArrayList<Object>();
groupMap.put(group, elements);
}
elements.add(element.getMetadataID());
}
// Walk through each group
for (Map.Entry<GroupSymbol, List<Object>> entry : groupMap.entrySet()) {
GroupSymbol group = entry.getKey();
List<Object> elements = entry.getValue();
// Look up keys
Collection keys = null;
if ((unique != null && unique) || unique == null) {
keys = metadata.getUniqueKeysInGroup(group.getMetadataID());
}
if ((unique != null && !unique) || unique == null) {
if (keys != null) {
keys = new ArrayList<Object>(keys);
} else {
keys = new ArrayList<Object>(2);
}
keys.addAll(metadata.getIndexesInGroup(group.getMetadataID()));
}
if(keys != null && keys.size() > 0) {
// For each key, get key elements
for (Object key : keys) {