1 /* wc-queries.sql -- queries used to interact with the wc-metadata
3 * This is intended for use with SQLite 3
5 * ====================================================================
6 * Licensed to the Apache Software Foundation (ASF) under one
7 * or more contributor license agreements. See the NOTICE file
8 * distributed with this work for additional information
9 * regarding copyright ownership. The ASF licenses this file
10 * to you under the Apache License, Version 2.0 (the
11 * "License"); you may not use this file except in compliance
12 * with the License. You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing,
17 * software distributed under the License is distributed on an
18 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19 * KIND, either express or implied. See the License for the
20 * specific language governing permissions and limitations
22 * ====================================================================
25 /* ------------------------------------------------------------------------- */
27 /* these are used in wc_db.c */
29 -- STMT_SELECT_NODE_INFO
30 SELECT op_depth, repos_id, repos_path, presence, kind, revision, checksum,
31 translated_size, changed_revision, changed_date, changed_author, depth,
32 symlink_target, last_mod_time, properties, moved_here, inherited_props,
35 WHERE wc_id = ?1 AND local_relpath = ?2
36 ORDER BY op_depth DESC
38 -- STMT_SELECT_NODE_INFO_WITH_LOCK
39 SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
40 checksum, translated_size, changed_revision, changed_date, changed_author,
41 depth, symlink_target, last_mod_time, properties, moved_here,
43 /* All the columns until now must match those returned by
44 STMT_SELECT_NODE_INFO. The implementation of svn_wc__db_read_info()
45 assumes that these columns are followed by the lock information) */
46 lock_token, lock_owner, lock_comment, lock_date
48 LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
49 AND nodes.repos_path = lock.repos_relpath
50 WHERE wc_id = ?1 AND local_relpath = ?2
51 ORDER BY op_depth DESC
53 -- STMT_SELECT_BASE_NODE
54 SELECT repos_id, repos_path, presence, kind, revision, checksum,
55 translated_size, changed_revision, changed_date, changed_author, depth,
56 symlink_target, last_mod_time, properties, file_external
58 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
60 -- STMT_SELECT_BASE_NODE_WITH_LOCK
61 SELECT nodes.repos_id, nodes.repos_path, presence, kind, revision,
62 checksum, translated_size, changed_revision, changed_date, changed_author,
63 depth, symlink_target, last_mod_time, properties, file_external,
64 /* All the columns until now must match those returned by
65 STMT_SELECT_BASE_NODE. The implementation of svn_wc__db_base_get_info()
66 assumes that these columns are followed by the lock information) */
67 lock_token, lock_owner, lock_comment, lock_date
69 LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
70 AND nodes.repos_path = lock.repos_relpath
71 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
73 -- STMT_SELECT_BASE_CHILDREN_INFO
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,
81 revision, depth, file_external,
82 lock_token, lock_owner, lock_comment, lock_date
84 LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
85 AND nodes.repos_path = lock.repos_relpath
86 WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0
89 -- STMT_SELECT_WORKING_NODE
90 SELECT op_depth, presence, kind, checksum, translated_size,
91 changed_revision, changed_date, changed_author, depth, symlink_target,
92 repos_id, repos_path, revision,
93 moved_here, moved_to, last_mod_time, properties
95 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0
96 ORDER BY op_depth DESC
99 -- STMT_SELECT_DEPTH_NODE
100 SELECT repos_id, repos_path, presence, kind, revision, checksum,
101 translated_size, changed_revision, changed_date, changed_author, depth,
102 symlink_target, properties, moved_to, moved_here
104 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
106 -- STMT_SELECT_LOWEST_WORKING_NODE
107 SELECT op_depth, presence, kind, moved_to
109 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3
113 -- STMT_SELECT_HIGHEST_WORKING_NODE
116 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth < ?3
117 ORDER BY op_depth DESC
120 -- STMT_SELECT_ACTUAL_NODE
121 SELECT changelist, properties, conflict_data
123 WHERE wc_id = ?1 AND local_relpath = ?2
125 -- STMT_SELECT_NODE_CHILDREN_INFO
126 /* Getting rows in an advantageous order using
127 ORDER BY local_relpath, op_depth DESC
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. */
131 SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
132 checksum, translated_size, changed_revision, changed_date, changed_author,
133 depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
134 lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external
136 LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
137 AND nodes.repos_path = lock.repos_relpath AND op_depth = 0
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
155 -- STMT_SELECT_NODE_CHILDREN_WALKER_INFO
156 SELECT local_relpath, op_depth, presence, kind
158 WHERE wc_id = ?1 AND parent_relpath = ?2
159 ORDER BY local_relpath
161 -- STMT_SELECT_ACTUAL_CHILDREN_INFO
162 SELECT local_relpath, changelist, properties, conflict_data
164 WHERE wc_id = ?1 AND parent_relpath = ?2
166 -- STMT_SELECT_REPOSITORY_BY_ID
167 SELECT root, uuid FROM repository WHERE id = ?1
169 -- STMT_SELECT_WCROOT_NULL
170 SELECT id FROM wcroot WHERE local_abspath IS NULL
172 -- STMT_SELECT_REPOSITORY
173 SELECT id FROM repository WHERE root = ?1
175 -- STMT_INSERT_REPOSITORY
176 INSERT INTO repository (root, uuid) VALUES (?1, ?2)
179 INSERT OR REPLACE INTO nodes (
180 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
181 revision, presence, depth, kind, changed_revision, changed_date,
182 changed_author, checksum, properties, translated_size, last_mod_time,
183 dav_cache, symlink_target, file_external, moved_to, moved_here,
185 VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14,
186 ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23)
188 -- STMT_SELECT_WORKING_PRESENT
189 SELECT local_relpath, kind, checksum, translated_size, last_mod_time
192 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
193 AND presence in (MAP_NORMAL, MAP_INCOMPLETE)
194 AND op_depth = (SELECT MAX(op_depth)
197 AND w.local_relpath = n.local_relpath)
198 ORDER BY local_relpath DESC
200 -- STMT_DELETE_NODE_RECURSIVE
203 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
208 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
210 -- STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE
211 /* The ACTUAL_NODE applies to BASE, unless there is in at least one op_depth
212 a WORKING node that could have a conflict */
213 DELETE FROM actual_node
214 WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
215 AND EXISTS(SELECT 1 FROM NODES b
217 AND b.local_relpath = actual_node.local_relpath
219 AND NOT EXISTS(SELECT 1 FROM NODES w
221 AND w.local_relpath = actual_node.local_relpath
223 AND presence in (MAP_NORMAL, MAP_INCOMPLETE, MAP_NOT_PRESENT))
225 -- STMT_DELETE_WORKING_BASE_DELETE
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
237 WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
238 AND presence = MAP_BASE_DELETED
240 AND op_depth = (SELECT MIN(op_depth) FROM nodes n
242 AND n.local_relpath = nodes.local_relpath
245 -- STMT_DELETE_WORKING_RECURSIVE
247 WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
250 -- STMT_DELETE_BASE_RECURSIVE
252 WHERE wc_id = ?1 AND (local_relpath = ?2
253 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
256 -- STMT_DELETE_WORKING_OP_DEPTH
259 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
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
282 SELECT local_relpath, kind
285 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
287 AND presence in (MAP_NORMAL, MAP_INCOMPLETE)
288 ORDER BY local_relpath DESC
290 -- STMT_COPY_NODE_MOVE
291 INSERT OR REPLACE INTO nodes (
292 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
293 revision, presence, depth, kind, changed_revision, changed_date,
294 changed_author, checksum, properties, translated_size, last_mod_time,
295 symlink_target, moved_here, moved_to )
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
326 -- STMT_SELECT_OP_DEPTH_CHILDREN
327 SELECT local_relpath, kind FROM nodes
329 AND parent_relpath = ?2
331 AND presence != MAP_BASE_DELETED
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
343 /* Used by non-recursive revert to detect higher level children, and
344 actual-only rows that would be left orphans, if the revert
346 -- STMT_SELECT_GE_OP_DEPTH_CHILDREN
348 WHERE wc_id = ?1 AND parent_relpath = ?2
349 AND (op_depth > ?3 OR (op_depth = ?3
350 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)))
352 SELECT 1 FROM ACTUAL_NODE a
353 WHERE wc_id = ?1 AND parent_relpath = ?2
354 AND NOT EXISTS (SELECT 1 FROM nodes n
355 WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath)
357 /* Delete the nodes shadowed by local_relpath. Not valid for the wc-root */
358 -- STMT_DELETE_SHADOWED_RECURSIVE
361 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
363 OR (op_depth = ?3 AND presence = MAP_BASE_DELETED))
365 -- STMT_CLEAR_MOVED_TO_FROM_DEST
366 UPDATE NODES SET moved_to = NULL
370 /* Get not-present descendants of a copied node. Not valid for the wc-root */
371 -- STMT_SELECT_NOT_PRESENT_DESCENDANTS
372 SELECT local_relpath FROM nodes
373 WHERE wc_id = ?1 AND op_depth = ?3
374 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
375 AND presence = MAP_NOT_PRESENT
377 -- STMT_COMMIT_DESCENDANTS_TO_BASE
378 UPDATE NODES SET op_depth = 0,
380 repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath),
385 presence = CASE presence
386 WHEN MAP_NORMAL THEN MAP_NORMAL
387 WHEN MAP_EXCLUDED THEN MAP_EXCLUDED
391 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
394 -- STMT_SELECT_NODE_CHILDREN
395 /* Return all paths that are children of the directory (?1, ?2) in any
396 op-depth, including children of any underlying, replaced directories. */
397 SELECT DISTINCT local_relpath FROM nodes
398 WHERE wc_id = ?1 AND parent_relpath = ?2
399 ORDER BY local_relpath
401 -- STMT_SELECT_WORKING_CHILDREN
402 /* Return all paths that are children of the working version of the
403 directory (?1, ?2). A given path is not included just because it is a
404 child of an underlying (replaced) directory, it has to be in the
405 working version of the directory. */
406 SELECT DISTINCT local_relpath FROM nodes
407 WHERE wc_id = ?1 AND parent_relpath = ?2
408 AND (op_depth > (SELECT MAX(op_depth) FROM nodes
409 WHERE wc_id = ?1 AND local_relpath = ?2)
411 (op_depth = (SELECT MAX(op_depth) FROM nodes
412 WHERE wc_id = ?1 AND local_relpath = ?2)
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
422 -- STMT_SELECT_NODE_PROPS
423 SELECT properties, presence FROM nodes
424 WHERE wc_id = ?1 AND local_relpath = ?2
425 ORDER BY op_depth DESC
427 -- STMT_SELECT_ACTUAL_PROPS
428 SELECT properties FROM actual_node
429 WHERE wc_id = ?1 AND local_relpath = ?2
431 -- STMT_UPDATE_ACTUAL_PROPS
432 UPDATE actual_node SET properties = ?3
433 WHERE wc_id = ?1 AND local_relpath = ?2
435 -- STMT_INSERT_ACTUAL_PROPS
436 INSERT INTO actual_node (wc_id, local_relpath, parent_relpath, properties)
437 VALUES (?1, ?2, ?3, ?4)
440 INSERT OR REPLACE INTO lock
441 (repos_id, repos_relpath, lock_token, lock_owner, lock_comment,
443 VALUES (?1, ?2, ?3, ?4, ?5, ?6)
445 /* Not valid for the working copy root */
446 -- STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE
447 SELECT nodes.repos_id, nodes.repos_path, lock_token
449 LEFT JOIN lock ON nodes.repos_id = lock.repos_id
450 AND nodes.repos_path = lock.repos_relpath
451 WHERE wc_id = ?1 AND op_depth = 0
452 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
454 -- STMT_INSERT_WCROOT
455 INSERT INTO wcroot (local_abspath)
458 -- STMT_UPDATE_BASE_NODE_DAV_CACHE
459 UPDATE nodes SET dav_cache = ?3
460 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
462 -- STMT_SELECT_BASE_DAV_CACHE
463 SELECT dav_cache FROM nodes
464 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
466 -- STMT_SELECT_DELETION_INFO
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
476 -- STMT_SELECT_MOVED_TO_NODE
477 SELECT op_depth, moved_to
479 WHERE wc_id = ?1 AND local_relpath = ?2 AND moved_to IS NOT NULL
480 ORDER BY op_depth DESC
482 -- STMT_SELECT_OP_DEPTH_MOVED_TO
483 SELECT op_depth, moved_to
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
492 -- STMT_SELECT_MOVED_TO
495 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
497 -- STMT_SELECT_MOVED_BACK
498 SELECT u.local_relpath,
499 u.presence, u.repos_id, u.repos_path, u.revision,
500 l.presence, l.repos_id, l.repos_path, l.revision,
501 u.moved_here, u.moved_to
503 LEFT OUTER JOIN nodes l ON l.wc_id = ?1
504 AND l.local_relpath = u.local_relpath
507 AND u.local_relpath = ?2
510 SELECT u.local_relpath,
511 u.presence, u.repos_id, u.repos_path, u.revision,
512 l.presence, l.repos_id, l.repos_path, l.revision,
515 LEFT OUTER JOIN nodes l ON l.wc_id=?1
516 AND l.local_relpath=u.local_relpath
519 AND IS_STRICT_DESCENDANT_OF(u.local_relpath, ?2)
524 WHERE repos_id = ?1 AND repos_relpath = ?2
526 -- STMT_DELETE_LOCK_RECURSIVELY
528 WHERE repos_id = ?1 AND (repos_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(repos_relpath, ?2))
530 -- STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE
531 UPDATE nodes SET dav_cache = NULL
532 WHERE dav_cache IS NOT NULL AND wc_id = ?1 AND op_depth = 0
533 AND (local_relpath = ?2
534 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
536 -- STMT_RECURSIVE_UPDATE_NODE_REPO
537 UPDATE nodes SET repos_id = ?4, dav_cache = NULL
538 /* ### The Sqlite optimizer needs help here ###
541 * AND (local_relpath = ?2
542 * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))*/
543 WHERE (wc_id = ?1 AND local_relpath = ?2 AND repos_id = ?3)
544 OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
548 -- STMT_UPDATE_LOCK_REPOS_ID
549 UPDATE lock SET repos_id = ?2
552 -- STMT_UPDATE_NODE_FILEINFO
553 UPDATE nodes SET translated_size = ?3, last_mod_time = ?4
554 WHERE wc_id = ?1 AND local_relpath = ?2
555 AND op_depth = (SELECT MAX(op_depth) FROM nodes
556 WHERE wc_id = ?1 AND local_relpath = ?2)
558 -- STMT_INSERT_ACTUAL_CONFLICT
559 INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath)
560 VALUES (?1, ?2, ?3, ?4)
562 -- STMT_UPDATE_ACTUAL_CONFLICT
563 UPDATE actual_node SET conflict_data = ?3
564 WHERE wc_id = ?1 AND local_relpath = ?2
566 -- STMT_UPDATE_ACTUAL_CHANGELISTS
567 UPDATE actual_node SET changelist = ?3
569 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
570 AND local_relpath = (SELECT local_relpath FROM targets_list AS t
572 AND t.local_relpath = actual_node.local_relpath
575 -- STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST
576 UPDATE actual_node SET changelist = NULL
577 WHERE wc_id = ?1 AND local_relpath = ?2
579 -- STMT_MARK_SKIPPED_CHANGELIST_DIRS
580 /* 7 corresponds to svn_wc_notify_skip */
581 INSERT INTO changelist_list (wc_id, local_relpath, notify, changelist)
582 SELECT wc_id, local_relpath, 7, ?3
585 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
588 -- STMT_RESET_ACTUAL_WITH_CHANGELIST
589 REPLACE INTO actual_node (
590 wc_id, local_relpath, parent_relpath, changelist)
591 VALUES (?1, ?2, ?3, ?4)
593 -- STMT_CREATE_CHANGELIST_LIST
594 DROP TABLE IF EXISTS changelist_list;
595 CREATE TEMPORARY TABLE changelist_list (
596 wc_id INTEGER NOT NULL,
597 local_relpath TEXT NOT NULL,
598 notify INTEGER NOT NULL,
599 changelist TEXT NOT NULL,
600 /* Order NOTIFY descending to make us show clears (27) before adds (26) */
601 PRIMARY KEY (wc_id, local_relpath, notify DESC)
604 /* Create notify items for when a node is removed from a changelist and
605 when a node is added to a changelist. Make sure nothing is notified
606 if there were no changes.
608 -- STMT_CREATE_CHANGELIST_TRIGGER
609 DROP TRIGGER IF EXISTS trigger_changelist_list_change;
610 CREATE TEMPORARY TRIGGER trigger_changelist_list_change
611 BEFORE UPDATE ON actual_node
612 WHEN old.changelist IS NOT new.changelist
614 /* 27 corresponds to svn_wc_notify_changelist_clear */
615 INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
616 SELECT old.wc_id, old.local_relpath, 27, old.changelist
617 WHERE old.changelist is NOT NULL;
619 /* 26 corresponds to svn_wc_notify_changelist_set */
620 INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
621 SELECT new.wc_id, new.local_relpath, 26, new.changelist
622 WHERE new.changelist IS NOT NULL;
625 -- STMT_FINALIZE_CHANGELIST
626 DROP TRIGGER trigger_changelist_list_change;
627 DROP TABLE changelist_list;
628 DROP TABLE targets_list
630 -- STMT_SELECT_CHANGELIST_LIST
631 SELECT wc_id, local_relpath, notify, changelist
633 ORDER BY wc_id, local_relpath ASC, notify DESC
635 -- STMT_CREATE_TARGETS_LIST
636 DROP TABLE IF EXISTS targets_list;
637 CREATE TEMPORARY TABLE targets_list (
638 wc_id INTEGER NOT NULL,
639 local_relpath TEXT NOT NULL,
642 PRIMARY KEY (wc_id, local_relpath)
644 /* need more indicies? */
646 -- STMT_DROP_TARGETS_LIST
647 DROP TABLE targets_list
649 -- STMT_INSERT_TARGET
650 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
651 SELECT wc_id, local_relpath, parent_relpath, kind
654 AND local_relpath = ?2
656 -- STMT_INSERT_TARGET_DEPTH_FILES
657 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
658 SELECT wc_id, local_relpath, parent_relpath, kind
661 AND parent_relpath = ?2
664 -- STMT_INSERT_TARGET_DEPTH_IMMEDIATES
665 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
666 SELECT wc_id, local_relpath, parent_relpath, kind
669 AND parent_relpath = ?2
671 -- STMT_INSERT_TARGET_DEPTH_INFINITY
672 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
673 SELECT wc_id, local_relpath, parent_relpath, kind
676 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
678 -- STMT_INSERT_TARGET_WITH_CHANGELIST
679 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
680 SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
681 FROM actual_node AS A JOIN nodes_current AS N
682 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
684 AND N.local_relpath = ?2
685 AND A.changelist = ?3
687 -- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES
688 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
689 SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
690 FROM actual_node AS A JOIN nodes_current AS N
691 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
693 AND N.parent_relpath = ?2
695 AND A.changelist = ?3
697 -- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES
698 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
699 SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
700 FROM actual_node AS A JOIN nodes_current AS N
701 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
703 AND N.parent_relpath = ?2
704 AND A.changelist = ?3
706 -- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY
707 INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind)
708 SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind
709 FROM actual_node AS A JOIN nodes_current AS N
710 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
712 AND IS_STRICT_DESCENDANT_OF(N.local_relpath, ?2)
713 AND A.changelist = ?3
715 /* Only used by commented dump_targets() in wc_db.c */
716 /*-- STMT_SELECT_TARGETS
717 SELECT local_relpath, parent_relpath from targets_list*/
719 -- STMT_INSERT_ACTUAL_EMPTIES
720 INSERT OR IGNORE INTO actual_node (
721 wc_id, local_relpath, parent_relpath)
722 SELECT wc_id, local_relpath, parent_relpath
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
732 -- STMT_DELETE_ACTUAL_EMPTY
733 DELETE FROM actual_node
734 WHERE wc_id = ?1 AND local_relpath = ?2
735 AND properties IS NULL
736 AND conflict_data IS NULL
737 AND changelist IS NULL
739 AND older_checksum IS NULL
740 AND right_checksum IS NULL
741 AND left_checksum IS NULL
743 -- STMT_DELETE_ACTUAL_EMPTIES
744 DELETE FROM actual_node
746 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
747 AND properties IS NULL
748 AND conflict_data IS NULL
749 AND changelist IS NULL
751 AND older_checksum IS NULL
752 AND right_checksum IS NULL
753 AND left_checksum IS NULL
755 -- STMT_DELETE_BASE_NODE
757 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
759 -- STMT_DELETE_WORKING_NODE
761 WHERE wc_id = ?1 AND local_relpath = ?2
762 AND op_depth = (SELECT MAX(op_depth) FROM nodes
763 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0)
765 -- STMT_DELETE_LOWEST_WORKING_NODE
767 WHERE wc_id = ?1 AND local_relpath = ?2
768 AND op_depth = (SELECT MIN(op_depth) FROM nodes
769 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3)
770 AND presence = MAP_BASE_DELETED
772 -- STMT_DELETE_NODE_ALL_LAYERS
774 WHERE wc_id = ?1 AND local_relpath = ?2
776 -- STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE
779 AND (local_relpath = ?2
780 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
783 -- STMT_DELETE_ACTUAL_NODE
784 DELETE FROM actual_node
785 WHERE wc_id = ?1 AND local_relpath = ?2
787 /* Will not delete recursive when run on the wcroot */
788 -- STMT_DELETE_ACTUAL_NODE_RECURSIVE
789 DELETE FROM actual_node
791 AND (local_relpath = ?2
792 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
794 -- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST
795 DELETE FROM actual_node
797 AND local_relpath = ?2
798 AND (changelist IS NULL
799 OR NOT EXISTS (SELECT 1 FROM nodes_current c
800 WHERE c.wc_id = ?1 AND c.local_relpath = ?2
801 AND c.kind = MAP_FILE))
803 -- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE
804 DELETE FROM actual_node
806 AND (local_relpath = ?2
807 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
808 AND (changelist IS NULL
809 OR NOT EXISTS (SELECT 1 FROM nodes_current c
811 AND c.local_relpath = actual_node.local_relpath
812 AND c.kind = MAP_FILE))
814 -- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST
816 SET properties = NULL,
818 conflict_data = NULL,
819 tree_conflict_data = NULL,
820 older_checksum = NULL,
821 left_checksum = NULL,
822 right_checksum = NULL
823 WHERE wc_id = ?1 AND local_relpath = ?2
825 -- STMT_CLEAR_ACTUAL_NODE_LEAVING_CONFLICT
827 SET properties = NULL,
829 tree_conflict_data = NULL,
830 older_checksum = NULL,
831 left_checksum = NULL,
832 right_checksum = NULL,
834 WHERE wc_id = ?1 AND local_relpath = ?2
836 -- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE
838 SET properties = NULL,
840 conflict_data = NULL,
841 tree_conflict_data = NULL,
842 older_checksum = NULL,
843 left_checksum = NULL,
844 right_checksum = NULL
846 AND (local_relpath = ?2
847 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
849 -- STMT_UPDATE_NODE_BASE_DEPTH
850 UPDATE nodes SET depth = ?3
851 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
853 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
855 -- STMT_UPDATE_NODE_BASE_PRESENCE
856 UPDATE nodes SET presence = ?3
857 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
859 -- STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH
860 UPDATE nodes SET presence = ?3, revision = ?4, repos_path = ?5
861 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
863 -- STMT_LOOK_FOR_WORK
864 SELECT id FROM work_queue LIMIT 1
866 -- STMT_INSERT_WORK_ITEM
867 INSERT INTO work_queue (work) VALUES (?1)
869 -- STMT_SELECT_WORK_ITEM
870 SELECT id, work FROM work_queue ORDER BY id LIMIT 1
872 -- STMT_DELETE_WORK_ITEM
873 DELETE FROM work_queue WHERE id = ?1
875 -- STMT_INSERT_OR_IGNORE_PRISTINE
876 INSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount)
877 VALUES (?1, ?2, ?3, 0)
879 -- STMT_INSERT_PRISTINE
880 INSERT INTO pristine (checksum, md5_checksum, size, refcount)
881 VALUES (?1, ?2, ?3, 0)
883 -- STMT_SELECT_PRISTINE
888 -- STMT_SELECT_PRISTINE_SIZE
891 WHERE checksum = ?1 LIMIT 1
893 -- STMT_SELECT_PRISTINE_BY_MD5
896 WHERE md5_checksum = ?1
898 -- STMT_SELECT_UNREFERENCED_PRISTINES
903 -- STMT_DELETE_PRISTINE_IF_UNREFERENCED
905 WHERE checksum = ?1 AND refcount = 0
907 -- STMT_SELECT_COPY_PRISTINES
908 /* For the root itself */
909 SELECT n.checksum, md5_checksum, size
911 LEFT JOIN pristine p ON n.checksum = p.checksum
913 AND n.local_relpath = ?2
914 AND n.checksum IS NOT NULL
916 /* And all descendants */
917 SELECT n.checksum, md5_checksum, size
919 LEFT JOIN pristine p ON n.checksum = p.checksum
921 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
923 (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2)
924 AND n.checksum IS NOT NULL
929 -- STMT_SELECT_CONFLICT_VICTIMS
930 SELECT local_relpath, conflict_data
932 WHERE wc_id = ?1 AND parent_relpath = ?2 AND
933 NOT (conflict_data IS NULL)
935 -- STMT_INSERT_WC_LOCK
936 INSERT INTO wc_lock (wc_id, local_dir_relpath, locked_levels)
939 -- STMT_SELECT_WC_LOCK
940 SELECT locked_levels FROM wc_lock
941 WHERE wc_id = ?1 AND local_dir_relpath = ?2
943 -- STMT_SELECT_ANCESTOR_WCLOCKS
944 SELECT local_dir_relpath, locked_levels FROM wc_lock
946 AND ((local_dir_relpath >= ?3 AND local_dir_relpath <= ?2)
947 OR local_dir_relpath = '')
949 -- STMT_DELETE_WC_LOCK
951 WHERE wc_id = ?1 AND local_dir_relpath = ?2
954 SELECT local_dir_relpath FROM wc_lock
956 AND IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2)
958 -- STMT_FIND_CONFLICT_DESCENDANT
959 SELECT 1 FROM actual_node
961 AND local_relpath > (?2 || '/')
962 AND local_relpath < (?2 || '0') /* '0' = ascii('/') +1 */
963 AND conflict_data IS NOT NULL
966 -- STMT_DELETE_WC_LOCK_ORPHAN
968 WHERE wc_id = ?1 AND local_dir_relpath = ?2
969 AND NOT EXISTS (SELECT 1 FROM nodes
970 WHERE nodes.wc_id = ?1
971 AND nodes.local_relpath = wc_lock.local_dir_relpath)
973 -- STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE
976 AND (local_dir_relpath = ?2
977 OR IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2))
978 AND NOT EXISTS (SELECT 1 FROM nodes
979 WHERE nodes.wc_id = ?1
980 AND nodes.local_relpath = wc_lock.local_dir_relpath)
982 -- STMT_APPLY_CHANGES_TO_BASE_NODE
983 /* translated_size and last_mod_time are not mentioned here because they will
984 be tweaked after the working-file is installed. When we replace an existing
985 BASE node (read: bump), preserve its file_external status. */
986 INSERT OR REPLACE INTO nodes (
987 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
988 revision, presence, depth, kind, changed_revision, changed_date,
989 changed_author, checksum, properties, dav_cache, symlink_target,
990 inherited_props, file_external )
992 ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17,
993 (SELECT file_external FROM nodes
995 AND local_relpath = ?2
998 -- STMT_INSTALL_WORKING_NODE_FOR_DELETE
1000 wc_id, local_relpath, op_depth,
1001 parent_relpath, presence, kind)
1002 VALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5)
1004 -- STMT_REPLACE_WITH_BASE_DELETED
1005 INSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath,
1006 kind, moved_to, presence)
1007 SELECT wc_id, local_relpath, op_depth, parent_relpath,
1008 kind, moved_to, MAP_BASE_DELETED
1011 AND local_relpath = ?2
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 */
1016 -- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE
1018 wc_id, local_relpath, op_depth, parent_relpath, presence, kind)
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,
1028 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1030 AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
1031 AND file_external IS NULL
1032 ORDER BY local_relpath
1034 -- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY
1035 INSERT OR REPLACE INTO nodes (
1036 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
1037 revision, presence, depth, kind, changed_revision, changed_date,
1038 changed_author, checksum, properties, translated_size, last_mod_time,
1039 symlink_target, moved_to )
1040 SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id,
1041 repos_path, revision, presence, depth, kind, changed_revision,
1042 changed_date, changed_author, checksum, properties, translated_size,
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
1047 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
1049 -- STMT_INSERT_DELETE_FROM_BASE
1051 wc_id, local_relpath, op_depth, parent_relpath, presence, kind)
1052 SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath,
1053 MAP_BASE_DELETED, kind
1055 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
1057 /* Not valid on the wc-root */
1058 -- STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE
1059 UPDATE nodes SET op_depth = ?3 + 1
1061 AND 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
1089 -- STMT_DOES_NODE_EXIST
1090 SELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2
1093 -- STMT_HAS_SERVER_EXCLUDED_DESCENDANTS
1094 SELECT local_relpath FROM nodes
1096 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1097 AND op_depth = 0 AND presence = MAP_SERVER_EXCLUDED
1100 /* Select all excluded nodes. Not valid on the WC-root */
1101 -- STMT_SELECT_ALL_EXCLUDED_DESCENDANTS
1102 SELECT local_relpath FROM nodes
1104 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1106 AND (presence = MAP_SERVER_EXCLUDED OR presence = MAP_EXCLUDED)
1108 /* Creates a copy from one top level NODE to a different location */
1109 -- STMT_INSERT_WORKING_NODE_COPY_FROM
1110 INSERT OR REPLACE INTO nodes (
1111 wc_id, local_relpath, op_depth, parent_relpath, repos_id,
1112 repos_path, revision, presence, depth, moved_here, kind, changed_revision,
1113 changed_date, changed_author, checksum, properties, translated_size,
1114 last_mod_time, symlink_target, moved_to )
1115 SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
1116 repos_id, repos_path, revision, ?6 /*presence*/, depth,
1117 ?7/*moved_here*/, kind, changed_revision, changed_date,
1118 changed_author, checksum, properties, translated_size,
1119 last_mod_time, symlink_target,
1120 (SELECT dst.moved_to FROM nodes AS dst
1121 WHERE dst.wc_id = ?1
1122 AND dst.local_relpath = ?3
1123 AND dst.op_depth = ?4)
1125 WHERE wc_id = ?1 AND local_relpath = ?2
1127 -- STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH
1128 INSERT OR REPLACE INTO nodes (
1129 wc_id, local_relpath, op_depth, parent_relpath, repos_id,
1130 repos_path, revision, presence, depth, moved_here, kind, changed_revision,
1131 changed_date, changed_author, checksum, properties, translated_size,
1132 last_mod_time, symlink_target, moved_to )
1133 SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
1134 repos_id, repos_path, revision, ?6 /*presence*/, depth,
1135 ?8 /*moved_here*/, kind, changed_revision, changed_date,
1136 changed_author, checksum, properties, translated_size,
1137 last_mod_time, symlink_target,
1138 (SELECT dst.moved_to FROM nodes AS dst
1139 WHERE dst.wc_id = ?1
1140 AND dst.local_relpath = ?3
1141 AND dst.op_depth = ?4)
1143 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?7
1145 -- STMT_UPDATE_BASE_REVISION
1146 UPDATE nodes SET revision = ?3
1147 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
1149 -- STMT_UPDATE_BASE_REPOS
1150 UPDATE nodes SET repos_id = ?3, repos_path = ?4
1151 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
1153 -- STMT_ACTUAL_HAS_CHILDREN
1154 SELECT 1 FROM actual_node
1155 WHERE wc_id = ?1 AND parent_relpath = ?2
1158 -- STMT_INSERT_EXTERNAL
1159 INSERT OR REPLACE INTO externals (
1160 wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath,
1161 repos_id, def_repos_relpath, def_operational_revision, def_revision)
1162 VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)
1164 -- STMT_SELECT_EXTERNAL_INFO
1165 SELECT presence, kind, def_local_relpath, repos_id,
1166 def_repos_relpath, def_operational_revision, def_revision
1167 FROM externals WHERE wc_id = ?1 AND local_relpath = ?2
1170 -- STMT_DELETE_FILE_EXTERNALS
1173 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1175 AND file_external IS NOT NULL
1177 -- STMT_DELETE_FILE_EXTERNAL_REGISTATIONS
1178 DELETE FROM externals
1180 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1183 -- STMT_DELETE_EXTERNAL_REGISTATIONS
1184 DELETE FROM externals
1186 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1188 /* Select all committable externals, i.e. only unpegged ones on the same
1189 * repository as the target path ?2, that are defined by WC ?1 to
1190 * live below the target path. It does not matter which ancestor has the
1191 * svn:externals definition, only the local path at which the external is
1192 * supposed to be checked out is queried.
1195 * ?2: the target path, local relpath inside ?1.
1197 * ### NOTE: This statement deliberately removes file externals that live
1198 * inside an unversioned dir, because commit still breaks on those.
1199 * Once that's been fixed, the conditions below "--->8---" become obsolete. */
1200 -- STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW
1201 SELECT local_relpath, kind, def_repos_relpath,
1202 (SELECT root FROM repository AS r WHERE r.id = e.repos_id)
1205 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1206 AND def_revision IS NULL
1207 AND repos_id = (SELECT repos_id
1210 AND n.local_relpath = ''
1213 OR EXISTS (SELECT 1 FROM nodes
1214 WHERE nodes.wc_id = e.wc_id
1215 AND nodes.local_relpath = e.parent_relpath))
1217 -- STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW
1218 SELECT local_relpath, kind, def_repos_relpath,
1219 (SELECT root FROM repository AS r WHERE r.id = e.repos_id)
1222 AND IS_STRICT_DESCENDANT_OF(e.local_relpath, ?2)
1223 AND parent_relpath = ?2
1224 AND def_revision IS NULL
1225 AND repos_id = (SELECT repos_id
1228 AND n.local_relpath = ''
1231 OR EXISTS (SELECT 1 FROM nodes
1232 WHERE nodes.wc_id = e.wc_id
1233 AND nodes.local_relpath = e.parent_relpath))
1235 -- STMT_SELECT_EXTERNALS_DEFINED
1236 SELECT local_relpath, def_local_relpath
1238 /* ### The Sqlite optimizer needs help here ###
1240 * AND (def_local_relpath = ?2
1241 * OR IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) */
1242 WHERE (wc_id = ?1 AND def_local_relpath = ?2)
1243 OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2))
1245 -- STMT_DELETE_EXTERNAL
1246 DELETE FROM externals
1247 WHERE wc_id = ?1 AND local_relpath = ?2
1249 -- STMT_SELECT_EXTERNAL_PROPERTIES
1250 /* ### It would be nice if Sqlite would handle
1251 * SELECT IFNULL((SELECT properties FROM actual_node a
1252 * WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
1254 * local_relpath, depth
1255 * FROM nodes_current n
1257 * AND (local_relpath = ?2
1258 * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1259 * AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1260 * ### But it would take a double table scan execution plan for it.
1261 * ### Maybe there is something else going on? */
1262 SELECT IFNULL((SELECT properties FROM actual_node a
1263 WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
1265 local_relpath, depth
1266 FROM nodes_current n
1267 WHERE wc_id = ?1 AND local_relpath = ?2
1268 AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1270 SELECT IFNULL((SELECT properties FROM actual_node a
1271 WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
1273 local_relpath, depth
1274 FROM nodes_current n
1275 WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1276 AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1278 -- STMT_SELECT_CURRENT_PROPS_RECURSIVE
1279 /* ### Ugly OR to make sqlite use the proper optimizations */
1280 SELECT IFNULL((SELECT properties FROM actual_node a
1281 WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath),
1284 FROM nodes_current n
1285 WHERE (wc_id = ?1 AND local_relpath = ?2)
1286 OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1288 -- STMT_PRAGMA_LOCKING_MODE
1289 PRAGMA locking_mode = exclusive;
1290 /* Testing shows DELETE is faster than TRUNCATE on NFS and
1291 exclusive-locking is mostly used on remote file systems. */
1292 PRAGMA journal_mode = DELETE
1294 /* ------------------------------------------------------------------------- */
1296 /* these are used in entries.c */
1298 -- STMT_INSERT_ACTUAL_NODE
1299 INSERT OR REPLACE INTO actual_node (
1300 wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data)
1301 VALUES (?1, ?2, ?3, ?4, ?5, ?6)
1303 /* ------------------------------------------------------------------------- */
1305 /* these are used in upgrade.c */
1307 -- STMT_SELECT_ALL_FILES
1308 SELECT local_relpath FROM nodes_current
1309 WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE
1311 -- STMT_UPDATE_NODE_PROPS
1312 UPDATE nodes SET properties = ?4
1313 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1315 -- STMT_PRAGMA_TABLE_INFO_NODES
1316 PRAGMA table_info("NODES")
1318 /* --------------------------------------------------------------------------
1319 * Complex queries for callback walks, caching results in a temporary table.
1321 * These target table are then used for joins against NODES, or for reporting
1324 -- STMT_CREATE_TARGET_PROP_CACHE
1325 DROP TABLE IF EXISTS target_prop_cache;
1326 CREATE TEMPORARY TABLE target_prop_cache (
1327 local_relpath TEXT NOT NULL PRIMARY KEY,
1332 CREATE UNIQUE INDEX temp__node_props_cache_unique
1333 ON temp__node_props_cache (local_relpath) */
1335 -- STMT_CACHE_TARGET_PROPS
1336 INSERT INTO target_prop_cache(local_relpath, kind, properties)
1337 SELECT n.local_relpath, n.kind,
1338 IFNULL((SELECT properties FROM actual_node AS a
1339 WHERE a.wc_id = n.wc_id
1340 AND a.local_relpath = n.local_relpath),
1342 FROM targets_list AS t
1345 AND n.local_relpath = t.local_relpath
1346 AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3
1348 AND n3.local_relpath = t.local_relpath)
1350 AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE)
1351 ORDER BY t.local_relpath
1353 -- STMT_CACHE_TARGET_PRISTINE_PROPS
1354 INSERT INTO target_prop_cache(local_relpath, kind, properties)
1355 SELECT n.local_relpath, n.kind,
1357 WHEN MAP_BASE_DELETED
1358 THEN (SELECT properties FROM nodes AS p
1359 WHERE p.wc_id = n.wc_id
1360 AND p.local_relpath = n.local_relpath
1361 AND p.op_depth < n.op_depth
1362 ORDER BY p.op_depth DESC /* LIMIT 1 */)
1364 FROM targets_list AS t
1367 AND n.local_relpath = t.local_relpath
1368 AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3
1370 AND n3.local_relpath = t.local_relpath)
1372 AND (presence = MAP_NORMAL
1373 OR presence = MAP_INCOMPLETE
1374 OR presence = MAP_BASE_DELETED)
1375 ORDER BY t.local_relpath
1377 -- STMT_SELECT_ALL_TARGET_PROP_CACHE
1378 SELECT local_relpath, properties FROM target_prop_cache
1379 ORDER BY local_relpath
1381 -- STMT_DROP_TARGET_PROP_CACHE
1382 DROP TABLE target_prop_cache;
1384 -- STMT_CREATE_REVERT_LIST
1385 DROP TABLE IF EXISTS revert_list;
1386 CREATE TEMPORARY TABLE revert_list (
1387 /* need wc_id if/when revert spans multiple working copies */
1388 local_relpath TEXT NOT NULL,
1389 actual INTEGER NOT NULL, /* 1 if an actual row, 0 if a nodes row */
1391 notify INTEGER, /* 1 if an actual row had props or tree conflict */
1395 PRIMARY KEY (local_relpath, actual)
1397 DROP TRIGGER IF EXISTS trigger_revert_list_nodes;
1398 CREATE TEMPORARY TRIGGER trigger_revert_list_nodes
1399 BEFORE DELETE ON nodes
1401 INSERT OR REPLACE INTO revert_list(local_relpath, actual, op_depth,
1403 SELECT OLD.local_relpath, 0, OLD.op_depth, OLD.repos_id, OLD.kind;
1405 DROP TRIGGER IF EXISTS trigger_revert_list_actual_delete;
1406 CREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete
1407 BEFORE DELETE ON actual_node
1409 INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data,
1411 SELECT OLD.local_relpath, 1, OLD.conflict_data,
1413 WHEN OLD.properties IS NOT NULL
1415 WHEN NOT EXISTS(SELECT 1 FROM NODES n
1416 WHERE n.wc_id = OLD.wc_id
1417 AND n.local_relpath = OLD.local_relpath)
1420 WHERE OLD.conflict_data IS NOT NULL
1421 OR notify IS NOT NULL;
1423 DROP TRIGGER IF EXISTS trigger_revert_list_actual_update;
1424 CREATE TEMPORARY TRIGGER trigger_revert_list_actual_update
1425 BEFORE UPDATE ON actual_node
1427 INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data,
1429 SELECT OLD.local_relpath, 1, OLD.conflict_data,
1431 WHEN OLD.properties IS NOT NULL
1433 WHEN NOT EXISTS(SELECT 1 FROM NODES n
1434 WHERE n.wc_id = OLD.wc_id
1435 AND n.local_relpath = OLD.local_relpath)
1438 WHERE OLD.conflict_data IS NOT NULL
1439 OR notify IS NOT NULL;
1442 -- STMT_DROP_REVERT_LIST_TRIGGERS
1443 DROP TRIGGER trigger_revert_list_nodes;
1444 DROP TRIGGER trigger_revert_list_actual_delete;
1445 DROP TRIGGER trigger_revert_list_actual_update
1447 -- STMT_SELECT_REVERT_LIST
1448 SELECT actual, notify, kind, op_depth, repos_id, conflict_data
1450 WHERE local_relpath = ?1
1451 ORDER BY actual DESC
1453 -- STMT_SELECT_REVERT_LIST_COPIED_CHILDREN
1454 SELECT local_relpath, kind
1456 WHERE IS_STRICT_DESCENDANT_OF(local_relpath, ?1)
1458 AND repos_id IS NOT NULL
1459 ORDER BY local_relpath
1461 -- STMT_DELETE_REVERT_LIST
1462 DELETE FROM revert_list WHERE local_relpath = ?1
1464 -- STMT_SELECT_REVERT_LIST_RECURSIVE
1465 SELECT p.local_relpath, n.kind, a.notify, a.kind
1466 FROM (SELECT DISTINCT local_relpath
1468 WHERE (local_relpath = ?1
1469 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))) p
1471 LEFT JOIN revert_list n ON n.local_relpath=p.local_relpath AND n.actual=0
1472 LEFT JOIN revert_list a ON a.local_relpath=p.local_relpath AND a.actual=1
1473 ORDER BY p.local_relpath
1475 -- STMT_DELETE_REVERT_LIST_RECURSIVE
1476 DELETE FROM revert_list
1477 WHERE (local_relpath = ?1
1478 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))
1480 -- STMT_DROP_REVERT_LIST
1481 DROP TABLE IF EXISTS revert_list
1483 -- STMT_CREATE_DELETE_LIST
1484 DROP TABLE IF EXISTS delete_list;
1485 CREATE TEMPORARY TABLE delete_list (
1486 /* ### we should put the wc_id in here in case a delete spans multiple
1487 ### working copies. queries, etc will need to be adjusted. */
1488 local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE
1491 /* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE.
1492 A subquery is used instead of nodes_current to avoid a table scan */
1493 -- STMT_INSERT_DELETE_LIST
1494 INSERT INTO delete_list(local_relpath)
1497 SELECT local_relpath FROM nodes AS n
1499 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1501 AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s
1503 AND s.local_relpath = n.local_relpath)
1504 AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
1505 AND file_external IS NULL
1506 ORDER by local_relpath
1508 -- STMT_SELECT_DELETE_LIST
1509 SELECT local_relpath FROM delete_list
1510 ORDER BY local_relpath
1512 -- STMT_FINALIZE_DELETE
1513 DROP TABLE IF EXISTS delete_list
1515 -- STMT_CREATE_UPDATE_MOVE_LIST
1516 DROP TABLE IF EXISTS update_move_list;
1517 CREATE TEMPORARY TABLE update_move_list (
1518 /* ### we should put the wc_id in here in case a move update spans multiple
1519 ### working copies. queries, etc will need to be adjusted. */
1520 local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE,
1521 action INTEGER NOT NULL,
1523 content_state INTEGER NOT NULL,
1524 prop_state INTEGER NOT NULL
1527 -- STMT_INSERT_UPDATE_MOVE_LIST
1528 INSERT INTO update_move_list(local_relpath, action, kind, content_state,
1530 VALUES (?1, ?2, ?3, ?4, ?5)
1532 -- STMT_SELECT_UPDATE_MOVE_LIST
1533 SELECT local_relpath, action, kind, content_state, prop_state
1534 FROM update_move_list
1535 ORDER BY local_relpath
1537 -- STMT_FINALIZE_UPDATE_MOVE
1538 DROP TABLE IF EXISTS update_move_list
1540 -- STMT_MOVE_NOTIFY_TO_REVERT
1541 INSERT INTO revert_list (local_relpath, notify, kind, actual)
1542 SELECT local_relpath, 2, kind, 1 FROM update_move_list;
1543 DROP TABLE update_move_list
1545 /* ------------------------------------------------------------------------- */
1547 /* Queries for revision status. */
1549 -- STMT_SELECT_MIN_MAX_REVISIONS
1550 SELECT MIN(revision), MAX(revision),
1551 MIN(changed_revision), MAX(changed_revision) FROM nodes
1553 AND (local_relpath = ?2
1554 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1555 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1556 AND file_external IS NULL
1559 -- STMT_HAS_SPARSE_NODES
1562 AND (local_relpath = ?2
1563 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1565 AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED)
1566 OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN))
1567 AND file_external IS NULL
1570 -- STMT_SUBTREE_HAS_TREE_MODIFICATIONS
1573 AND (local_relpath = ?2
1574 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1578 -- STMT_SUBTREE_HAS_PROP_MODIFICATIONS
1579 SELECT 1 FROM actual_node
1581 AND (local_relpath = ?2
1582 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1583 AND properties IS NOT NULL
1586 -- STMT_HAS_SWITCHED
1590 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1592 AND file_external IS NULL
1593 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1594 AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath)
1597 -- STMT_SELECT_MOVED_FROM_RELPATH
1598 SELECT local_relpath, op_depth FROM nodes
1599 WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
1601 -- STMT_UPDATE_MOVED_TO_RELPATH
1602 UPDATE nodes SET moved_to = ?4
1603 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1605 -- STMT_CLEAR_MOVED_TO_RELPATH
1606 UPDATE nodes SET moved_to = NULL
1607 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1609 -- STMT_CLEAR_MOVED_HERE_RECURSIVE
1610 UPDATE nodes SET moved_here = NULL
1612 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1615 /* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1.
1616 * Each row returns a moved-here path (always a child of ?2) in the first
1617 * column, and its matching moved-away (deleted) path in the second column. */
1618 -- STMT_SELECT_MOVED_HERE_CHILDREN
1619 SELECT moved_to, local_relpath FROM nodes
1620 WHERE wc_id = ?1 AND op_depth > 0
1621 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1623 /* If the node is moved here (r.moved_here = 1) we are really interested in
1624 where the node was moved from. To obtain that we need the op_depth, but
1625 this form of select only allows a single return value */
1626 -- STMT_SELECT_MOVED_FOR_DELETE
1627 SELECT local_relpath, moved_to, op_depth,
1628 (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
1630 AND r.local_relpath = n.local_relpath
1631 AND r.op_depth < n.op_depth
1632 ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
1635 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1636 AND moved_to IS NOT NULL
1639 -- STMT_SELECT_MOVED_FROM_FOR_DELETE
1640 SELECT local_relpath, op_depth,
1641 (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
1643 AND r.local_relpath = n.local_relpath
1644 AND r.op_depth < n.op_depth
1645 ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
1647 WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
1649 -- STMT_UPDATE_MOVED_TO_DESCENDANTS
1650 UPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to)
1652 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1654 -- STMT_CLEAR_MOVED_TO_DESCENDANTS
1655 UPDATE nodes SET moved_to = NULL
1657 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1659 -- STMT_SELECT_MOVED_PAIR3
1660 SELECT n.local_relpath, d.moved_to, d.op_depth, n.kind
1662 JOIN nodes d ON d.wc_id = ?1 AND d.local_relpath = n.local_relpath
1663 AND d.op_depth = (SELECT MIN(dd.op_depth)
1666 AND dd.local_relpath = d.local_relpath
1667 AND dd.op_depth > ?3)
1668 WHERE n.wc_id = ?1 AND n.local_relpath = ?2 AND n.op_depth = ?3
1669 AND d.moved_to IS NOT NULL
1671 SELECT n.local_relpath, d.moved_to, d.op_depth, n.kind
1673 JOIN nodes d ON d.wc_id = ?1 AND d.local_relpath = n.local_relpath
1674 AND d.op_depth = (SELECT MIN(dd.op_depth)
1677 AND dd.local_relpath = d.local_relpath
1678 AND dd.op_depth > ?3)
1679 WHERE n.wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)
1681 AND d.moved_to IS NOT NULL
1682 ORDER BY n.local_relpath
1684 -- STMT_SELECT_MOVED_OUTSIDE
1685 SELECT local_relpath, moved_to, op_depth FROM nodes
1687 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1689 AND moved_to IS NOT NULL
1690 AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1692 -- STMT_SELECT_MOVED_DESCENDANTS_SRC
1693 SELECT s.op_depth, n.local_relpath, n.kind, n.repos_path, s.moved_to
1695 JOIN nodes s ON s.wc_id = n.wc_id AND s.local_relpath = n.local_relpath
1696 AND s.op_depth = (SELECT MIN(d.op_depth)
1699 AND d.local_relpath = s.local_relpath
1700 AND d.op_depth > ?3)
1701 WHERE n.wc_id = ?1 AND n.op_depth = ?3
1702 AND (n.local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2))
1703 AND s.moved_to IS NOT NULL
1705 -- STMT_COMMIT_UPDATE_ORIGIN
1706 UPDATE nodes SET repos_id = ?4,
1707 repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath),
1710 AND (local_relpath = ?2
1711 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1714 -- STMT_HAS_LAYER_BETWEEN
1716 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4
1718 -- STMT_SELECT_REPOS_PATH_REVISION
1719 SELECT local_relpath, repos_path, revision FROM nodes
1721 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1723 ORDER BY local_relpath
1725 -- STMT_SELECT_HAS_NON_FILE_CHILDREN
1727 WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3 AND kind != MAP_FILE
1730 -- STMT_SELECT_HAS_GRANDCHILDREN
1733 AND IS_STRICT_DESCENDANT_OF(parent_relpath, ?2)
1735 AND file_external IS NULL
1738 /* ------------------------------------------------------------------------- */
1740 /* Queries for verification. */
1742 -- STMT_SELECT_ALL_NODES
1743 SELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes
1746 /* ------------------------------------------------------------------------- */
1748 /* Queries for cached inherited properties. */
1750 /* Select the inherited properties of a single base node. */
1751 -- STMT_SELECT_IPROPS
1752 SELECT inherited_props FROM nodes
1754 AND local_relpath = ?2
1757 /* Update the inherited properties of a single base node. */
1758 -- STMT_UPDATE_IPROP
1760 SET inherited_props = ?3
1761 WHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0)
1763 /* Select a single path if its base node has cached inherited properties. */
1764 -- STMT_SELECT_IPROPS_NODE
1765 SELECT local_relpath, repos_path FROM nodes
1767 AND local_relpath = ?2
1769 AND (inherited_props not null)
1771 /* Select all paths whose base nodes are below a given path, which
1772 have cached inherited properties. */
1773 -- STMT_SELECT_IPROPS_RECURSIVE
1774 SELECT local_relpath, repos_path FROM nodes
1776 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1778 AND (inherited_props not null)
1780 -- STMT_SELECT_IPROPS_CHILDREN
1781 SELECT local_relpath, repos_path FROM nodes
1783 AND parent_relpath = ?2
1785 AND (inherited_props not null)
1787 -- STMT_HAVE_STAT1_TABLE
1788 SELECT 1 FROM sqlite_master WHERE name='sqlite_stat1' AND type='table'
1791 /* ------------------------------------------------------------------------- */
1793 /* Grab all the statements related to the schema. */
1795 -- include: wc-metadata
1796 -- include: wc-checks