Author: hwright
Date: Tue May 17 12:46:18 2011
New Revision: 1104205

URL: http://svn.apache.org/viewvc?rev=1104205&view=rev
Log:
For the recursive proplist, remove some duplicate create table statements,
by creating the table up front, and then just inserting subsequent rows.

* subversion/libsvn_wc/wc-queries.sql
  (STMT_CLEAR_NODE_PROPS_CACHE): Rename...
  (STMT_CREATE_NODE_PROPS_CACHE): ...to this, and add a create statement.
  (STMT_CACHE_NODE_PROPS_RECURSIVE, STMT_CACHE_NODE_BASE_PROPS_RECURSIVE,
   STMT_CACHE_NODE_PROPS_OF_CHILDREN, STMT_CACHE_NODE_BASE_PROPS_OF_CHILDREN):
    Use an INSERT, rather than CREATE.
  (STMT_DROP_NODE_PROPS_CACHE): New.

* subversion/libsvn_wc/wc_db.c
  (cache_props_recursive): Move the table creation into the transaction.
  (svn_wc__db_read_props_streamily): Update statement reference.

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=1104205&r1=1104204&r2=1104205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Tue May 17 12:46:18 
2011
@@ -1007,20 +1007,25 @@ WHERE NOT ((prop_reject IS NULL) AND (co
 /* PROOF OF CONCEPT: Complex queries for callback walks, caching results
                      in a temporary table. */
 
--- STMT_CLEAR_NODE_PROPS_CACHE
-DROP TABLE IF EXISTS temp__node_props_cache
+-- STMT_CREATE_NODE_PROPS_CACHE
+DROP TABLE IF EXISTS temp__node_props_cache;
+CREATE TEMPORARY TABLE temp__node_props_cache (
+  local_Relpath TEXT NOT NULL,
+  kind TEXT NOT NULL,
+  properties BLOB
+  );
+/* ###  Need index?
+CREATE UNIQUE INDEX temp__node_props_cache_unique
+  ON temp__node_props_cache (local_relpath) */
 
 -- STMT_CACHE_NODE_PROPS_RECURSIVE
-CREATE TEMPORARY TABLE temp__node_props_cache AS
-  SELECT local_relpath, kind, properties FROM nodes_current
+INSERT INTO temp__node_props_cache(local_relpath, kind, properties)
+ SELECT local_relpath, kind, properties FROM nodes_current
   WHERE wc_id = ?1
     AND (?2 = '' OR local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
     AND local_relpath NOT IN (
       SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
     AND presence IN ('normal', 'incomplete')
-/* ###  Need index?
-CREATE UNIQUE INDEX temp__node_props_cache_unique
-  ON temp__node_props_cache (local_relpath) */
 
 -- STMT_CACHE_ACTUAL_PROPS_RECURSIVE
 INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
@@ -1034,28 +1039,22 @@ INSERT INTO temp__node_props_cache (loca
       (SELECT local_relpath FROM temp__node_props_cache)
 
 -- STMT_CACHE_NODE_BASE_PROPS_RECURSIVE
-CREATE TEMPORARY TABLE temp__node_props_cache AS
+INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
   SELECT local_relpath, kind, properties FROM nodes_base
   WHERE wc_id = ?1
     AND (?2 = '' OR local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
     AND local_relpath NOT IN (
       SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
     AND presence IN ('normal', 'incomplete')
-/* ###  Need index?
-CREATE UNIQUE INDEX temp__node_props_cache_unique
-  ON temp__node_props_cache (local_relpath) */
 
 -- STMT_CACHE_NODE_PROPS_OF_CHILDREN
-CREATE TEMPORARY TABLE temp__node_props_cache AS
+INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
   SELECT local_relpath, kind, properties FROM nodes_current
   WHERE wc_id = ?1
     AND (local_relpath = ?2 OR parent_relpath = ?2)
     AND local_relpath NOT IN (
       SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
     AND presence IN ('normal', 'incomplete')
-/* ###  Need index?
-CREATE UNIQUE INDEX temp__node_props_cache_unique
-  ON temp__node_props_cache (local_relpath) */
 
 -- STMT_CACHE_ACTUAL_PROPS_OF_CHILDREN
 INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
@@ -1069,21 +1068,22 @@ INSERT INTO temp__node_props_cache (loca
       (SELECT local_relpath FROM temp__node_props_cache)
 
 -- STMT_CACHE_NODE_BASE_PROPS_OF_CHILDREN
-CREATE TEMPORARY TABLE temp__node_props_cache AS
+INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
   SELECT local_relpath, kind, properties FROM nodes_base
   WHERE wc_id = ?1
     AND (local_relpath = ?2 OR parent_relpath = ?2)
     AND local_relpath NOT IN (
       SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
     AND presence IN ('normal', 'incomplete')
-/* ###  Need index?
-CREATE UNIQUE INDEX temp__node_props_cache_unique
-  ON temp__node_props_cache (local_relpath) */
 
 -- STMT_SELECT_RELEVANT_PROPS_FROM_CACHE
 SELECT local_relpath, kind, properties FROM temp__node_props_cache
 ORDER BY local_relpath
 
+-- STMT_DROP_NODE_PROPS_CACHE
+DROP TABLE IF EXISTS temp__node_props_cache;
+
+
 -- STMT_CREATE_REVERT_LIST
 DROP TABLE IF EXISTS revert_list;
 CREATE TEMPORARY TABLE revert_list (

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1104205&r1=1104204&r2=1104205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue May 17 12:46:18 2011
@@ -7664,6 +7664,9 @@ cache_props_recursive(void *cb_baton,
   cache_props_baton_t *baton = cb_baton;
   svn_sqlite__stmt_t *stmt;
 
+  SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
+                                      STMT_CREATE_NODE_PROPS_CACHE));
+
   if (baton->immediates_only)
     {
       if (baton->base_props)
@@ -7750,9 +7753,6 @@ svn_wc__db_read_props_streamily(svn_wc__
                                                 scratch_pool, scratch_pool));
   VERIFY_USABLE_WCROOT(wcroot);
 
-  SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
-                                      STMT_CLEAR_NODE_PROPS_CACHE));
-
   baton.immediates_only = immediates_only;
   baton.base_props = base_props;
   baton.pristine = pristine;
@@ -7842,7 +7842,7 @@ svn_wc__db_read_props_streamily(svn_wc__
   svn_pool_destroy(iterpool);
 
   SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
-                                      STMT_CLEAR_NODE_PROPS_CACHE));
+                                      STMT_DROP_NODE_PROPS_CACHE));
   return SVN_NO_ERROR;
 }
 


Reply via email to