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 2012/05/20 12:33:23 UTC
svn commit: r1340666 - in /subversion/trunk/subversion/libsvn_wc:
wc-queries.sql wc_db.c
Author: rhuijben
Date: Sun May 20 10:33:22 2012
New Revision: 1340666
URL: http://svn.apache.org/viewvc?rev=1340666&view=rev
Log:
Optimize usage of the wc.db queries for 'rm' and 'revert' with the new found
knowledge that a "?2 = ''" like OR expression in strict descendants checks
of a query removes all index optimizations.
* subversion/libsvn_wc/wc-queries.sql
(STMT_DELETE_NODES_RECURSIVE): Split in...
(STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE): ... a query for normal nodes
(STMT_DELETE_ALL_NODES_ABOVE_DEPTH): And a specific query for the working
copy root.
* subversion/libsvn_wc/wc_db.c
(op_revert_recursive_txn): Just delete actual nodes for the node itself. If
there is none, the node doesn't exist.
Choose the right query for deleting NODES queries.
(remove_node_txn,
delete_node): Update query user.
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=1340666&r1=1340665&r2=1340666&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Sun May 20 10:33:22 2012
@@ -601,23 +601,29 @@ WHERE wc_id = ?1 AND local_relpath = ?2
DELETE FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2
--- STMT_DELETE_NODES_RECURSIVE
+/* Will not delete recursive when run on the wcroot */
+-- STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE
DELETE FROM nodes
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND op_depth >= ?3
+/* WC-Root query for STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE */
+-- STMT_DELETE_ALL_NODES_ABOVE_DEPTH
+DELETE FROM nodes
+WHERE wc_id = ?1
+ AND op_depth >= ?3
+
-- STMT_DELETE_ACTUAL_NODE
DELETE FROM actual_node
WHERE wc_id = ?1 AND local_relpath = ?2
+/* Will not delete recursive when run on the wcroot */
-- STMT_DELETE_ACTUAL_NODE_RECURSIVE
DELETE FROM actual_node
WHERE wc_id = ?1
- AND (?2 = ''
- OR local_relpath = ?2
+ AND (local_relpath = ?2
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
-- STMT_DELETE_ACTUAL_NODE_WITHOUT_CONFLICT
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1340666&r1=1340665&r2=1340666&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Sun May 20 10:33:22 2012
@@ -5539,7 +5539,7 @@ op_revert_recursive_txn(void *baton,
SVN_ERR(svn_sqlite__reset(stmt));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_ACTUAL_NODE_RECURSIVE));
+ STMT_DELETE_ACTUAL_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
local_relpath));
SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
@@ -5569,8 +5569,11 @@ op_revert_recursive_txn(void *baton,
/* Don't delete BASE nodes */
select_op_depth = op_depth ? op_depth : 1;
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_NODES_RECURSIVE));
+ SVN_ERR(svn_sqlite__get_statement(
+ &stmt, wcroot->sdb,
+ (local_relpath[0] == '\0')
+ ? STMT_DELETE_ALL_NODES_ABOVE_DEPTH
+ : STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE));
SVN_ERR(svn_sqlite__bindf(stmt, "isd", wcroot->wc_id,
local_relpath, select_op_depth));
SVN_ERR(svn_sqlite__step_done(stmt));
@@ -6111,7 +6114,7 @@ remove_node_txn(void *baton,
scratch_pool, scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_NODES_RECURSIVE));
+ STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE));
/* Remove all nodes at or below local_relpath where op_depth >= 0 */
SVN_ERR(svn_sqlite__bindf(stmt, "isd",
@@ -6676,7 +6679,7 @@ delete_node(void *baton,
SVN_ERR(svn_sqlite__step_done(stmt));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_DELETE_NODES_RECURSIVE));
+ STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE));
SVN_ERR(svn_sqlite__bindf(stmt, "isd",
wcroot->wc_id, local_relpath, b->delete_depth));
SVN_ERR(svn_sqlite__step_done(stmt));