diff options
Diffstat (limited to 'subversion/libsvn_wc/wc-queries.sql')
-rw-r--r-- | subversion/libsvn_wc/wc-queries.sql | 36 |
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) |