提交 85dcf3a1 编写于 作者: S Serge Rider

DB2 refresh refactoring.

Cache model improvement (full cache reset on remove).
上级 6527b196
......@@ -23,13 +23,14 @@ import org.jkiss.dbeaver.ext.db2.model.DB2Schema;
import org.jkiss.dbeaver.ext.db2.model.DB2Trigger;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.impl.DBSObjectCache;
import org.jkiss.dbeaver.model.struct.DBSObject;
/**
* DB2 Trigger Manager
*
* @author Denis Forveille
*/
public class DB2TriggerManager extends DB2AbstractDropOnlyManager<DB2Trigger, DB2Schema> {
public class DB2TriggerManager extends DB2AbstractDropOnlyManager<DB2Trigger, DBSObject> {
private static final String SQL_DROP = "DROP TRIGGER %s";
......
......@@ -68,10 +68,9 @@ public class DB2MaterializedQueryTable extends DB2ViewBase implements DB2SourceO
@Override
public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException
{
super.refreshObject(monitor);
getContainer().getMaterializedQueryTableCache().clearChildrenCache(this);
return this;
return super.refreshObject(monitor);
}
@Override
......
......@@ -181,27 +181,13 @@ public class DB2Table extends DB2TableBase
@Override
public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException
{
super.refreshObject(monitor);
getContainer().getTableCache().clearChildrenCache(this);
tableTriggerCache.clearCache();
if (partitionCache != null) {
partitionCache.clearCache();
}
if (periodCache != null) {
periodCache.clearCache();
}
getContainer().getConstraintCache().clearObjectCache(this);
getContainer().getAssociationCache().clearObjectCache(this);
getContainer().getReferenceCache().clearObjectCache(this);
// DF: Clear base index/trigger cache. Not cheap but didn't found another way..
getContainer().getIndexCache().clearCache();
getContainer().getTriggerCache().clearCache();
super.refreshObject(monitor);
return this;
return getContainer().getTableCache().refreshObject(monitor, getContainer(), this);
}
@NotNull
......
......@@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ext.db2.model;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
......@@ -112,8 +113,18 @@ public abstract class DB2TableBase extends JDBCTable<DB2DataSource, DB2Schema>
{
tableIndexCache.clearCache();
// DF: Clear base index cache. Not cheap but didn't found another way..
getContainer().getIndexCache().clearCache();
// DF: Clear base index/trigger cache manually.
// FIXME: use composite cache or something smart
for (DB2Index index : new ArrayList<>(getContainer().getIndexCache().getCachedObjects())) {
if (index.getTable() == this) {
getContainer().getIndexCache().removeObject(index, true);
}
}
for (DB2Trigger trigger : new ArrayList<>(getContainer().getTriggerCache().getCachedObjects())) {
if (trigger.getTable() == this) {
getContainer().getTriggerCache().removeObject(trigger, true);
}
}
return this;
}
......
......@@ -68,9 +68,7 @@ public class DB2View extends DB2ViewBase implements DB2SourceObject {
public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException
{
super.refreshObject(monitor);
getContainer().getViewCache().clearChildrenCache(this);
return this;
return getContainer().getViewCache().refreshObject(monitor, getContainer(), this);
}
@Override
......
......@@ -121,13 +121,8 @@ public class DB2Nickname extends DB2TableBase implements DBPNamedObject2, DBPRef
@Override
public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException
{
super.refreshObject(monitor);
getContainer().getNicknameCache().clearChildrenCache(this);
// DF: Clear base index/trigger cache. Not cheap but didn't found
// another way..
getContainer().getIndexCache().clearCache();
super.refreshObject(monitor);
return this;
}
......
......@@ -45,8 +45,8 @@ public class PostgreDataTypeCache extends JDBCObjectCache<PostgreSchema, Postgre
}
@Override
public void removeObject(@NotNull PostgreDataType object) {
super.removeObject(object);
public void removeObject(@NotNull PostgreDataType object, boolean resetFullCache) {
super.removeObject(object, resetFullCache);
dataTypeMap.remove(object.getObjectId());
}
......
......@@ -108,7 +108,7 @@ public abstract class AbstractObjectCache<OWNER extends DBSObject, OBJECT extend
}
@Override
public void removeObject(@NotNull OBJECT object)
public void removeObject(@NotNull OBJECT object, boolean resetFullCache)
{
synchronized (this) {
if (this.objectList != null) {
......@@ -118,6 +118,9 @@ public abstract class AbstractObjectCache<OWNER extends DBSObject, OBJECT extend
this.objectMap.remove(getObjectName(object));
}
}
if (resetFullCache) {
fullCache = false;
}
}
}
......
......@@ -67,8 +67,9 @@ public interface DBSObjectCache<OWNER extends DBSObject, OBJECT extends DBSObjec
/**
* Removes specified object from cache
* @param object object to remove
* @param resetFullCache if true resets fullyCached flag. May be used to refresh linked objects.
*/
void removeObject(@NotNull OBJECT object);
void removeObject(@NotNull OBJECT object, boolean resetFullCache);
/**
* Clears all cache
......
......@@ -71,7 +71,7 @@ public abstract class AbstractObjectManager<OBJECT_TYPE extends DBSObject> imple
{
DBSObjectCache<? extends DBSObject, OBJECT_TYPE> cache = objectMaker.getObjectsCache(object);
if (cache != null) {
cache.removeObject(object);
cache.removeObject(object, false);
}
}
}
......
......@@ -178,9 +178,9 @@ public abstract class JDBCCompositeCache<
}
@Override
public void removeObject(@NotNull OBJECT object)
public void removeObject(@NotNull OBJECT object, boolean resetFullCache)
{
super.removeObject(object);
super.removeObject(object, resetFullCache);
objectCache.remove(getParent(object));
}
......
......@@ -74,7 +74,7 @@ public abstract class JDBCObjectLookupCache<OWNER extends DBSObject, OBJECT exte
this.loadObjects(monitor, owner);
} else {
OBJECT newObject = this.reloadObject(monitor, owner, oldObject, null);
removeObject(oldObject);
removeObject(oldObject, false);
if (newObject != null) {
cacheObject(newObject);
}
......
......@@ -171,9 +171,9 @@ public abstract class JDBCStructCache<OWNER extends DBSObject, OBJECT extends DB
}
@Override
public void removeObject(@NotNull OBJECT object)
public void removeObject(@NotNull OBJECT object, boolean resetFullCache)
{
super.removeObject(object);
super.removeObject(object, resetFullCache);
clearChildrenCache(object);
}
......
......@@ -79,7 +79,7 @@ public abstract class JDBCStructLookupCache<OWNER extends DBSObject, OBJECT exte
if (isChildrenCached(oldObject)) {
clearChildrenCache(oldObject);
}
removeObject(oldObject);
removeObject(oldObject, false);
if (newObject != null) {
cacheObject(newObject);
}
......
......@@ -30,7 +30,6 @@ import org.jkiss.dbeaver.model.impl.edit.AbstractObjectManager;
import org.jkiss.dbeaver.model.impl.edit.DBECommandAbstract;
import org.jkiss.dbeaver.model.messages.ModelMessages;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.utils.CommonUtils;
......@@ -328,7 +327,7 @@ public abstract class SQLObjectEditor<OBJECT_TYPE extends DBSObject, CONTAINER_T
OBJECT_TYPE object = getObject();
DBSObjectCache<? extends DBSObject, OBJECT_TYPE> cache = getObjectsCache(object);
if (cache != null) {
cache.removeObject(object);
cache.removeObject(object, false);
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册