On 16.02.2011 19:25, Julian Foad wrote:
> On Tue, 2011-02-15, Stefan Sperling wrote:
>> [[[
>> Improve performance of svn proplist in a similar way as was done in r1039808.
>> But, this time, avoid problems with callbacks invoked during sqlite
>> transactions by storing results in a temporary table and invoking
>> callbacks during a query on the temporary table.
> [...]
>> ]]]
>> Index: subversion/libsvn_wc/wc.h
>> ===================================================================
>> +-- STMT_CACHE_NODE_PROPS_RECURSIVE
>> +CREATE TEMPORARY TABLE temp__node_props_cache AS
>> +  SELECT local_relpath, kind, properties FROM nodes_current
>> +  WHERE wc_id = ?1
>> +    AND (?2 = '' OR local_relpath = ?2 OR local_relpath LIKE ?2 || '/%')
> For correct use of 'LIKE' with arbitrary file names, we need to escape
> the pattern (and declare that here), which in turn means the unescaped
> pattern and the escaped pattern need to be passed in as two separate
> params, I think.  Same again in a similar query below.

Good catch. We'll need an escape clause, too.

>> +    AND local_relpath NOT IN (
>> +      SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
> I wonder if this subexpression would be faster rewritten as something
> like
>
>        AND NOT (SELECT 1 FROM actual_node
>                 WHERE wc_id = ?1 AND local_relpath = ?2)
>
> (I'm not sure whether "NOT (SELECT 1 ...)" is the correct or best way to
> say "this selection is empty", but you get the idea.)

My not very humble opinion -- we can play silly buggers trying to
optimize this bit of the query, but effort would be better spent in
merging NODES and ACTUAL_NODE, which in turn would allow us to drop the
second query altogether and halve the total time needed to populate the
cache table.

-- Brane

Reply via email to