You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/05/12 13:20:38 UTC

svn commit: r1102242 - in /subversion/trunk/subversion/libsvn_wc: wc-queries.sql wc_db.c

Author: rhuijben
Date: Thu May 12 11:20:37 2011
New Revision: 1102242

URL: http://svn.apache.org/viewvc?rev=1102242&view=rev
Log:
Reduce the time to run svnversion on my test working copy by about 10% by
applying a few simple query optimizations.

* subversion/libsvn_wc/wc-queries.sql
  (STMT_SELECT_SPARSE_NODES): Rename to ...
  (STMT_HAS_SPARSE_NODES): ... this and LIMIT to 1 result of value 1.

  (STMT_SUBTREE_HAS_TREE_MODIFICATIONS): Any node at op_depth > 0 implies
    a modification to the base tree (because it shadows BASE) and
    file externals live at op_depth 0 only, so we don't have to check
    for them at higher op_depths.

  (STMT_SELECT_SWITCHED_NODES): The switched check only needs to check the
    BASE layer.

* subversion/libsvn_wc/wc_db.c
  (is_sparse_checkout_internal): Update caller.

Modified:
    subversion/trunk/subversion/libsvn_wc/wc-queries.sql
    subversion/trunk/subversion/libsvn_wc/wc_db.c

Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=1102242&r1=1102241&r2=1102242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Thu May 12 11:20:37 2011
@@ -1116,20 +1116,19 @@ SELECT MIN(revision), MAX(revision),
   AND file_external IS NULL
   AND op_depth = 0
 
--- STMT_SELECT_SPARSE_NODES
-SELECT local_relpath, presence, depth FROM nodes
+-- STMT_HAS_SPARSE_NODES
+SELECT 1 FROM nodes
 WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
   AND op_depth = 0
   AND (presence IN ('absent', 'excluded')
         OR depth NOT IN ('infinity', 'unknown'))
   AND file_external IS NULL
+LIMIT 1
 
 -- STMT_SUBTREE_HAS_TREE_MODIFICATIONS
 SELECT 1 FROM nodes
 WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
   AND op_depth > 0
-  AND presence IN ('normal', 'incomplete', 'base-deleted')
-  AND file_external IS NULL
 LIMIT 1
 
 -- STMT_SUBTREE_HAS_PROP_MODIFICATIONS
@@ -1145,6 +1144,7 @@ LIMIT 1
 -- STMT_SELECT_SWITCHED_NODES
 SELECT local_relpath, repos_path FROM nodes_base
 WHERE wc_id = ?1 AND local_relpath != ""
+  AND op_depth = 0
   AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
   AND ((repos_path NOT LIKE ?4 ESCAPE '#' AND repos_path != local_relpath)
        OR (repos_path != ?5 || local_relpath))

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1102242&r1=1102241&r2=1102242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Thu May 12 11:20:37 2011
@@ -11683,7 +11683,7 @@ is_sparse_checkout_internal(svn_boolean_
   svn_boolean_t have_row;
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
-                                    STMT_SELECT_SPARSE_NODES));
+                                    STMT_HAS_SPARSE_NODES));
   SVN_ERR(svn_sqlite__bindf(stmt, "iss",
                             wcroot->wc_id,
                             local_relpath,