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;
}