X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/EntityImpl.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/EntityImpl.java index a960fbb..8973ffd 100644 --- a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/EntityImpl.java +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/EntityImpl.java @@ -11,7 +11,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.quantum.adapters.AdapterFactory; import com.quantum.adapters.DatabaseAdapter; /** @@ -44,11 +43,11 @@ abstract class EntityImpl implements Entity { public String getType() { return this.type; } - public String getCondQualifiedName() { + public String getQualifiedName() { return (this.schema == null || this.schema.length() == 0) ? this.name : this.schema + "." + this.name; } - public Column getColumn(String columnName) { + public Column getColumn(String columnName) throws NotConnectedException, SQLException { Column column = null; Column[] columns = getColumns(); for (int i = 0, length = (columns == null) ? 0 : columns.length; @@ -60,52 +59,50 @@ abstract class EntityImpl implements Entity { } return column; } - public Column[] getColumns() { + public Column[] getColumns() throws NotConnectedException, SQLException { - Column[] columns = new Column[0]; + Map temp = new HashMap(); + Connection connection = this.bookmark.getConnection(); + DatabaseMetaData metaData = connection.getMetaData(); + ResultSet resultSet = metaData.getColumns(null, getSchema(), getName(), null); try { - // TODO: Some DBs (like DB2) don't support metadata - Map temp = new HashMap(); - Connection connection = this.bookmark.getConnection(); - DatabaseMetaData metaData = connection.getMetaData(); - ResultSet resultSet = metaData.getColumns(null, getSchema(), getName(), null); - - while (resultSet.next()) { - ColumnImpl column = new ColumnImpl( - this, - resultSet.getString("COLUMN_NAME"), - resultSet.getString("TYPE_NAME"), - resultSet.getInt("DATA_TYPE"), - resultSet.getInt("COLUMN_SIZE"), - resultSet.getInt("DECIMAL_DIGITS"), - "YES".equalsIgnoreCase(resultSet.getString("IS_NULLABLE")), - resultSet.getInt("ORDINAL_POSITION"), - getComments(resultSet.getString("REMARKS"),getCondQualifiedName(), resultSet.getString("COLUMN_NAME")) - ); - temp.put(column.getName(), column); - } - resultSet.close(); + while (resultSet.next()) { + ColumnImpl column = new ColumnImpl( + this, + resultSet.getString("COLUMN_NAME"), + resultSet.getString("TYPE_NAME"), + resultSet.getInt("DATA_TYPE"), + resultSet.getInt("COLUMN_SIZE"), + resultSet.getInt("DECIMAL_DIGITS"), + "YES".equalsIgnoreCase(resultSet.getString("IS_NULLABLE")), + resultSet.getInt("ORDINAL_POSITION"), + getComments(resultSet.getString("REMARKS"),getQualifiedName(), resultSet.getString("COLUMN_NAME")) + ); + temp.put(column.getName(), column); + } + } finally { + resultSet.close(); + } - resultSet = metaData.getPrimaryKeys(null, getSchema(), getName()); - while (resultSet.next()) { - String name = resultSet.getString("COLUMN_NAME"); - short keySequence = resultSet.getShort("KEY_SEQ"); - ColumnImpl column = (ColumnImpl) temp.get(name); - if (column != null) { - column.setPrimaryKeyOrder(keySequence); - } - } - resultSet.close(); - - List columnList = Collections.synchronizedList( - new ArrayList(temp.values())); - Collections.sort(columnList); - columns = (Column[]) columnList.toArray(new Column[columnList.size()]); - - } catch (NotConnectedException e) { - } catch (SQLException e) { + resultSet = metaData.getPrimaryKeys(null, getSchema(), getName()); + try { + while (resultSet.next()) { + String name = resultSet.getString("COLUMN_NAME"); + short keySequence = resultSet.getShort("KEY_SEQ"); + ColumnImpl column = (ColumnImpl) temp.get(name); + if (column != null) { + column.setPrimaryKeyOrder(keySequence); + } + } + resultSet.close(); + + List columnList = Collections.synchronizedList( + new ArrayList(temp.values())); + Collections.sort(columnList); + return (Column[]) columnList.toArray(new Column[columnList.size()]); + } finally { + resultSet.close(); } - return columns; } /** @@ -122,7 +119,7 @@ abstract class EntityImpl implements Entity { try { Connection con = this.bookmark.getConnection(); Statement stmt = con.createStatement(); - DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(this.bookmark.getType()); + DatabaseAdapter adapter = this.bookmark.getAdapter(); if (adapter != null && stmt != null && adapter.getCommentsQuery(tableName, columnName) != null) { stmt.execute(adapter.getCommentsQuery(tableName, columnName)); @@ -176,7 +173,42 @@ abstract class EntityImpl implements Entity { * @see com.quantum.model.Entity#getQuotedTableName() */ public String getQuotedTableName() { - return getBookmark().getAdapter().filterTableName(getCondQualifiedName()); + return getBookmark().getAdapter().filterTableName(getQualifiedName()); } + public ForeignKey[] getExportedKeys() throws SQLException, NotConnectedException { + return this.bookmark.getDatabase().getExportedKeys(getSchema(), getName()); + } + + public ForeignKey[] getImportedKeys() throws SQLException, NotConnectedException { + return this.bookmark.getDatabase().getImportedKeys(getSchema(), getName()); + } + public ForeignKey[] getReferences() throws SQLException, NotConnectedException { + ForeignKey[] importedKeys = getImportedKeys(); + ForeignKey[] exportedKeys = getExportedKeys(); + + List list = new ArrayList(); // if we could guarantee JDK 1.4, we'd use LinkedHashSet + for (int i = 0, length = importedKeys == null ? 0 : importedKeys.length; i < length; i++) { + list.add(importedKeys[i]); + } + for (int i = 0, length = exportedKeys == null ? 0 : exportedKeys.length; i < length; i++) { + if (!list.contains(exportedKeys[i])) { + list.add(exportedKeys[i]); + } + } + return (ForeignKey[]) list.toArray(new ForeignKey[list.size()]); + } + + public int compareTo(Object object) { + Entity that = (Entity) object; + if (that.getQualifiedName() == null && this.getQualifiedName() != null) { + return 1; + } else if (this.getQualifiedName() == null && that.getQualifiedName() != null) { + return -1; + } else if (this.getQualifiedName() == null && that.getQualifiedName() == null) { + return 0; + } else { + return this.getQualifiedName().compareTo(that.getQualifiedName()); + } + } } \ No newline at end of file