
net.sourceforge.squirrel_sql.client.session.schemainfo.SchemaInfoColumnCache Maven / Gradle / Ivy
package net.sourceforge.squirrel_sql.client.session.schemainfo;
import net.sourceforge.squirrel_sql.client.session.ExtendedColumnInfo;
import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.*;
public class SchemaInfoColumnCache implements Serializable
{
private static final ILogger s_log = LoggerController.createLogger(SchemaInfoColumnCache.class);
private Map> _extendedColumnInfosByTableName =
Collections.synchronizedMap(new TreeMap>());
private Map> _extColumnInfosByColumnName =
Collections.synchronizedMap(new TreeMap>());
private Set _tablesWithInaccessibleColumns = Collections.synchronizedSet(new HashSet());
void writeColumsToCache(TableColumnInfo[] infos, CaseInsensitiveString simpleTableName)
{
ArrayList ecisInTable = new ArrayList();
for (int i = 0; i < infos.length; i++)
{
ExtendedColumnInfo eci = new ExtendedColumnInfo(infos[i], simpleTableName.toString());
ecisInTable.add(eci);
CaseInsensitiveString ciColName = new CaseInsensitiveString(eci.getColumnName());
List ecisInColName = _extColumnInfosByColumnName.get(ciColName);
if(null == ecisInColName)
{
ecisInColName = new ArrayList();
_extColumnInfosByColumnName.put(ciColName, ecisInColName);
}
ecisInColName.add(eci);
}
// Note: A CaseInsensitiveString can be a mutable string.
// In fact it is a mutable string here because this is usually called from
// within Syntax coloring which uses a mutable string.
CaseInsensitiveString imutableString = new CaseInsensitiveString(simpleTableName.toString());
_extendedColumnInfosByTableName.put(imutableString, ecisInTable);
}
void clearColumns()
{
_tablesWithInaccessibleColumns.clear();
_extColumnInfosByColumnName.clear();
_extendedColumnInfosByTableName.clear();
}
public boolean didTryLoadingColumns(CaseInsensitiveString tableName)
{
return _extendedColumnInfosByTableName.containsKey(tableName) || _tablesWithInaccessibleColumns.contains(tableName);
}
Map> getExtColumnInfosByColumnNameForReadOnly()
{
return _extColumnInfosByColumnName;
}
void clearColumns(CaseInsensitiveString ciSimpleTableName)
{
_tablesWithInaccessibleColumns.remove(ciSimpleTableName);
List ecisInTable = _extendedColumnInfosByTableName.remove(ciSimpleTableName);
if(null == ecisInTable)
{
// Columns have not yet been loaded
return;
}
for(Iterator j=ecisInTable.iterator();j.hasNext();)
{
ExtendedColumnInfo eci = j.next();
CaseInsensitiveString ciColName = new CaseInsensitiveString(eci.getColumnName());
_extColumnInfosByColumnName.remove(ciColName);
}
}
public void writeColumsNotAccessible(Throwable th, CaseInsensitiveString simpleTableName)
{
// Note: A CaseInsensitiveString can be a mutable string.
// In fact it is a mutable string here because this is usually called from
// within Syntax coloring which uses a mutable string.
CaseInsensitiveString imutableString = new CaseInsensitiveString(simpleTableName.toString());
_tablesWithInaccessibleColumns.add(imutableString);
s_log.error("Failed to load columns for table " + simpleTableName, th);
}
public List getExtendedColumnInfosForReadOnly(CaseInsensitiveString cissTableName)
{
return _extendedColumnInfosByTableName.get(cissTableName);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy