Thread: [Squirrel-sql-commits] sql12/app/src/net/sourceforge/squirrel_sql/client/session DataSetUpdateableTa
A Java SQL client for any JDBC compliant database
Brought to you by:
colbell,
gerdwagner
Update of /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23771/sql12/app/src/net/sourceforge/squirrel_sql/client/session Modified Files: DataSetUpdateableTableModelImpl.java ExtendedColumnInfo.java ExtendedTableInfo.java SchemaInfo.java Session.java Log Message: 1276957: use new methods in SQLDMD that encapsulate access to ResultSets instead of returning them. Index: ExtendedColumnInfo.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/ExtendedColumnInfo.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ExtendedColumnInfo.java 17 Feb 2005 23:53:29 -0000 1.3 --- ExtendedColumnInfo.java 27 Nov 2005 02:51:18 -0000 1.4 *************** *** 19,22 **** --- 19,24 ---- package net.sourceforge.squirrel_sql.client.session; + import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo; + public class ExtendedColumnInfo { *************** *** 40,43 **** --- 42,59 ---- } + public ExtendedColumnInfo(TableColumnInfo info) { + _columnName = info.getColumnName(); + _columnType = info.getTypeName(); + _columnSize = info.getColumnSize(); + _decimalDigits = info.getDecimalDigits(); + if ("YES".equals(info.isNullable())) { + _nullable = true; + } else { + _nullable = false; + } + _cat = info.getCatalogName(); + _schem = info.getSchemaName(); + } + public String getColumnName() { Index: DataSetUpdateableTableModelImpl.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/DataSetUpdateableTableModelImpl.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** DataSetUpdateableTableModelImpl.java 29 Oct 2005 17:14:22 -0000 1.6 --- DataSetUpdateableTableModelImpl.java 27 Nov 2005 02:51:18 -0000 1.7 *************** *** 1,5 **** package net.sourceforge.squirrel_sql.client.session; - import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; --- 1,4 ---- *************** *** 18,21 **** --- 17,22 ---- import net.sourceforge.squirrel_sql.fw.sql.ITableInfo; import net.sourceforge.squirrel_sql.fw.sql.SQLConnection; + import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData; + import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo; import net.sourceforge.squirrel_sql.fw.util.StringManager; import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; *************** *** 719,773 **** final SQLConnection conn = session.getSQLConnection(); - DatabaseMetaData dmd = null; try { ! dmd = conn.getSQLMetaData().getJDBCMetaData(); ! final ResultSet rs = ! dmd.getColumns(ti.getCatalogName(), ti.getSchemaName(), ! ti.getSimpleName(), ""); ! try ! { ! // read the DB MetaData info and fill in the value, if any ! // Note that the ResultSet info and the colDefs should be ! // in the same order, but we cannot guarantee that. ! int expectedColDefIndex = 0; ! while (rs.next()) { ! // get the column name ! String colName = rs.getString(4); ! ! // get the default value ! String defValue = rs.getString(13); ! ! // if value was null, we do not need to do ! // anything else with this column. ! // Also assume that a value of "" is equivilent to null ! if (defValue != null && defValue.length() > 0) { ! // find the entry in colDefs matching this column ! if (colDefs[expectedColDefIndex].getLabel().equals(colName)) { ! // DB cols are in same order as colDefs ! defaultValues[expectedColDefIndex] = defValue; ! } ! else { ! // colDefs not in same order as DB, so search for ! // matching colDef entry ! // Note: linear search here will NORMALLY be not too bad ! // because most tables do not have huge numbers of columns. ! for (int i=0; i<colDefs.length; i++) { ! if (colDefs[i].getLabel().equals(colName)) { ! defaultValues[i] = defValue; ! break; ! } ! } ! } ! } ! // assuming that the columns in table match colDefs, ! // bump the index to point to the next colDef entry ! expectedColDefIndex++; ! } // while ! } ! finally ! { ! rs.close(); } } --- 720,764 ---- final SQLConnection conn = session.getSQLConnection(); try { ! SQLDatabaseMetaData md = conn.getSQLMetaData(); ! TableColumnInfo[] infos = md.getColumnInfo(ti); ! ! // read the DB MetaData info and fill in the value, if any ! // Note that the ResultSet info and the colDefs should be ! // in the same order, but we cannot guarantee that. ! int expectedColDefIndex = 0; ! ! for (int idx = 0; idx < infos.length; idx++) { ! String colName = infos[idx].getColumnName(); ! String defValue = infos[idx].getDefaultValue(); ! ! // if value was null, we do not need to do ! // anything else with this column. ! // Also assume that a value of "" is equivilent to null ! if (defValue != null && defValue.length() > 0) { ! // find the entry in colDefs matching this column ! if (colDefs[expectedColDefIndex].getLabel().equals(colName)) { ! // DB cols are in same order as colDefs ! defaultValues[expectedColDefIndex] = defValue; ! } ! else { ! // colDefs not in same order as DB, so search for ! // matching colDef entry ! // Note: linear search here will NORMALLY be not too bad ! // because most tables do not have huge numbers of columns. ! for (int i=0; i<colDefs.length; i++) { ! if (colDefs[i].getLabel().equals(colName)) { ! defaultValues[i] = defValue; ! break; ! } ! } ! } ! } ! // assuming that the columns in table match colDefs, ! // bump the index to point to the next colDef entry ! expectedColDefIndex++; ! } } Index: SchemaInfo.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/SchemaInfo.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** SchemaInfo.java 5 Nov 2005 19:36:51 -0000 1.19 --- SchemaInfo.java 27 Nov 2005 02:51:18 -0000 1.20 *************** *** 21,40 **** * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ import net.sourceforge.squirrel_sql.fw.sql.IProcedureInfo; import net.sourceforge.squirrel_sql.fw.sql.SQLConnection; import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData; import net.sourceforge.squirrel_sql.fw.util.log.ILogger; import net.sourceforge.squirrel_sql.fw.util.log.LoggerController; - import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; - import net.sourceforge.squirrel_sql.fw.util.StringManager; - import net.sourceforge.squirrel_sql.client.session.event.SessionAdapter; - import net.sourceforge.squirrel_sql.client.session.event.ISessionListener; - import net.sourceforge.squirrel_sql.client.session.event.SessionEvent; - import net.sourceforge.squirrel_sql.client.IApplication; - - import java.sql.DatabaseMetaData; - import java.sql.ResultSet; - import java.sql.SQLException; - import java.util.*; public class SchemaInfo --- 21,46 ---- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + import java.sql.SQLException; + import java.util.ArrayList; + import java.util.Arrays; + import java.util.HashMap; + import java.util.Hashtable; + import java.util.List; + import java.util.StringTokenizer; + + import net.sourceforge.squirrel_sql.client.IApplication; + import net.sourceforge.squirrel_sql.client.session.event.SessionAdapter; + import net.sourceforge.squirrel_sql.client.session.event.SessionEvent; + import net.sourceforge.squirrel_sql.fw.sql.DataTypeInfo; import net.sourceforge.squirrel_sql.fw.sql.IProcedureInfo; + import net.sourceforge.squirrel_sql.fw.sql.ITableInfo; import net.sourceforge.squirrel_sql.fw.sql.SQLConnection; import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData; + import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo; + import net.sourceforge.squirrel_sql.fw.sql.TableInfo; + import net.sourceforge.squirrel_sql.fw.util.StringManager; + import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; import net.sourceforge.squirrel_sql.fw.util.log.ILogger; import net.sourceforge.squirrel_sql.fw.util.log.LoggerController; public class SchemaInfo *************** *** 46,50 **** private boolean _loaded = false; ! private DatabaseMetaData _dmd; private final HashMap _keywords = new HashMap(); private final HashMap _dataTypes = new HashMap(); --- 52,56 ---- private boolean _loaded = false; ! private SQLDatabaseMetaData _dmd; private final HashMap _keywords = new HashMap(); private final HashMap _dataTypes = new HashMap(); *************** *** 82,86 **** if(null != _session && _session.getIdentifier().equals(evt.getSession().getIdentifier())) { ! initJDBCDatabaseMetaData(_session.getSQLConnection().getSQLMetaData()); if(null != _dmd) { --- 88,92 ---- if(null != _session && _session.getIdentifier().equals(evt.getSession().getIdentifier())) { ! _dmd = _session.getSQLConnection().getSQLMetaData(); if(null != _dmd) { *************** *** 109,118 **** final SQLDatabaseMetaData sqlDmd = conn.getSQLMetaData(); ! initJDBCDatabaseMetaData(sqlDmd); try { s_log.debug("Loading keywords"); ! loadKeywords(_dmd); s_log.debug("Keywords loaded"); } --- 115,124 ---- final SQLDatabaseMetaData sqlDmd = conn.getSQLMetaData(); ! _dmd = sqlDmd; try { s_log.debug("Loading keywords"); ! loadKeywords(sqlDmd); s_log.debug("Keywords loaded"); } *************** *** 124,130 **** try { ! s_log.debug("Loading data types"); ! loadDataTypes(_dmd); ! s_log.debug("Data types loaded"); } catch (Exception ex) --- 130,136 ---- try { ! s_log.debug("Loading data types"); ! loadDataTypes(sqlDmd); ! s_log.debug("Data types loaded"); } catch (Exception ex) *************** *** 136,140 **** { s_log.debug("Loading functions"); ! loadFunctions(_dmd); s_log.debug("Functions loaded"); } --- 142,146 ---- { s_log.debug("Loading functions"); ! loadFunctions(sqlDmd); s_log.debug("Functions loaded"); } *************** *** 147,151 **** { s_log.debug("Loading catalogs"); ! loadCatalogs(_dmd); s_log.debug("Catalogs loaded"); } --- 153,157 ---- { s_log.debug("Loading catalogs"); ! loadCatalogs(sqlDmd); s_log.debug("Catalogs loaded"); } *************** *** 158,162 **** { s_log.debug("Loading schemas"); ! loadSchemas(_dmd); s_log.debug("Schemas loaded"); } --- 164,168 ---- { s_log.debug("Loading schemas"); ! loadSchemas(sqlDmd); s_log.debug("Schemas loaded"); } *************** *** 170,174 **** { s_log.debug("Loading tables"); ! loadTables(_dmd); s_log.debug("Tables loaded"); } --- 176,180 ---- { s_log.debug("Loading tables"); ! loadTables(sqlDmd); s_log.debug("Tables loaded"); } *************** *** 196,212 **** } - private void initJDBCDatabaseMetaData(SQLDatabaseMetaData sqlDmd) - { - _dmd = null; - try - { - _dmd = sqlDmd.getJDBCMetaData(); - } - catch (Exception ex) - { - s_log.error("Error retrieving metadata", ex); - } - } - private void loadStoredProcedures(SQLDatabaseMetaData dmd) { --- 202,205 ---- *************** *** 225,244 **** } ! private void loadCatalogs(DatabaseMetaData dmd) { try { ! final ResultSet rs = dmd.getCatalogs(); ! try ! { ! while(rs.next()) ! { ! _catalogs.add(rs.getString("TABLE_CAT")); ! } ! } ! finally ! { ! rs.close(); ! } } catch (Throwable th) --- 218,226 ---- } ! private void loadCatalogs(SQLDatabaseMetaData dmd) { try { ! _catalogs.addAll(Arrays.asList(dmd.getCatalogs())); } catch (Throwable th) *************** *** 248,267 **** } ! private void loadSchemas(DatabaseMetaData dmd) { try { ! final ResultSet rs = dmd.getSchemas(); ! try ! { ! while(rs.next()) ! { ! _schemas.add(rs.getString("TABLE_SCHEM")); ! } ! } ! finally ! { ! rs.close(); ! } } catch (Throwable th) --- 230,238 ---- } ! private void loadSchemas(SQLDatabaseMetaData dmd) { try { ! _schemas.addAll(Arrays.asList(dmd.getSchemas())); } catch (Throwable th) *************** *** 407,411 **** } ! private void loadKeywords(DatabaseMetaData dmd) { try --- 378,382 ---- } ! private void loadKeywords(SQLDatabaseMetaData dmd) { try *************** *** 611,631 **** } ! private void loadDataTypes(DatabaseMetaData dmd) { try { ! final ResultSet rs = dmd.getTypeInfo(); ! try ! { ! while (rs.next()) ! { ! String typeName = rs.getString(1).trim(); ! _dataTypes.put(new CaseInsensitiveString(typeName), typeName); ! } ! } ! finally ! { ! rs.close(); ! } } catch (Throwable ex) --- 582,594 ---- } ! private void loadDataTypes(SQLDatabaseMetaData dmd) { try { ! DataTypeInfo[] infos = dmd.getDataTypes(); ! for (int i = 0; i < infos.length; i++) { ! String typeName = infos[i].getSimpleName(); ! _dataTypes.put(new CaseInsensitiveString(typeName), typeName); ! } } catch (Throwable ex) *************** *** 635,639 **** } ! private void loadFunctions(DatabaseMetaData dmd) { StringBuffer buf = new StringBuffer(1024); --- 598,602 ---- } ! private void loadFunctions(SQLDatabaseMetaData dmd) { StringBuffer buf = new StringBuffer(1024); *************** *** 810,839 **** } ! private void loadTables(DatabaseMetaData dmd) { try { final String[] tabTypes = new String[] { "TABLE", "VIEW" }; ! final ResultSet rs = dmd.getTables(null, null, null, tabTypes); ! try ! { ! while (rs.next()) ! { ! String tableName = rs.getString("TABLE_NAME"); ! ! _tables.put(new CaseInsensitiveString(tableName), tableName); ! ! String tableType = rs.getString("TABLE_TYPE"); ! ! String cat = rs.getString("TABLE_CAT"); ! String schem = rs.getString("TABLE_SCHEM"); ! ! _extendedtableInfos.add(new ExtendedTableInfo(tableName, tableType, cat, schem)); ! } ! } ! finally ! { ! rs.close(); ! } } catch (Throwable th) --- 773,792 ---- } ! private void loadTables(SQLDatabaseMetaData dmd) { try { final String[] tabTypes = new String[] { "TABLE", "VIEW" }; ! ITableInfo[] infos = dmd.getTables(null, null, null, tabTypes); ! for (int i = 0; i < infos.length; i++) { ! String tableName = infos[i].getSimpleName(); ! _tables.put(new CaseInsensitiveString(tableName), tableName); ! ExtendedTableInfo info = ! new ExtendedTableInfo(tableName, ! infos[i].getType(), ! infos[i].getCatalogName(), ! infos[i].getSchemaName()); ! _extendedtableInfos.add(info); ! } } catch (Throwable th) *************** *** 896,926 **** return; } ! ! ResultSet rs = _dmd.getColumns(null, null, getCaseSensitiveTableName(tableName.toString()), null); ! try ! { ! ArrayList infos = new ArrayList(); ! ! while (rs.next()) ! { ! String columnName = rs.getString("COLUMN_NAME"); ! String columnType = rs.getString("TYPE_NAME"); ! int columnSize = rs.getInt("COLUMN_SIZE"); ! int decimalDigits = rs.getInt("DECIMAL_DIGITS"); ! boolean nullable = "YES".equals(rs.getString("IS_NULLABLE")); ! String cat = rs.getString("TABLE_CAT"); ! String schem = rs.getString("TABLE_SCHEM"); ! ExtendedColumnInfo buf = new ExtendedColumnInfo(columnName, columnType, columnSize, decimalDigits, nullable, cat, schem); ! infos.add(buf); ! ! _columns.put(new CaseInsensitiveString(columnName), columnName); ! } ! _extendedColumnInfosByTableName.put(tableName, infos); ! ! } ! finally ! { ! rs.close(); ! } } --- 849,862 ---- return; } ! String name = getCaseSensitiveTableName(tableName.toString()); ! TableInfo ti = ! new TableInfo(null, null, name, "TABLE", null, _dmd); ! TableColumnInfo[] infos = _dmd.getColumnInfo(ti); ! ArrayList result = new ArrayList(); ! for (int i = 0; i < infos.length; i++) { ! ExtendedColumnInfo buf = new ExtendedColumnInfo(infos[i]); ! result.add(buf); ! } ! _extendedColumnInfosByTableName.put(tableName, result); } Index: Session.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/Session.java,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** Session.java 7 Nov 2005 23:07:30 -0000 1.36 --- Session.java 27 Nov 2005 02:51:18 -0000 1.37 *************** *** 25,29 **** import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; - import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.ArrayList; --- 25,28 ---- *************** *** 57,61 **** import net.sourceforge.squirrel_sql.fw.sql.SQLConnection; import net.sourceforge.squirrel_sql.fw.sql.SQLConnectionState; - import net.sourceforge.squirrel_sql.fw.util.BaseException; import net.sourceforge.squirrel_sql.fw.util.IMessageHandler; import net.sourceforge.squirrel_sql.fw.util.NullMessageHandler; --- 56,59 ---- *************** *** 464,479 **** try { - - - - - - - - - - - - connState.saveState(_conn, _msgHandler); } --- 462,465 ---- *************** *** 826,835 **** return; } - DatabaseMetaData data = null; - try { - data = _conn.getSQLMetaData().getJDBCMetaData(); - } catch (SQLException e) { - /* Do Nothing */ - } String javaVersion = System.getProperty("java.vm.version"); boolean javaVersionIsAtLeast14 = true; --- 812,815 ---- *************** *** 847,860 **** // At this point we know that we have a 1.4 or higher java runtime boolean driverIs21Compliant = true; ! if (data != null) { ! try { ! boolean supportsSavePoints = data.supportsSavepoints(); ! if (!supportsSavePoints) { ! driverIs21Compliant = false; ! } ! } catch (Throwable e) { driverIs21Compliant = false; } } if (!driverIs21Compliant && javaVersionIsAtLeast14) { StringBuffer tmp = new StringBuffer(); --- 827,839 ---- // At this point we know that we have a 1.4 or higher java runtime boolean driverIs21Compliant = true; ! ! try { ! if (!_conn.getSQLMetaData().supportsSavepoints()) { driverIs21Compliant = false; } + } catch (Throwable e) { + driverIs21Compliant = false; } + if (!driverIs21Compliant && javaVersionIsAtLeast14) { StringBuffer tmp = new StringBuffer(); Index: ExtendedTableInfo.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/ExtendedTableInfo.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ExtendedTableInfo.java 17 Feb 2005 23:53:29 -0000 1.2 --- ExtendedTableInfo.java 27 Nov 2005 02:51:18 -0000 1.3 *************** *** 24,28 **** private String _schema; ! ExtendedTableInfo(String tableName, String tableType, String catalog, String schema) { _tableName = tableName; --- 24,28 ---- private String _schema; ! public ExtendedTableInfo(String tableName, String tableType, String catalog, String schema) { _tableName = tableName; |