if(key==null) {
key = new PrimaryKey();
key.setName(name);
key.setTable(table);
if(table.getPrimaryKey()!=null) {
throw new JDBCBinderException(table + " already has a primary key!"); //TODO: ignore ?
}
table.setPrimaryKey(key);
}
else {
if(!(name==key.getName() ) && name!=null && !name.equals(key.getName() ) ) {
throw new JDBCBinderException("Duplicate names found for primarykey. Existing name: " + key.getName() + " JDBC name: " + name + " on table " + table);
}
}
columns.add(new Object[] { new Short(seq), columnName});
}
} finally {
if (primaryKeyIterator!=null) {
try {
getMetaDataDialect().close(primaryKeyIterator);
} catch(JDBCException se) {
log.warn("Exception when closing resultset for reading primary key information",se);
}
}
}
// sort the columns accoring to the key_seq.
Collections.sort(columns,new Comparator() {
public boolean equals(Object obj) {
return super.equals(obj);
}
public int compare(Object o1, Object o2) {
Short left = (Short) ( (Object[]) o1)[0];
Short right = (Short) ( (Object[]) o2)[0];
return left.compareTo(right);
}
public int hashCode() {
return super.hashCode();
}
});
List t = new ArrayList(columns.size());
Iterator cols = columns.iterator();
while (cols.hasNext() ) {
Object[] element = (Object[]) cols.next();
t.add(element[1]);
}
columns = t;
if(key==null) {
log.warn("The JDBC driver didn't report any primary key columns in " + table.getName() + ". Asking rev.eng. strategy" );
List userPrimaryKey = revengStrategy.getPrimaryKeyColumnNames(TableIdentifier.create(table));
if(userPrimaryKey!=null && !userPrimaryKey.isEmpty()) {
key = new PrimaryKey();
key.setName(new Alias(15, "PK").toAliasString( table.getName()));
key.setTable(table);
if(table.getPrimaryKey()!=null) {
throw new JDBCBinderException(table + " already has a primary key!"); //TODO: ignore ?
}
table.setPrimaryKey(key);
columns = new ArrayList(userPrimaryKey);
} else {
log.warn("Rev.eng. strategy did not report any primary key columns for " + table.getName());