You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/05/17 15:27:42 UTC
svn commit: r1104234 - in /subversion/trunk/subversion/libsvn_wc:
wc-queries.sql wc_db.c
Author: hwright
Date: Tue May 17 13:27:42 2011
New Revision: 1104234
URL: http://svn.apache.org/viewvc?rev=1104234&view=rev
Log:
Use the targets list to implement depth filtering for recursive propgets.
This reduces the number or paths and queries in the code. The queries could
probably be further optimized.
* subversion/libsvn_wc/wc-queries.sql
(STMT_CACHE_NODE_PROPS_RECURSIVE, STMT_CACHE_ACTUAL_PROPS_RECURSIVE,
STMT_CACHE_NODE_BASE_PROPS_RECURSIVE, STMT_CACHE_NODE_PROPS_OF_CHILDREN,
STMT_CACHE_ACTUAL_PROPS_OF_CHILDREN, STMT_CACHE_NODE_BASE_PROPS_OF_CHILDREN):
Remove.
(STMT_CACHE_NODE_PROPS, STMT_CACHE_ACTUAL_PROPS,
STMT_CACHE_NODE_BASE_PROPS): New.
* subversion/libsvn_wc/wc_db.c
(cache_props_baton_t): Add depth, remove immediates_only.
(cache_props_recursive): Choose the statement based upon pristine props or
not. Don't worry about depth.
(svn_wc__db_read_props_streamily): Don't bother with immediates_only.
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=1104234&r1=1104233&r2=1104234&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Tue May 17 13:27:42 2011
@@ -1018,60 +1018,31 @@ CREATE TEMPORARY TABLE temp__node_props_
CREATE UNIQUE INDEX temp__node_props_cache_unique
ON temp__node_props_cache (local_relpath) */
--- STMT_CACHE_NODE_PROPS_RECURSIVE
+-- STMT_CACHE_NODE_PROPS
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 IN (SELECT local_relpath FROM targets_list)
AND local_relpath NOT IN (
SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
AND presence IN ('normal', 'incomplete')
--- STMT_CACHE_ACTUAL_PROPS_RECURSIVE
+-- STMT_CACHE_ACTUAL_PROPS
INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
SELECT A.local_relpath, N.kind, A.properties
FROM actual_node AS A JOIN nodes_current AS N
ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
AND N.presence IN ('normal', 'incomplete')
WHERE A.wc_id = ?1
- AND (?2 = '' OR A.local_relpath = ?2 OR A.local_relpath LIKE ?3 ESCAPE '#')
+ AND A.local_relpath IN (SELECT local_relpath FROM targets_list)
AND A.local_relpath NOT IN
(SELECT local_relpath FROM temp__node_props_cache)
--- STMT_CACHE_NODE_BASE_PROPS_RECURSIVE
+-- STMT_CACHE_NODE_BASE_PROPS
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')
-
--- STMT_CACHE_NODE_PROPS_OF_CHILDREN
-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')
-
--- STMT_CACHE_ACTUAL_PROPS_OF_CHILDREN
-INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
- SELECT A.local_relpath, N.kind, A.properties
- FROM actual_node AS A JOIN nodes_current AS N
- ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
- AND N.presence IN ('normal', 'incomplete')
- WHERE A.wc_id = ?1
- AND (A.local_relpath = ?2 OR A.parent_relpath = ?2)
- AND A.local_relpath NOT IN
- (SELECT local_relpath FROM temp__node_props_cache)
-
--- STMT_CACHE_NODE_BASE_PROPS_OF_CHILDREN
-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 IN (SELECT local_relpath FROM targets_list)
AND local_relpath NOT IN (
SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
AND presence IN ('normal', 'incomplete')
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1104234&r1=1104233&r2=1104234&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue May 17 13:27:42 2011
@@ -7647,7 +7647,7 @@ svn_wc__db_read_props(apr_hash_t **props
*/
typedef struct cache_props_baton_t
{
- svn_boolean_t immediates_only;
+ svn_depth_t depth;
svn_boolean_t base_props;
svn_boolean_t pristine;
svn_cancel_func_t cancel_func;
@@ -7663,32 +7663,21 @@ cache_props_recursive(void *cb_baton,
{
cache_props_baton_t *baton = cb_baton;
svn_sqlite__stmt_t *stmt;
+ int stmt_idx;
+
+ SVN_ERR(populate_targets_tree(wcroot, local_relpath, baton->depth, NULL,
+ scratch_pool));
SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb,
STMT_CREATE_NODE_PROPS_CACHE));
- if (baton->immediates_only)
- {
- if (baton->base_props)
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_NODE_BASE_PROPS_OF_CHILDREN));
- else
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_NODE_PROPS_OF_CHILDREN));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- }
+ if (baton->base_props)
+ stmt_idx = STMT_CACHE_NODE_BASE_PROPS;
else
- {
- if (baton->base_props)
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_NODE_BASE_PROPS_RECURSIVE));
- else
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_NODE_PROPS_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
- construct_like_arg(local_relpath,
- scratch_pool)));
- }
+ stmt_idx = STMT_CACHE_NODE_PROPS;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, stmt_idx));
+ SVN_ERR(svn_sqlite__bind_int64(stmt, 1, wcroot->wc_id));
SVN_ERR(svn_sqlite__step_done(stmt));
/* ACTUAL props aren't relevant in the pristine case. */
@@ -7698,20 +7687,9 @@ cache_props_recursive(void *cb_baton,
if (baton->cancel_func)
SVN_ERR(baton->cancel_func(baton->cancel_baton));
- if (baton->immediates_only)
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_ACTUAL_PROPS_OF_CHILDREN));
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- }
- else
- {
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_CACHE_ACTUAL_PROPS_RECURSIVE));
- SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
- construct_like_arg(local_relpath,
- scratch_pool)));
- }
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_CACHE_ACTUAL_PROPS));
+ SVN_ERR(svn_sqlite__bind_int64(stmt, 1, wcroot->wc_id));
SVN_ERR(svn_sqlite__step_done(stmt));
return SVN_NO_ERROR;
@@ -7739,8 +7717,6 @@ svn_wc__db_read_props_streamily(svn_wc__
int row_number;
apr_pool_t *iterpool;
svn_boolean_t files_only = (depth == svn_depth_files);
- svn_boolean_t immediates_only = ((depth == svn_depth_immediates) ||
- (depth == svn_depth_files));
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
SVN_ERR_ASSERT(receiver_func);
@@ -7753,7 +7729,7 @@ svn_wc__db_read_props_streamily(svn_wc__
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- baton.immediates_only = immediates_only;
+ baton.depth = depth;
baton.base_props = base_props;
baton.pristine = pristine;
baton.cancel_func = cancel_func;