I did some more research and it seems that depending on the cache type
(local or shared) the cached results are either stored in
DataRowCache.snapshotLists (for shared) or ObjectStore.queryResultMap
(for local).
As far as I can tell, currently it is impossible to flush these caches
safely (DRC.clear() always flushes another unrelated map). I'm looking
for a single method that will flush both the local and shared query
result caches.
Gili
Gili wrote:
> Hi,
>
> I need to clear the query cache on DataContext.commitChanges(). The
> only way I can see this working is if I invoke DataRowStore.clear() but
> as Mike mentioned to me offline this sounds like an overly aggressive
> approach.
>
> Is there a finer-grained method for clearing query cache for all
> queries?
>
> My use-case is:
>
> 1) Database is empty
> 2) ContentType.getCanonicalInstance() returns an empty set, so I commit
> a new object to the database
> 3) DataContext.commitChanges()
> 4) I invoke ContentType.getCanonicalInstance() again. This time it I
> expect it to return the instance I commited to the DB in step 3, but it
> returns the cached result (empty set).
> 5) DataContext.commitChanges()
> 6) Database complains of unique constraint violation
>
> Currently I invoke
> "context.invalidateObjects(context.getObjectStore().getObjects())" after
> each commitChanges(). I'd want to do something equivilent for the query
> cache.
>
> Thanks,
> Gili
-- http://www.desktopbeautifier.com/
This archive was generated by hypermail 2.0.0 : Tue Sep 13 2005 - 16:44:13 EDT