提交 6cfb3791 编写于 作者: S Serge Rider

Lookup cache - save missing names

上级 e8ab93f1
......@@ -29,6 +29,9 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Object lookup cache
......@@ -36,6 +39,8 @@ import java.sql.SQLException;
public abstract class JDBCObjectLookupCache<OWNER extends DBSObject, OBJECT extends DBSObject>
extends JDBCObjectCache<OWNER, OBJECT> implements JDBCObjectLookup<OWNER, OBJECT>
{
private final Set<String> missingNames = new HashSet<>();
protected JDBCObjectLookupCache() {
}
......@@ -47,7 +52,7 @@ public abstract class JDBCObjectLookupCache<OWNER extends DBSObject, OBJECT exte
if (cachedObject != null) {
return cachedObject;
}
if (isFullyCached()) {
if (isFullyCached() || missingNames.contains(name)) {
return null;
}
// Now cache just one object
......@@ -56,7 +61,7 @@ public abstract class JDBCObjectLookupCache<OWNER extends DBSObject, OBJECT exte
cacheObject(object);
} else {
// Not found!
// Maybe we need to mark this somehow in cache
missingNames.add(name);
}
return object;
}
......@@ -113,4 +118,16 @@ public abstract class JDBCObjectLookupCache<OWNER extends DBSObject, OBJECT exte
return prepareLookupStatement(session, owner, null, null);
}
@Override
public void setCache(List<OBJECT> objects) {
super.setCache(objects);
this.missingNames.clear();
}
@Override
public void clearCache() {
super.clearCache();
this.missingNames.clear();
}
}
......@@ -29,6 +29,9 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Struct cache with ability to load/search single object by name.
......@@ -37,6 +40,7 @@ public abstract class JDBCStructLookupCache<OWNER extends DBSObject, OBJECT exte
extends JDBCStructCache<OWNER, OBJECT, CHILD>
implements JDBCObjectLookup<OWNER, OBJECT>
{
private final Set<String> missingNames = new HashSet<>();
public JDBCStructLookupCache(Object objectNameColumn) {
super(objectNameColumn);
......@@ -50,7 +54,7 @@ public abstract class JDBCStructLookupCache<OWNER extends DBSObject, OBJECT exte
if (cachedObject != null) {
return cachedObject;
}
if (isFullyCached()) {
if (isFullyCached() || missingNames.contains(name)) {
return null;
}
// Now cache just one object
......@@ -59,7 +63,7 @@ public abstract class JDBCStructLookupCache<OWNER extends DBSObject, OBJECT exte
cacheObject(object);
} else {
// Not found!
// Maybe we need to mark this somehow in cache
missingNames.add(name);
}
return object;
}
......@@ -120,4 +124,16 @@ public abstract class JDBCStructLookupCache<OWNER extends DBSObject, OBJECT exte
return prepareLookupStatement(session, owner, null, null);
}
@Override
public void setCache(List<OBJECT> objects) {
super.setCache(objects);
this.missingNames.clear();
}
@Override
public void clearCache() {
super.clearCache();
this.missingNames.clear();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册