#1 2015-04-29 13:42:32

DigDiver
Member
Registered: 2013-04-29
Posts: 137

Client.ServerCacheFlush and Server.FlushInternalDBCache

I call ExecuteList from the client side to determine the contact's Birthday:

SQL := Select * from Emails Where strftime('%m-%d',Birthday) = strftime('%m-%d','now')
Client.ExecuteList([TEmails], SQL);

After the first call of ExecuteList I change the computer date to get a list of other contacts.
Even if I perform Client.ServerCacheFlush(TEmails); the returned data is old (from cache).
If I call Server.FlushInternalDBCache from the server side, the returned data is new.

How to clear DB cache from the client side?

Offline

#2 2015-04-29 14:53:41

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 14,224
Website

Re: Client.ServerCacheFlush and Server.FlushInternalDBCache

As stated by the doc, the ORM level cache is only at ID level, not at SQLite3 level (the JSON cache).
If you use SQL selects, it will bypass the ORM level cache, so it would not be enough.
See http://synopse.info/files/html/Synopse% … ml#TITL_39
So you have to manually flush the SQLite3 level JSON cache, on the server side - via a service.

BTW you should NOT use ExecuteList() with manual SQL from the client, but proper ORM methods.
And not rely on strftime() or now() functions for your "where" clause.
All this is very specific to SQLite3, and not portable.

In all cases, put your business logic on the server, within services.
Otherwise, your client code would be more complex, and you would face issues like those.

Offline

Board footer

Powered by FluxBB