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
1291 /* ------------------------------------------------------------------------- */
1293 /* these are used in entries.c */
1295 -- STMT_INSERT_ACTUAL_NODE
1296 INSERT OR REPLACE INTO actual_node (
1297 wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data)
1298 VALUES (?1, ?2, ?3, ?4, ?5, ?6)
1300 /* ------------------------------------------------------------------------- */
1302 /* these are used in upgrade.c */
1304 -- STMT_SELECT_ALL_FILES
1305 SELECT local_relpath FROM nodes_current
1306 WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE
1308 -- STMT_UPDATE_NODE_PROPS
1309 UPDATE nodes SET properties = ?4
1310 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1312 -- STMT_PRAGMA_TABLE_INFO_NODES
1313 PRAGMA table_info("NODES")
1315 /* --------------------------------------------------------------------------
1316 * Complex queries for callback walks, caching results in a temporary table.
1318 * These target table are then used for joins against NODES, or for reporting
1321 -- STMT_CREATE_TARGET_PROP_CACHE
1322 DROP TABLE IF EXISTS target_prop_cache;
1323 CREATE TEMPORARY TABLE target_prop_cache (
1324 local_relpath TEXT NOT NULL PRIMARY KEY,
1329 CREATE UNIQUE INDEX temp__node_props_cache_unique
1330 ON temp__node_props_cache (local_relpath) */
1332 -- STMT_CACHE_TARGET_PROPS
1333 INSERT INTO target_prop_cache(local_relpath, kind, properties)
1334 SELECT n.local_relpath, n.kind,
1335 IFNULL((SELECT properties FROM actual_node AS a
1336 WHERE a.wc_id = n.wc_id
1337 AND a.local_relpath = n.local_relpath),
1339 FROM targets_list AS t
1342 AND n.local_relpath = t.local_relpath
1343 AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3
1345 AND n3.local_relpath = t.local_relpath)
1347 AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE)
1348 ORDER BY t.local_relpath
1350 -- STMT_CACHE_TARGET_PRISTINE_PROPS
1351 INSERT INTO target_prop_cache(local_relpath, kind, properties)
1352 SELECT n.local_relpath, n.kind,
1354 WHEN MAP_BASE_DELETED
1355 THEN (SELECT properties FROM nodes AS p
1356 WHERE p.wc_id = n.wc_id
1357 AND p.local_relpath = n.local_relpath
1358 AND p.op_depth < n.op_depth
1359 ORDER BY p.op_depth DESC /* LIMIT 1 */)
1361 FROM targets_list AS t
1364 AND n.local_relpath = t.local_relpath
1365 AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3
1367 AND n3.local_relpath = t.local_relpath)
1369 AND (presence = MAP_NORMAL
1370 OR presence = MAP_INCOMPLETE
1371 OR presence = MAP_BASE_DELETED)
1372 ORDER BY t.local_relpath
1374 -- STMT_SELECT_ALL_TARGET_PROP_CACHE
1375 SELECT local_relpath, properties FROM target_prop_cache
1376 ORDER BY local_relpath
1378 -- STMT_DROP_TARGET_PROP_CACHE
1379 DROP TABLE target_prop_cache;
1381 -- STMT_CREATE_REVERT_LIST
1382 DROP TABLE IF EXISTS revert_list;
1383 CREATE TEMPORARY TABLE revert_list (
1384 /* need wc_id if/when revert spans multiple working copies */
1385 local_relpath TEXT NOT NULL,
1386 actual INTEGER NOT NULL, /* 1 if an actual row, 0 if a nodes row */
1388 notify INTEGER, /* 1 if an actual row had props or tree conflict */
1392 PRIMARY KEY (local_relpath, actual)
1394 DROP TRIGGER IF EXISTS trigger_revert_list_nodes;
1395 CREATE TEMPORARY TRIGGER trigger_revert_list_nodes
1396 BEFORE DELETE ON nodes
1398 INSERT OR REPLACE INTO revert_list(local_relpath, actual, op_depth,
1400 SELECT OLD.local_relpath, 0, OLD.op_depth, OLD.repos_id, OLD.kind;
1402 DROP TRIGGER IF EXISTS trigger_revert_list_actual_delete;
1403 CREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete
1404 BEFORE DELETE ON actual_node
1406 INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data,
1408 SELECT OLD.local_relpath, 1, OLD.conflict_data,
1410 WHEN OLD.properties IS NOT NULL
1412 WHEN NOT EXISTS(SELECT 1 FROM NODES n
1413 WHERE n.wc_id = OLD.wc_id
1414 AND n.local_relpath = OLD.local_relpath)
1417 WHERE OLD.conflict_data IS NOT NULL
1418 OR notify IS NOT NULL;
1420 DROP TRIGGER IF EXISTS trigger_revert_list_actual_update;
1421 CREATE TEMPORARY TRIGGER trigger_revert_list_actual_update
1422 BEFORE UPDATE ON actual_node
1424 INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data,
1426 SELECT OLD.local_relpath, 1, OLD.conflict_data,
1428 WHEN OLD.properties IS NOT NULL
1430 WHEN NOT EXISTS(SELECT 1 FROM NODES n
1431 WHERE n.wc_id = OLD.wc_id
1432 AND n.local_relpath = OLD.local_relpath)
1435 WHERE OLD.conflict_data IS NOT NULL
1436 OR notify IS NOT NULL;
1439 -- STMT_DROP_REVERT_LIST_TRIGGERS
1440 DROP TRIGGER trigger_revert_list_nodes;
1441 DROP TRIGGER trigger_revert_list_actual_delete;
1442 DROP TRIGGER trigger_revert_list_actual_update
1444 -- STMT_SELECT_REVERT_LIST
1445 SELECT actual, notify, kind, op_depth, repos_id, conflict_data
1447 WHERE local_relpath = ?1
1448 ORDER BY actual DESC
1450 -- STMT_SELECT_REVERT_LIST_COPIED_CHILDREN
1451 SELECT local_relpath, kind
1453 WHERE IS_STRICT_DESCENDANT_OF(local_relpath, ?1)
1455 AND repos_id IS NOT NULL
1456 ORDER BY local_relpath
1458 -- STMT_DELETE_REVERT_LIST
1459 DELETE FROM revert_list WHERE local_relpath = ?1
1461 -- STMT_SELECT_REVERT_LIST_RECURSIVE
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
1472 -- STMT_DELETE_REVERT_LIST_RECURSIVE
1473 DELETE FROM revert_list
1474 WHERE (local_relpath = ?1
1475 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))
1477 -- STMT_DROP_REVERT_LIST
1478 DROP TABLE IF EXISTS revert_list
1480 -- STMT_CREATE_DELETE_LIST
1481 DROP TABLE IF EXISTS delete_list;
1482 CREATE TEMPORARY TABLE delete_list (
1483 /* ### we should put the wc_id in here in case a delete spans multiple
1484 ### working copies. queries, etc will need to be adjusted. */
1485 local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE
1488 /* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE.
1489 A subquery is used instead of nodes_current to avoid a table scan */
1490 -- STMT_INSERT_DELETE_LIST
1491 INSERT INTO delete_list(local_relpath)
1494 SELECT local_relpath FROM nodes AS n
1496 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1498 AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s
1500 AND s.local_relpath = n.local_relpath)
1501 AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED)
1502 AND file_external IS NULL
1503 ORDER by local_relpath
1505 -- STMT_SELECT_DELETE_LIST
1506 SELECT local_relpath FROM delete_list
1507 ORDER BY local_relpath
1509 -- STMT_FINALIZE_DELETE
1510 DROP TABLE IF EXISTS delete_list
1512 -- STMT_CREATE_UPDATE_MOVE_LIST
1513 DROP TABLE IF EXISTS update_move_list;
1514 CREATE TEMPORARY TABLE update_move_list (
1515 /* ### we should put the wc_id in here in case a move update spans multiple
1516 ### working copies. queries, etc will need to be adjusted. */
1517 local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE,
1518 action INTEGER NOT NULL,
1520 content_state INTEGER NOT NULL,
1521 prop_state INTEGER NOT NULL
1524 -- STMT_INSERT_UPDATE_MOVE_LIST
1525 INSERT INTO update_move_list(local_relpath, action, kind, content_state,
1527 VALUES (?1, ?2, ?3, ?4, ?5)
1529 -- STMT_SELECT_UPDATE_MOVE_LIST
1530 SELECT local_relpath, action, kind, content_state, prop_state
1531 FROM update_move_list
1532 ORDER BY local_relpath
1534 -- STMT_FINALIZE_UPDATE_MOVE
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
1542 /* ------------------------------------------------------------------------- */
1544 /* Queries for revision status. */
1546 -- STMT_SELECT_MIN_MAX_REVISIONS
1547 SELECT MIN(revision), MAX(revision),
1548 MIN(changed_revision), MAX(changed_revision) FROM nodes
1550 AND (local_relpath = ?2
1551 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1552 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1553 AND file_external IS NULL
1556 -- STMT_HAS_SPARSE_NODES
1559 AND (local_relpath = ?2
1560 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1562 AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED)
1563 OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN))
1564 AND file_external IS NULL
1567 -- STMT_SUBTREE_HAS_TREE_MODIFICATIONS
1570 AND (local_relpath = ?2
1571 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1575 -- STMT_SUBTREE_HAS_PROP_MODIFICATIONS
1576 SELECT 1 FROM actual_node
1578 AND (local_relpath = ?2
1579 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1580 AND properties IS NOT NULL
1583 -- STMT_HAS_SWITCHED
1587 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1589 AND file_external IS NULL
1590 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)
1591 AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath)
1594 -- STMT_SELECT_MOVED_FROM_RELPATH
1595 SELECT local_relpath, op_depth FROM nodes
1596 WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
1598 -- STMT_UPDATE_MOVED_TO_RELPATH
1599 UPDATE nodes SET moved_to = ?4
1600 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1602 -- STMT_CLEAR_MOVED_TO_RELPATH
1603 UPDATE nodes SET moved_to = NULL
1604 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3
1606 -- STMT_CLEAR_MOVED_HERE_RECURSIVE
1607 UPDATE nodes SET moved_here = NULL
1609 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1612 /* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1.
1613 * Each row returns a moved-here path (always a child of ?2) in the first
1614 * column, and its matching moved-away (deleted) path in the second column. */
1615 -- STMT_SELECT_MOVED_HERE_CHILDREN
1616 SELECT moved_to, local_relpath FROM nodes
1617 WHERE wc_id = ?1 AND op_depth > 0
1618 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1620 /* If the node is moved here (r.moved_here = 1) we are really interested in
1621 where the node was moved from. To obtain that we need the op_depth, but
1622 this form of select only allows a single return value */
1623 -- STMT_SELECT_MOVED_FOR_DELETE
1624 SELECT local_relpath, moved_to, op_depth,
1625 (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
1627 AND r.local_relpath = n.local_relpath
1628 AND r.op_depth < n.op_depth
1629 ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
1632 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1633 AND moved_to IS NOT NULL
1636 -- STMT_SELECT_MOVED_FROM_FOR_DELETE
1637 SELECT local_relpath, op_depth,
1638 (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r
1640 AND r.local_relpath = n.local_relpath
1641 AND r.op_depth < n.op_depth
1642 ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth
1644 WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0
1646 -- STMT_UPDATE_MOVED_TO_DESCENDANTS
1647 UPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to)
1649 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1651 -- STMT_CLEAR_MOVED_TO_DESCENDANTS
1652 UPDATE nodes SET moved_to = NULL
1654 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2)
1656 -- STMT_SELECT_MOVED_PAIR3
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
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
1681 -- STMT_SELECT_MOVED_OUTSIDE
1682 SELECT local_relpath, moved_to, op_depth FROM nodes
1684 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1686 AND moved_to IS NOT NULL
1687 AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2)
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
1702 -- STMT_COMMIT_UPDATE_ORIGIN
1703 UPDATE nodes SET repos_id = ?4,
1704 repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath),
1707 AND (local_relpath = ?2
1708 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
1711 -- STMT_HAS_LAYER_BETWEEN
1713 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4
1715 -- STMT_SELECT_REPOS_PATH_REVISION
1716 SELECT local_relpath, repos_path, revision FROM nodes
1718 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1720 ORDER BY local_relpath
1722 -- STMT_SELECT_HAS_NON_FILE_CHILDREN
1724 WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3 AND kind != MAP_FILE
1727 -- STMT_SELECT_HAS_GRANDCHILDREN
1730 AND IS_STRICT_DESCENDANT_OF(parent_relpath, ?2)
1732 AND file_external IS NULL
1735 /* ------------------------------------------------------------------------- */
1737 /* Queries for verification. */
1739 -- STMT_SELECT_ALL_NODES
1740 SELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes
1743 /* ------------------------------------------------------------------------- */
1745 /* Queries for cached inherited properties. */
1747 /* Select the inherited properties of a single base node. */
1748 -- STMT_SELECT_IPROPS
1749 SELECT inherited_props FROM nodes
1751 AND local_relpath = ?2
1754 /* Update the inherited properties of a single base node. */
1755 -- STMT_UPDATE_IPROP
1757 SET inherited_props = ?3
1758 WHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0)
1760 /* Select a single path if its base node has cached inherited properties. */
1761 -- STMT_SELECT_IPROPS_NODE
1762 SELECT local_relpath, repos_path FROM nodes
1764 AND local_relpath = ?2
1766 AND (inherited_props not null)
1768 /* Select all paths whose base nodes are below a given path, which
1769 have cached inherited properties. */
1770 -- STMT_SELECT_IPROPS_RECURSIVE
1771 SELECT local_relpath, repos_path FROM nodes
1773 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)
1775 AND (inherited_props not null)
1777 -- STMT_SELECT_IPROPS_CHILDREN
1778 SELECT local_relpath, repos_path FROM nodes
1780 AND parent_relpath = ?2
1782 AND (inherited_props not null)
1784 -- STMT_HAVE_STAT1_TABLE
1785 SELECT 1 FROM sqlite_master WHERE name='sqlite_stat1' AND type='table'
1788 /* ------------------------------------------------------------------------- */
1790 /* Grab all the statements related to the schema. */
1792 -- include: wc-metadata
1793 -- include: wc-checks