[Squirrel-sql-commits] sql12/app/src/net/sourceforge/squirrel_sql/client/session/schemainfo SchemaIn
A Java SQL client for any JDBC compliant database
Brought to you by:
colbell,
gerdwagner
From: Gerd W. <ger...@us...> - 2006-05-28 14:06:40
|
Update of /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/schemainfo In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv6111/app/src/net/sourceforge/squirrel_sql/client/session/schemainfo Modified Files: SchemaInfo.java Log Message: Improved startup performance for Oracle Index: SchemaInfo.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/schemainfo/SchemaInfo.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SchemaInfo.java 18 May 2006 19:42:13 -0000 1.2 --- SchemaInfo.java 28 May 2006 14:06:24 -0000 1.3 *************** *** 63,66 **** --- 63,67 ---- private Vector _listeners = new Vector(); + private boolean _schemasAndCatalogsLoaded; /** the status message that was written by the object tree to be restored */ *************** *** 131,134 **** --- 132,150 ---- int progress = 0; + + progress = loadCatalogs(progress); + + progress = loadSchemas(progress); + + if (false == _schemasAndCatalogsLoaded) + { + _schemasAndCatalogsLoaded = true; + synchronized(this) + { + this.notifyAll(); + } + } + + try { *************** *** 191,204 **** } - progress = loadCatalogs(progress); - - progress = loadSchemas(progress); - String[] tableTypesToPreload = getTableTypesToCache(); progress = loadTables(null, null, null, tableTypesToPreload, progress); - - loadStoredProcedures(null, null, null, progress); } finally --- 207,215 ---- } String[] tableTypesToPreload = getTableTypesToCache(); progress = loadTables(null, null, null, tableTypesToPreload, progress); + progress = loadStoredProcedures(null, null, null, progress); } finally *************** *** 400,424 **** }; - IProcedureInfo[] procedures = _dmd.getProcedures(catalog, schema, procNamePattern, pcb); ! for (int i = 0; i < procedures.length; i++) { ! String proc = (String) procedures[i].getSimpleName(); ! if (proc.length() > 0) { ! CaseInsensitiveString ciProc = new CaseInsensitiveString(proc); ! _schemaInfoCache.procedureNames.put(ciProc ,proc); ! ArrayList aIProcInfos = (ArrayList) _schemaInfoCache.procedureInfosBySimpleName.get(ciProc); ! if(null == aIProcInfos) { ! aIProcInfos = new ArrayList(); ! _schemaInfoCache.procedureInfosBySimpleName.put(ciProc, aIProcInfos); } ! aIProcInfos.add(procedures[i]); } - _schemaInfoCache.iProcedureInfos.put(procedures[i], procedures[i]); - } } catch (Throwable th) --- 411,449 ---- }; ! String[] allowedSchemas = new String[]{schema}; ! if(null == allowedSchemas[0]) { ! String[] buf = _session.getApplication().getSessionManager().getAllowedSchemas(_session); ! if(null != buf) { ! allowedSchemas = buf; ! } ! } ! for (int i = 0; i < allowedSchemas.length; i++) ! { ! IProcedureInfo[] procedures = _dmd.getProcedures(catalog, allowedSchemas[i], procNamePattern, pcb); ! ! for (int j = 0; j < procedures.length; j++) ! { ! String proc = (String) procedures[j].getSimpleName(); ! if (proc.length() > 0) { ! CaseInsensitiveString ciProc = new CaseInsensitiveString(proc); ! _schemaInfoCache.procedureNames.put(ciProc ,proc); ! ! ArrayList aIProcInfos = (ArrayList) _schemaInfoCache.procedureInfosBySimpleName.get(ciProc); ! if(null == aIProcInfos) ! { ! aIProcInfos = new ArrayList(); ! _schemaInfoCache.procedureInfosBySimpleName.put(ciProc, aIProcInfos); ! } ! aIProcInfos.add(procedures[j]); } ! _schemaInfoCache.iProcedureInfos.put(procedures[j], procedures[j]); } + } } catch (Throwable th) *************** *** 445,449 **** try { ! _schemaInfoCache.schemas.addAll(Arrays.asList(_dmd.getSchemas())); } catch (Throwable th) --- 470,483 ---- try { ! String[] allowedSchemas = _session.getApplication().getSessionManager().getAllowedSchemas(_session); ! ! if(null == allowedSchemas) ! { ! _schemaInfoCache.schemas.addAll(Arrays.asList(_dmd.getSchemas())); ! } ! else ! { ! _schemaInfoCache.schemas.addAll(Arrays.asList(allowedSchemas)); ! } } catch (Throwable th) *************** *** 973,998 **** ! ITableInfo[] infos = _dmd.getTables(catalog, schema, tableNamePattern, types, pcb); ! for (int i = 0; i < infos.length; i++) { ! String tableName = infos[i].getSimpleName(); ! CaseInsensitiveString ciTableName = new CaseInsensitiveString(tableName); ! ! _schemaInfoCache.tableNames.put(ciTableName, tableName); ! _schemaInfoCache.iTableInfos.put(infos[i], infos[i]); ! ! ArrayList aITabInfos = (ArrayList) _schemaInfoCache.tableInfosBySimpleName.get(ciTableName); ! if(null == aITabInfos) { ! aITabInfos = new ArrayList(); ! _schemaInfoCache.tableInfosBySimpleName.put(ciTableName, aITabInfos); } ! aITabInfos.add(infos[i]); ! _schemaInfoCache.extendedColumnInfosByTableName.remove(ciTableName); ! // Note: do not clear _schemaInfoCache.columnNames because the same column ! // names might be used in more than one table. ! // We live with a bit of inexact column names. } } --- 1007,1045 ---- ! String[] allowedSchemas = new String[]{schema}; ! if(null == allowedSchemas[0]) { ! String[] buf = _session.getApplication().getSessionManager().getAllowedSchemas(_session); ! if(null != buf) { ! allowedSchemas = buf; } ! } ! for (int i = 0; i < allowedSchemas.length; i++) ! { ! ITableInfo[] infos = _dmd.getTables(catalog, allowedSchemas[i], tableNamePattern, types, pcb); ! for (int j = 0; j < infos.length; j++) ! { ! String tableName = infos[j].getSimpleName(); ! CaseInsensitiveString ciTableName = new CaseInsensitiveString(tableName); ! _schemaInfoCache.tableNames.put(ciTableName, tableName); ! _schemaInfoCache.iTableInfos.put(infos[j], infos[j]); ! ! ArrayList aITabInfos = (ArrayList) _schemaInfoCache.tableInfosBySimpleName.get(ciTableName); ! if(null == aITabInfos) ! { ! aITabInfos = new ArrayList(); ! _schemaInfoCache.tableInfosBySimpleName.put(ciTableName, aITabInfos); ! } ! aITabInfos.add(infos[j]); ! ! _schemaInfoCache.extendedColumnInfosByTableName.remove(ciTableName); ! ! // Note: do not clear _schemaInfoCache.columnNames because the same column ! // names might be used in more than one table. ! // We live with a bit of inexact column names. ! } } } *************** *** 1328,1331 **** --- 1375,1396 ---- } + public void waitTillSchemasAndCatalogsLoaded() + { + try + { + if(false == _schemasAndCatalogsLoaded) + { + synchronized(this) + { + this.wait(); + } + } + } + catch (InterruptedException e) + { + throw new RuntimeException(e); + } + } + private static class SchemaInfoCache |