Update of /cvsroot/hibernate/Hibernate/cirrus/hibernate/tools/updater In directory sc8-pr-cvs1:/tmp/cvs-serv888/tools/updater Added Files: JdbcColumnInfo.java JdbcDatabaseInfo.java JdbcForeignKeyInfo.java JdbcIndexInfo.java JdbcTableInfo.java Log Message: Benoit Menendez patches to SchemaUpdater and blob support --- NEW FILE: JdbcColumnInfo.java --- //$Id: JdbcColumnInfo.java,v 1.1 2002/12/14 09:27:56 oneovthafew Exp $ package cirrus.hibernate.tools.updater; import java.sql.ResultSet; import java.sql.SQLException; /* * Created by IntelliJ IDEA. * User: Administrator * Date: 13.10.2002 * Time: 21:04:35 * (C) 2002 Christoph Sturm */ public class JdbcColumnInfo { private final String _name; private final String _typeName; private final int _columnSize; private final int _decimalDigits; private final String _isNullable; public JdbcColumnInfo(ResultSet rs) throws SQLException { _name = rs.getString("COLUMN_NAME"); _typeName = rs.getString("TYPE_NAME"); _columnSize = rs.getInt("COLUMN_SIZE"); _decimalDigits = rs.getInt("DECIMAL_DIGITS"); _isNullable = rs.getString("IS_NULLABLE"); } public String getName() { return _name; } public String getTypeName() { return _typeName; } public int getColumnSize() { return _columnSize; } public int getDecimalDigits() { return _decimalDigits; } public String getNullable() { return _isNullable; } public String toString() { return _name; } } --- NEW FILE: JdbcDatabaseInfo.java --- //$Id: JdbcDatabaseInfo.java,v 1.1 2002/12/14 09:27:56 oneovthafew Exp $ package cirrus.hibernate.tools.updater; import java.sql.*; import java.util.*; import cirrus.hibernate.sql.Dialect; public class JdbcDatabaseInfo { private final Map _tables = new HashMap(); private final Set _sequences = new HashSet(); public JdbcDatabaseInfo(Connection connection, Dialect dialect) throws SQLException { DatabaseMetaData meta = connection.getMetaData(); initTables(meta); initColumns(meta); initForeignKeys(meta); initIndexes(meta); initSequences(connection, dialect); } public JdbcTableInfo getTableInfo(String name) { return name != null ? (JdbcTableInfo)_tables.get(name.toUpperCase()) : null; } private void initTables(DatabaseMetaData meta) throws SQLException { ResultSet rs = null; try { String[] types = {"TABLE"}; rs = meta.getTables(null, "%", "%", types); while (rs.next()) addTable(rs); } finally { if (rs != null) rs.close(); } } private void addTable(ResultSet rs) throws SQLException { String name = rs.getString("TABLE_NAME"); if (name == null) return; if (getTableInfo(name) == null) { JdbcTableInfo info = new JdbcTableInfo(rs); _tables.put(info.getName().toUpperCase(), info); } } private void initColumns(DatabaseMetaData meta) throws SQLException { ResultSet rs = null; try { rs = meta.getColumns(null, "%", "%", "%"); while (rs.next()) { JdbcTableInfo info = getTableInfo(rs.getString("TABLE_NAME")); if (info == null) continue; info.addColumn(rs); } } finally { if (rs != null) rs.close(); } } private void initForeignKeys(DatabaseMetaData meta) throws SQLException { Iterator iterator = _tables.values().iterator(); while (iterator.hasNext()) { JdbcTableInfo info = (JdbcTableInfo)iterator.next(); info.initForeignKeys(meta); } } private void initIndexes(DatabaseMetaData meta) throws SQLException { Iterator iterator = _tables.values().iterator(); while (iterator.hasNext()) { JdbcTableInfo info = (JdbcTableInfo)iterator.next(); info.initIndexes(meta); } } private void initSequences(Connection connection, Dialect dialect) throws SQLException { String sql = dialect.getQuerySequencesString(); if (sql == null) return; Statement statement = null; ResultSet rs = null; try { statement = connection.createStatement(); rs = statement.executeQuery(sql); while (rs.next()) _sequences.add(rs.getString(1).toUpperCase()); } finally { if (rs != null) rs.close(); if (statement != null) statement.close(); } } public boolean isSequence(Object key) { return key instanceof String && _sequences.contains(((String)key).toUpperCase()); } } --- NEW FILE: JdbcForeignKeyInfo.java --- //$Id: JdbcForeignKeyInfo.java,v 1.1 2002/12/14 09:27:56 oneovthafew Exp $ package cirrus.hibernate.tools.updater; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class JdbcForeignKeyInfo { private final String _name; private final List _columns = new ArrayList(); public JdbcForeignKeyInfo(ResultSet rs) throws SQLException { _name = rs.getString("FK_NAME"); } public String getName() { return _name; } public void addColumn(JdbcColumnInfo column) { if (column != null) _columns.add(column); } public List getColumns() { return _columns; } public String toString() { return _name; } } --- NEW FILE: JdbcIndexInfo.java --- //$Id: JdbcIndexInfo.java,v 1.1 2002/12/14 09:27:56 oneovthafew Exp $ package cirrus.hibernate.tools.updater; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class JdbcIndexInfo { private final String _name; private final List _columns = new ArrayList(); public JdbcIndexInfo(ResultSet rs) throws SQLException { _name = rs.getString("INDEX_NAME"); } public String getName() { return _name; } public void addColumn(JdbcColumnInfo column) { if (column != null) _columns.add(column); } public List getColumns() { return _columns; } public String toString() { return _name; } } --- NEW FILE: JdbcTableInfo.java --- //$Id: JdbcTableInfo.java,v 1.1 2002/12/14 09:27:56 oneovthafew Exp $ package cirrus.hibernate.tools.updater; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; public class JdbcTableInfo { private final String _schema; private final String _name; private final Map _columns = new HashMap(); private final Map _foreignKeys = new HashMap(); private final Map _indexes = new HashMap(); public JdbcTableInfo(ResultSet rs) throws SQLException { _schema = rs.getString("TABLE_SCHEM"); _name = rs.getString("TABLE_NAME"); } public void initForeignKeys(DatabaseMetaData meta) throws SQLException { ResultSet rs = null; try { rs = meta.getImportedKeys(null, _schema, _name); while (rs.next()) addForeignKey(rs); } finally { if (rs != null) rs.close(); } } public void initIndexes(DatabaseMetaData meta) throws SQLException { ResultSet rs = null; try { rs = meta.getIndexInfo(null, _schema, _name, false, true); while (rs.next()) { if (rs.getShort("TYPE") == DatabaseMetaData.tableIndexStatistic) continue; addIndex(rs); } } finally { if (rs != null) rs.close(); } } public JdbcColumnInfo getColumnInfo(String name) { return (JdbcColumnInfo)_columns.get(name.toLowerCase()); } public void addColumn(ResultSet rs) throws SQLException { String name = rs.getString("COLUMN_NAME"); if (name == null) return; if (getColumnInfo(name) == null) { JdbcColumnInfo info = new JdbcColumnInfo(rs); _columns.put(info.getName().toLowerCase(), info); } } public JdbcForeignKeyInfo getForeignKeyInfo(String name) { return (JdbcForeignKeyInfo)_foreignKeys.get(name.toUpperCase()); } private void addForeignKey(ResultSet rs) throws SQLException { String name = rs.getString("FK_NAME"); if (name == null) return; JdbcForeignKeyInfo info = getForeignKeyInfo(name); if (info == null) { info = new JdbcForeignKeyInfo(rs); _foreignKeys.put(info.getName().toUpperCase(), info); } info.addColumn(getColumnInfo("FKCOLUMN_NAME")); } public JdbcIndexInfo getIndexInfo(String name) { return (JdbcIndexInfo)_indexes.get(name.toUpperCase()); } private void addIndex(ResultSet rs) throws SQLException { String name = rs.getString("INDEX_NAME"); if (name == null) return; JdbcIndexInfo info = getIndexInfo(name); if (info == null) { info = new JdbcIndexInfo(rs); _indexes.put(info.getName().toUpperCase(), info); } info.addColumn(getColumnInfo("COLUMN_NAME")); } public String getName() { return _name; } public String toString() { return _name; } } |