[TYPO3-core] RFC: Bug #11903: Use separate tables for tags in the caching framework

Oliver Hader oliver at typo3.org
Thu Oct 1 09:47:34 CEST 2009


Hi again,

Oliver Hader schrieb:
> Hi Masi,
> 
> Martin Kutschker schrieb:
>> For the SQL Server (and Oracle) I haven't found a way to get the job done in a single (nested)
>> statement. So have to use two statements:
>>
>> DELETE FROM table2
>>  WHERE id IN
>>   (SELECT table1.id
>>    FROM table1 JOIN table2 ON (table1.id=table2.id)
>>    WHERE table1.column1=value)
>> DELETE FROM table1
>>  WHERE table1.column1=value
>>
>> But after writing this I wonder if the JOIN is really needed. What exactly is it that the caching
>> framework is trying to do?
> 
> The tags are stored in the table "[cache]_tags" and select from that
> table that has an identifier that is equal in the table "[cache]". The
> caching framework tries to remove from both tables at once - thus,
> clearing the tag references and the cached content.
> 
> Since there it seems that there is no common way to create these queries
> it would be fine to use two DELETE queries with accordant subqueries.
> It's important that selects are fast (using separate tags instead of
> full table scan with LIKE "%tag%"), deletes could be a bit slower...
> 
> Then we would have something like this:
> 
> $TYPO3_DB->exec_DELETEquery(
>   'cache',
>   'identifier IN (' .
>       $TYPO3_DB->SELECTquery(
>         'identifier',
>         'cache_tags',
>         'tag = ' . $tag
>       ) .
>     ')'
> );
> $TYPO3_DB->exec_DELETEquery(
>   'cache_tags',
>   'tag = ' . $tag
> );
> 
> What do you think?

With a patch it would bee the following one...
I'd be happy if some could test this also with DBAL. Thanks in advance!

olly
-- 
Oliver Hader
TYPO3 Release Manager 4.3


More information about the TYPO3-team-core mailing list