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 966329a..41ffad2 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 @@ -48,12 +48,17 @@ abstract class EntityImpl implements Entity { private String type; private Bookmark bookmark; private Boolean exists = Boolean.TRUE; + private boolean isSynonym = false; // Tells if its a synonym or not + // Columns will be cached in this array, as sometimes asking for them to the JDBC driver is very costy + // (for example in Oracle when synonyms and remarks are asked for ) + private Column[] columns = null; - public EntityImpl(Bookmark bookmark, String schema, String name, String type) { + public EntityImpl(Bookmark bookmark, String schema, String name, String type, boolean isSynonym) { this.schema = schema; this.name = name; this.type = type; this.bookmark = bookmark; + this.isSynonym = isSynonym; } public Bookmark getBookmark() { return this.bookmark; @@ -73,26 +78,28 @@ abstract class EntityImpl implements Entity { } public Column getColumn(String columnName) throws NotConnectedException, SQLException { Column column = null; - Column[] columns = getColumns(); - for (int i = 0, length = (columns == null) ? 0 : columns.length; + if (this.columns == null) this.columns = getColumns(); + for (int i = 0, length = (this.columns == null) ? 0 : this.columns.length; column == null && i < length; i++) { - if (columnName != null && columnName.equals(columns[i].getName())) { - column = columns[i]; + if (columnName != null && columnName.equals(this.columns[i].getName())) { + column = this.columns[i]; } } return column; } public Column[] getColumns() throws NotConnectedException, SQLException { - + if (this.columns != null) return this.columns; Connection connection = this.bookmark.getConnection(); try { - return getColumnsFromMetaData(connection); + this.columns = getColumnsFromMetaData(connection); + return this.columns; } catch (SQLException e) { if (SQLStates.ODBC_DRIVER_NOT_CAPABLE.equals(e.getSQLState()) && AdapterFactory.JDBC_ODBC_BRIDGE.equals( getBookmark().getJDBCDriver().getType())) { - return getColumnsFromQuery(connection); + this.columns = getColumnsFromQuery(connection); + return this.columns; } else { throw e; } @@ -120,10 +127,7 @@ abstract class EntityImpl implements Entity { resultSet.getInt(COLUMN_METADATA_DECIMAL_DIGITS), "YES".equalsIgnoreCase(resultSet.getString(COLUMN_METADATA_IS_NULLABLE)), resultSet.getInt(COLUMN_METADATA_ORDINAL_POSITION), - getComments( - resultSet.getString(COLUMN_METADATA_REMARKS), - getQualifiedName(), - resultSet.getString(COLUMN_METADATA_COLUMN_NAME)) + resultSet.getString(COLUMN_METADATA_REMARKS) ); temp.put(column.getName(), column); } @@ -173,7 +177,7 @@ abstract class EntityImpl implements Entity { (String) rows[i].get(1), (String) rows[i].get(2), ((Integer) rows[i].get(7)).intValue(), - ((Integer) rows[i].get(3)).intValue(), + ((Long) rows[i].get(3)).longValue(), ((Integer) rows[i].get(4)).intValue(), "Nullable".equalsIgnoreCase((String) rows[i].get(5)), i+1, ""); @@ -187,6 +191,11 @@ abstract class EntityImpl implements Entity { * @param iniComment The already got comment * @param tableName The fully qualified table name * @param columnName The column name + * + * NO LONGER USED, there is a parameter (remarksReporting) in the JDBC connection that makes ORACLE return the + * remarks for tables and columns. Is slower, so an option will be used. + * + * The function is kept in case other JDBC drivers have the same problem */ private String getComments( String iniComment, String tableName, String columnName) { if (iniComment != null && iniComment.length() > 0) @@ -298,4 +307,12 @@ abstract class EntityImpl implements Entity { return this.getQualifiedName().compareTo(that.getQualifiedName()); } } + + /** + * @return Returns the isSynonym. + */ + public boolean isSynonym() { + return isSynonym; + } + } \ No newline at end of file