/** * Create unique keys keys from table. * * @param table * @uses schema * @throws SQLException */ @Override protected void buildUniqueKeys(final DatabaseTable table) throws SQLException { final List<UniqueKey> uniqueKeys = new ArrayList<UniqueKey>(); final List<Index> indices = new ArrayList<Index>(); // For each result, create a key if 9th value (name) is present and not already exists. final ResultSet resultSet = dbmd.getIndexInfo(null, getSchemaSpacePattern(), table.getTitle(), false, false); while (resultSet.next()) { if (resultSet.getString(9) != null) { if (resultSet.getBoolean(4)) { Index index = new Index(resultSet.getString(6)); if (indices.contains(index)) { index = indices.get(indices.indexOf(index)); } else { indices.add(index); } index.addColumn(resultSet.getString(9)); } else { UniqueKey uniqueKey = new UniqueKey(resultSet.getString(6)); if (uniqueKeys.contains(uniqueKey)) { // If already in the list, get that key instead of the // one // above. uniqueKey = uniqueKeys.get(uniqueKeys.indexOf(uniqueKey)); } else { uniqueKeys.add(uniqueKey); } uniqueKey.addColumn(resultSet.getString(9)); } } } resultSet.close(); // Add them all to the schema. for (final UniqueKey uniqueKey : uniqueKeys) { schema.addUniqueKey(uniqueKey); } for (final Index index : indices) { schema.addIndex(index); } }
/** * Create unique keys fromt table. * * @param view * @uses schema, uniques * @throws SQLException */ protected void buildAllKeysOnlyForView(final DatabaseView view) throws SQLException { statementConstraints.setString(1, view.getTitle()); statementConstraints.setString(2, getSchemaSpacePattern()); final ResultSet resultSet = statementConstraints.executeQuery(); final List<UniqueKey> uniqueKeys = new ArrayList<UniqueKey>(); PrimaryKey primaryKey = null; // For each result, create a key if it is one. while (resultSet.next()) { if (resultSet.getString("COLUMN_NAME") != null) { if (resultSet.getString("COLUMN_KEY").equalsIgnoreCase("PRI")) { // If the type is PRI, it is a primary key. // It is possible, that a primary key is build by more than // one columns. if (primaryKey == null) { primaryKey = new PrimaryKey(resultSet.getString("CONSTRAINT_NAME")); } primaryKey.addColumn(resultSet.getString("COLUMN_NAME")); UniqueKey uniqueKey = new UniqueKey(resultSet.getString("CONSTRAINT_NAME")); if (uniqueKeys.contains(uniqueKey)) { // If already in the list, get that key instead of the // one above. uniqueKey = uniqueKeys.get(uniqueKeys.indexOf(uniqueKey)); } else { uniqueKeys.add(uniqueKey); } uniqueKey.addColumn(resultSet.getString("COLUMN_NAME")); } else if (resultSet.getString("COLUMN_KEY").equalsIgnoreCase("UNI")) { // If the type is a UNI, it is a unique key. UniqueKey uniqueKey = new UniqueKey(resultSet.getString("CONSTRAINT_NAME")); if (uniqueKeys.contains(uniqueKey)) { // If already in the list, get that key instead of the // one above. uniqueKey = uniqueKeys.get(uniqueKeys.indexOf(uniqueKey)); } else { uniqueKeys.add(uniqueKey); } uniqueKey.addColumn(resultSet.getString("COLUMN_NAME")); // } else if (resultSet.getString(3).toUpperCase().equals("R")) { // // If the type is a r (referred), it is a foreign key. // final ForeignKey foreignKey = new ForeignKey(resultSet.getString(2)); // foreignKey.setColumn(resultSet.getString(1)); // foreignKey.setReferToTable(resultSet.getString(5)); // foreignKey.setReferToColumn(resultSet.getString(4)); // schema.addForeignKey(foreignKey); } } } // Add them all to the schema. for (final UniqueKey uniqueKey : uniqueKeys) { schema.addUniqueKey(uniqueKey); } // If the primary key to the schema if available. if (primaryKey != null) { schema.addPrimaryKey(primaryKey); } resultSet.close(); }