summaryrefslogtreecommitdiffstats
path: root/subversion/libsvn_wc/wc-queries.sql
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_wc/wc-queries.sql')
-rw-r--r--subversion/libsvn_wc/wc-queries.sql36
1 files changed, 29 insertions, 7 deletions
diff --git a/subversion/libsvn_wc/wc-queries.sql b/subversion/libsvn_wc/wc-queries.sql
index a8388a3..0ced98c 100644
--- a/subversion/libsvn_wc/wc-queries.sql
+++ b/subversion/libsvn_wc/wc-queries.sql
@@ -191,7 +191,7 @@ WHERE wc_id = ?1
-- STMT_DELETE_NODE
DELETE
FROM NODES
-WHERE wc_id = ?1 AND local_relpath = ?2
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
-- STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE
/* The ACTUAL_NODE applies to BASE, unless there is in at least one op_depth
@@ -417,6 +417,12 @@ LEFT OUTER JOIN nodes AS moved
WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0
LIMIT 1
+-- STMT_SELECT_MOVED_TO_NODE
+SELECT op_depth, moved_to
+FROM nodes
+WHERE wc_id = ?1 AND local_relpath = ?2 AND moved_to IS NOT NULL
+ORDER BY op_depth DESC
+
-- STMT_SELECT_OP_DEPTH_MOVED_TO
SELECT op_depth, moved_to, repos_path, revision
FROM nodes
@@ -711,7 +717,7 @@ WHERE wc_id = ?1 AND local_relpath = ?2
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3)
AND presence = MAP_BASE_DELETED
--- STMT_DELETE_ALL_LAYERS
+-- STMT_DELETE_NODE_ALL_LAYERS
DELETE FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2
@@ -1503,7 +1509,6 @@ WHERE wc_id = ?1
AND presence=MAP_NORMAL
AND file_external IS NULL
-/* ### FIXME: op-depth? What about multiple moves? */
-- STMT_SELECT_MOVED_FROM_RELPATH
SELECT local_relpath, op_depth FROM nodes
WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
@@ -1530,14 +1535,31 @@ SELECT moved_to, local_relpath FROM nodes
WHERE wc_id = ?1 AND op_depth > 0
AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
+/* If the node is moved here (r.moved_here = 1) we are really interested in
+ where the node was moved from. To obtain that we need the op_depth, but
+ this form of select only allows a single return value */
-- STMT_SELECT_MOVED_FOR_DELETE
-SELECT local_relpath, moved_to, op_depth FROM nodes
+SELECT local_relpath, moved_to, op_depth,
+ (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
+ WHERE r.wc_id = ?1
+ AND r.local_relpath = n.local_relpath
+ AND r.op_depth < n.op_depth
+ ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
+ FROM nodes n
WHERE wc_id = ?1
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
AND moved_to IS NOT NULL
- AND op_depth >= (SELECT MAX(op_depth) FROM nodes o
- WHERE o.wc_id = ?1
- AND o.local_relpath = ?2)
+ AND op_depth >= ?3
+
+-- STMT_SELECT_MOVED_FROM_FOR_DELETE
+SELECT local_relpath, op_depth,
+ (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
+ WHERE r.wc_id = ?1
+ AND r.local_relpath = n.local_relpath
+ AND r.op_depth < n.op_depth
+ ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
+ FROM nodes n
+WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
-- STMT_UPDATE_MOVED_TO_DESCENDANTS
UPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to)
OpenPOWER on IntegriCloud