73
73
-- STMT_SELECT_BASE_CHILDREN_INFO
74
74
SELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind,
75
revision, depth, file_external
77
WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0
79
-- STMT_SELECT_BASE_CHILDREN_INFO_LOCK
80
SELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind,
75
81
revision, depth, file_external,
76
82
lock_token, lock_owner, lock_comment, lock_date
79
85
AND nodes.repos_path = lock.repos_relpath
80
86
WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0
82
89
-- STMT_SELECT_WORKING_NODE
83
90
SELECT op_depth, presence, kind, checksum, translated_size,
84
91
changed_revision, changed_date, changed_author, depth, symlink_target,
92
99
-- STMT_SELECT_DEPTH_NODE
93
100
SELECT repos_id, repos_path, presence, kind, revision, checksum,
94
101
translated_size, changed_revision, changed_date, changed_author, depth,
95
symlink_target, last_mod_time, properties
102
symlink_target, properties, moved_to, moved_here
97
104
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
118
125
-- STMT_SELECT_NODE_CHILDREN_INFO
119
126
/* Getting rows in an advantageous order using
120
127
ORDER BY local_relpath, op_depth DESC
121
turns out to be slower than getting rows in a random order and making the
128
doesn't work as the index is created without the DESC keyword.
129
Using both local_relpath and op_depth descending does work without any
130
performance penalty. */
123
131
SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
124
132
checksum, translated_size, changed_revision, changed_date, changed_author,
125
133
depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
128
136
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
129
137
AND nodes.repos_path = lock.repos_relpath AND op_depth = 0
130
138
WHERE wc_id = ?1 AND parent_relpath = ?2
139
ORDER BY local_relpath DESC, op_depth DESC
141
-- STMT_SELECT_BASE_NODE_CHILDREN_INFO
142
/* See above re: result ordering. The results of this query must be in
143
the same order as returned by STMT_SELECT_NODE_CHILDREN_INFO, because
144
read_children_info expects them to be. */
145
SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
146
checksum, translated_size, changed_revision, changed_date, changed_author,
147
depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
148
lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external
150
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
151
AND nodes.repos_path = lock.repos_relpath AND op_depth = 0
152
WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0
153
ORDER BY local_relpath DESC
132
155
-- STMT_SELECT_NODE_CHILDREN_WALKER_INFO
133
156
SELECT local_relpath, op_depth, presence, kind
134
157
FROM nodes_current
135
158
WHERE wc_id = ?1 AND parent_relpath = ?2
159
ORDER BY local_relpath
137
161
-- STMT_SELECT_ACTUAL_CHILDREN_INFO
138
162
SELECT local_relpath, changelist, properties, conflict_data
161
185
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14,
162
186
?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23)
164
SELECT local_relpath, kind FROM nodes n
165
WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
167
AND presence in (MAP_NORMAL, MAP_INCOMPLETE)
168
AND NOT EXISTS(SELECT 1 FROM NODES w
169
WHERE w.wc_id = ?1 AND w.local_relpath = n.local_relpath
171
ORDER BY local_relpath DESC
173
188
-- STMT_SELECT_WORKING_PRESENT
174
189
SELECT local_relpath, kind, checksum, translated_size, last_mod_time
211
225
-- STMT_DELETE_WORKING_BASE_DELETE
212
226
DELETE FROM nodes
227
WHERE wc_id = ?1 AND local_relpath = ?2
228
AND presence = MAP_BASE_DELETED
230
AND op_depth = (SELECT MIN(op_depth) FROM nodes n
232
AND n.local_relpath = nodes.local_relpath
235
-- STMT_DELETE_WORKING_BASE_DELETE_RECURSIVE
213
237
WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
214
238
AND presence = MAP_BASE_DELETED
216
240
AND op_depth = (SELECT MIN(op_depth) FROM nodes n
217
241
WHERE n.wc_id = ?1
218
242
AND n.local_relpath = nodes.local_relpath
221
245
-- STMT_DELETE_WORKING_RECURSIVE
222
246
DELETE FROM nodes
226
250
-- STMT_DELETE_BASE_RECURSIVE
227
251
DELETE FROM nodes
228
WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
252
WHERE wc_id = ?1 AND (local_relpath = ?2
253
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
231
256
-- STMT_DELETE_WORKING_OP_DEPTH
232
257
DELETE FROM nodes
234
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
239
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
245
259
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
246
260
AND op_depth = ?3
262
/* Full layer replacement check code for handling moves
263
The op_root must exist (or there is no layer to replace) and an op-root
264
always has presence 'normal' */
265
-- STMT_SELECT_LAYER_FOR_REPLACE
266
SELECT s.local_relpath, s.kind,
267
RELPATH_SKIP_JOIN(?2, ?4, s.local_relpath) drp, 'normal'
269
WHERE s.wc_id = ?1 AND s.local_relpath = ?2 AND s.op_depth = ?3
271
SELECT s.local_relpath, s.kind,
272
RELPATH_SKIP_JOIN(?2, ?4, s.local_relpath) drp, d.presence
274
LEFT OUTER JOIN nodes d ON d.wc_id= ?1 AND d.op_depth = ?5
275
AND d.local_relpath = drp
277
AND IS_STRICT_DESCENDANT_OF(s.local_relpath, ?2)
279
ORDER BY s.local_relpath
281
-- STMT_SELECT_DESCENDANTS_OP_DEPTH_RV
248
282
SELECT local_relpath, kind
251
285
AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
252
286
AND op_depth = ?3
287
AND presence in (MAP_NORMAL, MAP_INCOMPLETE)
253
288
ORDER BY local_relpath DESC
255
290
-- STMT_COPY_NODE_MOVE
262
294
changed_author, checksum, properties, translated_size, last_mod_time,
263
295
symlink_target, moved_here, moved_to )
265
wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* parent_relpath */,
267
repos_path, revision, presence, depth, kind, changed_revision,
268
changed_date, changed_author, checksum, properties, translated_size,
269
last_mod_time, symlink_target, 1,
270
(SELECT dst.moved_to FROM nodes AS dst
272
AND dst.local_relpath = ?4
273
AND dst.op_depth = ?5)
275
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
297
s.wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* parent_relpath */,
299
s.repos_path, s.revision, s.presence, s.depth, s.kind, s.changed_revision,
300
s.changed_date, s.changed_author, s.checksum, s.properties,
301
CASE WHEN d.checksum=s.checksum THEN d.translated_size END,
302
CASE WHEN d.checksum=s.checksum THEN d.last_mod_time END,
303
s.symlink_target, 1, d.moved_to
305
LEFT JOIN nodes d ON d.wc_id=?1 AND d.local_relpath=?4 AND d.op_depth=?5
306
WHERE s.wc_id = ?1 AND s.local_relpath = ?2 AND s.op_depth = ?3
308
-- STMT_SELECT_NO_LONGER_MOVED_RV
309
SELECT d.local_relpath, RELPATH_SKIP_JOIN(?2, ?4, d.local_relpath) srp,
310
b.presence, b.op_depth
312
LEFT OUTER JOIN nodes b ON b.wc_id = ?1 AND b.local_relpath = d.local_relpath
313
AND b.op_depth = (SELECT MAX(x.op_depth) FROM nodes x
315
AND x.local_relpath = b.local_relpath
318
AND IS_STRICT_DESCENDANT_OF(d.local_relpath, ?2)
320
AND NOT EXISTS(SELECT * FROM nodes s
322
AND s.local_relpath = srp
324
ORDER BY d.local_relpath DESC
277
326
-- STMT_SELECT_OP_DEPTH_CHILDREN
278
327
SELECT local_relpath, kind FROM nodes
280
329
AND parent_relpath = ?2
281
330
AND op_depth = ?3
282
331
AND presence != MAP_BASE_DELETED
283
332
AND file_external is NULL
333
ORDER BY local_relpath
335
-- STMT_SELECT_OP_DEPTH_CHILDREN_EXISTS
336
SELECT local_relpath, kind FROM nodes
338
AND parent_relpath = ?2
340
AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
341
ORDER BY local_relpath
285
343
/* Used by non-recursive revert to detect higher level children, and
286
344
actual-only rows that would be left orphans, if the revert
318
377
-- STMT_COMMIT_DESCENDANTS_TO_BASE
319
378
UPDATE NODES SET op_depth = 0,
321
repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1),
380
repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath),
323
382
dav_cache = NULL,
324
383
moved_here = NULL,
325
385
presence = CASE presence
326
386
WHEN MAP_NORMAL THEN MAP_NORMAL
327
387
WHEN MAP_EXCLUDED THEN MAP_EXCLUDED
334
394
-- STMT_SELECT_NODE_CHILDREN
335
395
/* Return all paths that are children of the directory (?1, ?2) in any
336
396
op-depth, including children of any underlying, replaced directories. */
337
SELECT local_relpath FROM nodes
397
SELECT DISTINCT local_relpath FROM nodes
338
398
WHERE wc_id = ?1 AND parent_relpath = ?2
399
ORDER BY local_relpath
340
401
-- STMT_SELECT_WORKING_CHILDREN
341
402
/* Return all paths that are children of the working version of the
342
403
directory (?1, ?2). A given path is not included just because it is a
343
404
child of an underlying (replaced) directory, it has to be in the
344
405
working version of the directory. */
345
SELECT local_relpath FROM nodes
406
SELECT DISTINCT local_relpath FROM nodes
346
407
WHERE wc_id = ?1 AND parent_relpath = ?2
347
408
AND (op_depth > (SELECT MAX(op_depth) FROM nodes
348
409
WHERE wc_id = ?1 AND local_relpath = ?2)
350
411
(op_depth = (SELECT MAX(op_depth) FROM nodes
351
412
WHERE wc_id = ?1 AND local_relpath = ?2)
352
AND presence != MAP_BASE_DELETED))
413
AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)))
414
ORDER BY local_relpath
416
-- STMT_SELECT_BASE_NOT_PRESENT_CHILDREN
417
SELECT local_relpath FROM nodes
418
WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0
419
AND presence = MAP_NOT_PRESENT
420
ORDER BY local_relpath
354
422
-- STMT_SELECT_NODE_PROPS
355
423
SELECT properties, presence FROM nodes
396
464
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
398
466
-- STMT_SELECT_DELETION_INFO
399
SELECT (SELECT b.presence FROM nodes AS b
400
WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0),
401
work.presence, work.op_depth
402
FROM nodes_current AS work
403
WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0
406
/* ### FIXME. moved.moved_to IS NOT NULL works when there is
407
only one move but we need something else when there are several. */
408
SELECT (SELECT b.presence FROM nodes AS b
409
WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0),
410
work.presence, work.op_depth, moved.moved_to
411
FROM nodes_current AS work
412
LEFT OUTER JOIN nodes AS moved
413
ON moved.wc_id = work.wc_id
414
AND moved.local_relpath = work.local_relpath
415
AND moved.moved_to IS NOT NULL
416
WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0
467
SELECT b.presence, w.presence, w.op_depth, w.moved_to
469
LEFT JOIN nodes b ON b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0
470
WHERE w.wc_id = ?1 AND w.local_relpath = ?2
471
AND w.op_depth = (SELECT MAX(op_depth) FROM nodes d
472
WHERE d.wc_id = ?1 AND d.local_relpath = ?2
419
476
-- STMT_SELECT_MOVED_TO_NODE
424
480
ORDER BY op_depth DESC
426
482
-- STMT_SELECT_OP_DEPTH_MOVED_TO
427
SELECT op_depth, moved_to, repos_path, revision
483
SELECT op_depth, moved_to
429
WHERE wc_id = ?1 AND local_relpath = ?2
430
AND op_depth <= (SELECT MIN(op_depth) FROM nodes
431
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3)
432
ORDER BY op_depth DESC
485
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3
486
AND EXISTS(SELECT * from nodes
487
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
488
AND presence IN (MAP_NORMAL, MAP_INCOMPLETE))
489
ORDER BY op_depth ASC
434
492
-- STMT_SELECT_MOVED_TO
437
495
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
439
SELECT moved_here, presence, repos_path, revision
441
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth >= ?3
444
497
-- STMT_SELECT_MOVED_BACK
445
498
SELECT u.local_relpath,
446
499
u.presence, u.repos_id, u.repos_path, u.revision,
677
722
SELECT wc_id, local_relpath, parent_relpath
678
723
FROM targets_list
725
-- STMT_INSERT_ACTUAL_EMPTIES_FILES
726
INSERT OR IGNORE INTO actual_node (
727
wc_id, local_relpath, parent_relpath)
728
SELECT wc_id, local_relpath, parent_relpath
680
732
-- STMT_DELETE_ACTUAL_EMPTY
681
733
DELETE FROM actual_node
682
734
WHERE wc_id = ?1 AND local_relpath = ?2
924
996
AND op_depth = 0))
926
998
-- STMT_INSTALL_WORKING_NODE_FOR_DELETE
927
INSERT OR REPLACE INTO nodes (
928
1000
wc_id, local_relpath, op_depth,
929
1001
parent_relpath, presence, kind)
930
1002
VALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5)
934
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
936
AND NOT EXISTS (SELECT 1 FROM nodes n
938
AND n.local_relpath = nodes.local_relpath
940
AND n.presence IN (MAP_NORMAL, MAP_INCOMPLETE))
942
1004
-- STMT_REPLACE_WITH_BASE_DELETED
943
1005
INSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath,
944
1006
kind, moved_to, presence)
947
1008
kind, moved_to, MAP_BASE_DELETED
949
1010
WHERE wc_id = ?1
950
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1011
AND local_relpath = ?2
951
1012
AND op_depth = ?3
953
/* If this query is updated, STMT_INSERT_DELETE_LIST should too. */
1014
/* If this query is updated, STMT_INSERT_DELETE_LIST should too.
1015
Use UNION ALL instead of a simple 'OR' to avoid creating a temp table */
954
1016
-- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE
955
1017
INSERT INTO nodes (
956
1018
wc_id, local_relpath, op_depth, parent_relpath, presence, kind)
957
1019
SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED,
1022
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1024
SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED,
960
1027
WHERE wc_id = ?1
961
AND (local_relpath = ?2
962
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1028
AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
963
1029
AND op_depth = ?3
964
1030
AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
965
1031
AND file_external IS NULL
1032
ORDER BY local_relpath
967
1034
-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY
1035
INSERT OR REPLACE INTO nodes (
969
1036
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
970
1037
revision, presence, depth, kind, changed_revision, changed_date,
971
1038
changed_author, checksum, properties, translated_size, last_mod_time,
1039
symlink_target, moved_to )
973
1040
SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id,
974
1041
repos_path, revision, presence, depth, kind, changed_revision,
975
1042
changed_date, changed_author, checksum, properties, translated_size,
976
last_mod_time, symlink_target
1043
last_mod_time, symlink_target,
1044
(SELECT moved_to FROM nodes
1045
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3) moved_to
978
1047
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
992
1061
AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
993
1062
AND op_depth = ?3
995
UPDATE nodes SET op_depth = ?4, moved_here = NULL
997
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1064
/* Duplicated SELECT body to avoid creating temporary table */
1065
-- STMT_COPY_OP_DEPTH_RECURSIVE
1067
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
1068
revision, presence, depth, kind, changed_revision, changed_date,
1069
changed_author, checksum, properties, translated_size, last_mod_time,
1070
symlink_target, moved_here, moved_to )
1072
wc_id, local_relpath, ?4, parent_relpath, repos_id,
1073
repos_path, revision, presence, depth, kind, changed_revision,
1074
changed_date, changed_author, checksum, properties, translated_size,
1075
last_mod_time, symlink_target, NULL, NULL
1077
WHERE wc_id = ?1 AND op_depth = ?3 AND local_relpath = ?2
1080
wc_id, local_relpath, ?4, parent_relpath, repos_id,
1081
repos_path, revision, presence, depth, kind, changed_revision,
1082
changed_date, changed_author, checksum, properties, translated_size,
1083
last_mod_time, symlink_target, NULL, NULL
1085
WHERE wc_id = ?1 AND op_depth = ?3
1086
AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1087
ORDER BY local_relpath
1000
1089
-- STMT_DOES_NODE_EXIST
1001
1090
SELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2
1377
1459
DELETE FROM revert_list WHERE local_relpath = ?1
1379
1461
-- STMT_SELECT_REVERT_LIST_RECURSIVE
1380
SELECT DISTINCT local_relpath
1382
WHERE (local_relpath = ?1
1383
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))
1384
AND (notify OR actual = 0)
1385
ORDER BY local_relpath
1462
SELECT p.local_relpath, n.kind, a.notify, a.kind
1463
FROM (SELECT DISTINCT local_relpath
1465
WHERE (local_relpath = ?1
1466
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))) p
1468
LEFT JOIN revert_list n ON n.local_relpath=p.local_relpath AND n.actual=0
1469
LEFT JOIN revert_list a ON a.local_relpath=p.local_relpath AND a.actual=1
1470
ORDER BY p.local_relpath
1387
1472
-- STMT_DELETE_REVERT_LIST_RECURSIVE
1388
1473
DELETE FROM revert_list
1404
1489
A subquery is used instead of nodes_current to avoid a table scan */
1405
1490
-- STMT_INSERT_DELETE_LIST
1406
1491
INSERT INTO delete_list(local_relpath)
1407
1494
SELECT local_relpath FROM nodes AS n
1408
1495
WHERE wc_id = ?1
1409
AND (local_relpath = ?2
1410
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1496
AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1411
1497
AND op_depth >= ?3
1412
1498
AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s
1413
1499
WHERE s.wc_id = ?1
1414
1500
AND s.local_relpath = n.local_relpath)
1415
1501
AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
1416
1502
AND file_external IS NULL
1503
ORDER by local_relpath
1418
1505
-- STMT_SELECT_DELETE_LIST
1419
1506
SELECT local_relpath FROM delete_list
1447
1534
-- STMT_FINALIZE_UPDATE_MOVE
1448
1535
DROP TABLE IF EXISTS update_move_list
1537
-- STMT_MOVE_NOTIFY_TO_REVERT
1538
INSERT INTO revert_list (local_relpath, notify, kind, actual)
1539
SELECT local_relpath, 2, kind, 1 FROM update_move_list;
1540
DROP TABLE update_move_list
1450
1542
/* ------------------------------------------------------------------------- */
1452
1544
/* Queries for revision status. */
1499
1591
AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath)
1502
SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n
1504
AND (local_relpath = ?2
1505
OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1508
AND presence=MAP_NORMAL
1509
AND file_external IS NULL
1511
1594
-- STMT_SELECT_MOVED_FROM_RELPATH
1512
1595
SELECT local_relpath, op_depth FROM nodes
1513
1596
WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
1571
1653
WHERE wc_id = ?1
1572
1654
AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1575
/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1,
1576
* where the source of the move is within the subtree rooted at path ?2, and
1577
* the destination of the move is outside the subtree rooted at path ?2. */
1578
SELECT local_relpath, moved_to, op_depth FROM nodes
1580
AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1581
AND moved_to IS NOT NULL
1582
AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1583
AND op_depth >= (SELECT MAX(op_depth) FROM nodes o
1585
AND o.local_relpath = ?2)
1587
1656
-- STMT_SELECT_MOVED_PAIR3
1588
SELECT local_relpath, moved_to, op_depth, kind FROM nodes
1589
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3
1590
AND moved_to IS NOT NULL
1657
SELECT n.local_relpath, d.moved_to, d.op_depth, n.kind
1659
JOIN nodes d ON d.wc_id = ?1 AND d.local_relpath = n.local_relpath
1660
AND d.op_depth = (SELECT MIN(dd.op_depth)
1663
AND dd.local_relpath = d.local_relpath
1664
AND dd.op_depth > ?3)
1665
WHERE n.wc_id = ?1 AND n.local_relpath = ?2 AND n.op_depth = ?3
1666
AND d.moved_to IS NOT NULL
1592
SELECT local_relpath, moved_to, op_depth, kind FROM nodes
1594
AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1596
AND moved_to IS NOT NULL
1597
ORDER BY local_relpath, op_depth
1668
SELECT n.local_relpath, d.moved_to, d.op_depth, n.kind
1670
JOIN nodes d ON d.wc_id = ?1 AND d.local_relpath = n.local_relpath
1671
AND d.op_depth = (SELECT MIN(dd.op_depth)
1674
AND dd.local_relpath = d.local_relpath
1675
AND dd.op_depth > ?3)
1676
WHERE n.wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
1678
AND d.moved_to IS NOT NULL
1679
ORDER BY n.local_relpath
1599
1681
-- STMT_SELECT_MOVED_OUTSIDE
1600
1682
SELECT local_relpath, moved_to, op_depth FROM nodes
1605
1686
AND moved_to IS NOT NULL
1606
1687
AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1608
SELECT n.local_relpath, n.moved_to,
1609
(SELECT o.repos_path FROM nodes AS o
1610
WHERE o.wc_id = n.wc_id
1611
AND o.local_relpath = n.local_relpath
1612
AND o.op_depth < ?3 ORDER BY o.op_depth DESC LIMIT 1)
1615
AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
1617
AND n.moved_to IS NOT NULL
1619
SELECT n.local_relpath, h.moved_to
1620
FROM nodes n, nodes h
1623
AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
1624
AND h.local_relpath = n.local_relpath
1626
AND h.op_depth = (SELECT MIN(o.op_depth)
1629
AND o.local_relpath = n.local_relpath
1630
AND o.op_depth > ?3)
1631
AND h.moved_to IS NOT NULL
1689
-- STMT_SELECT_MOVED_DESCENDANTS_SRC
1690
SELECT s.op_depth, n.local_relpath, n.kind, n.repos_path, s.moved_to
1692
JOIN nodes s ON s.wc_id = n.wc_id AND s.local_relpath = n.local_relpath
1693
AND s.op_depth = (SELECT MIN(d.op_depth)
1696
AND d.local_relpath = s.local_relpath
1697
AND d.op_depth > ?3)
1698
WHERE n.wc_id = ?1 AND n.op_depth = ?3
1699
AND (n.local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2))
1700
AND s.moved_to IS NOT NULL
1633
1702
-- STMT_COMMIT_UPDATE_ORIGIN
1634
/* Note that the only reason this SUBSTR() trick is valid is that you
1635
can move neither the working copy nor the repository root.
1637
SUBSTR(local_relpath, LENGTH(?2)+1) includes the '/' of the path */
1638
1703
UPDATE nodes SET repos_id = ?4,
1639
repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1),
1704
repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath),
1641
1706
WHERE wc_id = ?1
1642
1707
AND (local_relpath = ?2