wc-queries.sql revision 269847
1/* wc-queries.sql -- queries used to interact with the wc-metadata 2 * SQLite database 3 * This is intended for use with SQLite 3 4 * 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 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 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 21 * under the License. 22 * ==================================================================== 23 */ 24 25/* ------------------------------------------------------------------------- */ 26 27/* these are used in wc_db.c */ 28 29-- STMT_SELECT_NODE_INFO 30SELECT 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, 33 moved_to 34FROM nodes 35WHERE wc_id = ?1 AND local_relpath = ?2 36ORDER BY op_depth DESC 37 38-- STMT_SELECT_NODE_INFO_WITH_LOCK 39SELECT 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, 42 inherited_props, 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 47FROM nodes 48LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 49 AND nodes.repos_path = lock.repos_relpath 50WHERE wc_id = ?1 AND local_relpath = ?2 51ORDER BY op_depth DESC 52 53-- STMT_SELECT_BASE_NODE 54SELECT 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 57FROM nodes 58WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 59 60-- STMT_SELECT_BASE_NODE_WITH_LOCK 61SELECT 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 68FROM nodes 69LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 70 AND nodes.repos_path = lock.repos_relpath 71WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 72 73-- STMT_SELECT_BASE_CHILDREN_INFO 74SELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind, 75 revision, depth, file_external, 76 lock_token, lock_owner, lock_comment, lock_date 77FROM nodes 78LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 79 AND nodes.repos_path = lock.repos_relpath 80WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 81 82-- STMT_SELECT_WORKING_NODE 83SELECT op_depth, presence, kind, checksum, translated_size, 84 changed_revision, changed_date, changed_author, depth, symlink_target, 85 repos_id, repos_path, revision, 86 moved_here, moved_to, last_mod_time, properties 87FROM nodes 88WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0 89ORDER BY op_depth DESC 90LIMIT 1 91 92-- STMT_SELECT_DEPTH_NODE 93SELECT repos_id, repos_path, presence, kind, revision, checksum, 94 translated_size, changed_revision, changed_date, changed_author, depth, 95 symlink_target, last_mod_time, properties 96FROM nodes 97WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 98 99-- STMT_SELECT_LOWEST_WORKING_NODE 100SELECT op_depth, presence, kind, moved_to 101FROM nodes 102WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 103ORDER BY op_depth 104LIMIT 1 105 106-- STMT_SELECT_HIGHEST_WORKING_NODE 107SELECT op_depth 108FROM nodes 109WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth < ?3 110ORDER BY op_depth DESC 111LIMIT 1 112 113-- STMT_SELECT_ACTUAL_NODE 114SELECT changelist, properties, conflict_data 115FROM actual_node 116WHERE wc_id = ?1 AND local_relpath = ?2 117 118-- STMT_SELECT_NODE_CHILDREN_INFO 119/* Getting rows in an advantageous order using 120 ORDER BY local_relpath, op_depth DESC 121 turns out to be slower than getting rows in a random order and making the 122 C code handle it. */ 123SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, 124 checksum, translated_size, changed_revision, changed_date, changed_author, 125 depth, symlink_target, last_mod_time, properties, lock_token, lock_owner, 126 lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external 127FROM nodes 128LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 129 AND nodes.repos_path = lock.repos_relpath AND op_depth = 0 130WHERE wc_id = ?1 AND parent_relpath = ?2 131 132-- STMT_SELECT_NODE_CHILDREN_WALKER_INFO 133SELECT local_relpath, op_depth, presence, kind 134FROM nodes_current 135WHERE wc_id = ?1 AND parent_relpath = ?2 136 137-- STMT_SELECT_ACTUAL_CHILDREN_INFO 138SELECT local_relpath, changelist, properties, conflict_data 139FROM actual_node 140WHERE wc_id = ?1 AND parent_relpath = ?2 141 142-- STMT_SELECT_REPOSITORY_BY_ID 143SELECT root, uuid FROM repository WHERE id = ?1 144 145-- STMT_SELECT_WCROOT_NULL 146SELECT id FROM wcroot WHERE local_abspath IS NULL 147 148-- STMT_SELECT_REPOSITORY 149SELECT id FROM repository WHERE root = ?1 150 151-- STMT_INSERT_REPOSITORY 152INSERT INTO repository (root, uuid) VALUES (?1, ?2) 153 154-- STMT_INSERT_NODE 155INSERT OR REPLACE INTO nodes ( 156 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 157 revision, presence, depth, kind, changed_revision, changed_date, 158 changed_author, checksum, properties, translated_size, last_mod_time, 159 dav_cache, symlink_target, file_external, moved_to, moved_here, 160 inherited_props) 161VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, 162 ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23) 163 164-- STMT_SELECT_BASE_PRESENT 165SELECT local_relpath, kind FROM nodes n 166WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 167 AND op_depth = 0 168 AND presence in (MAP_NORMAL, MAP_INCOMPLETE) 169 AND NOT EXISTS(SELECT 1 FROM NODES w 170 WHERE w.wc_id = ?1 AND w.local_relpath = n.local_relpath 171 AND op_depth > 0) 172ORDER BY local_relpath DESC 173 174-- STMT_SELECT_WORKING_PRESENT 175SELECT local_relpath, kind, checksum, translated_size, last_mod_time 176FROM nodes n 177WHERE wc_id = ?1 178 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 179 AND presence in (MAP_NORMAL, MAP_INCOMPLETE) 180 AND op_depth = (SELECT MAX(op_depth) 181 FROM NODES w 182 WHERE w.wc_id = ?1 183 AND w.local_relpath = n.local_relpath) 184ORDER BY local_relpath DESC 185 186-- STMT_DELETE_NODE_RECURSIVE 187DELETE FROM NODES 188WHERE wc_id = ?1 189 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 190 191-- STMT_DELETE_NODE 192DELETE 193FROM NODES 194WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 195 196-- STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE 197/* The ACTUAL_NODE applies to BASE, unless there is in at least one op_depth 198 a WORKING node that could have a conflict */ 199DELETE FROM actual_node 200WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 201 AND EXISTS(SELECT 1 FROM NODES b 202 WHERE b.wc_id = ?1 203 AND b.local_relpath = actual_node.local_relpath 204 AND op_depth = 0) 205 AND NOT EXISTS(SELECT 1 FROM NODES w 206 WHERE w.wc_id = ?1 207 AND w.local_relpath = actual_node.local_relpath 208 AND op_depth > 0 209 AND presence in (MAP_NORMAL, MAP_INCOMPLETE, MAP_NOT_PRESENT)) 210 211-- STMT_DELETE_WORKING_BASE_DELETE 212DELETE FROM nodes 213WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 214 AND presence = MAP_BASE_DELETED 215 AND op_depth > 0 216 AND op_depth = (SELECT MIN(op_depth) FROM nodes n 217 WHERE n.wc_id = ?1 218 AND n.local_relpath = nodes.local_relpath 219 AND op_depth > 0) 220 221-- STMT_DELETE_WORKING_RECURSIVE 222DELETE FROM nodes 223WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 224 AND op_depth > 0 225 226-- STMT_DELETE_BASE_RECURSIVE 227DELETE FROM nodes 228WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 229 AND op_depth = 0 230 231-- STMT_DELETE_WORKING_OP_DEPTH 232DELETE FROM nodes 233WHERE wc_id = ?1 234 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 235 AND op_depth = ?3 236 237-- STMT_DELETE_WORKING_OP_DEPTH_ABOVE 238DELETE FROM nodes 239WHERE wc_id = ?1 240 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 241 AND op_depth > ?3 242 243-- STMT_SELECT_LOCAL_RELPATH_OP_DEPTH 244SELECT local_relpath 245FROM nodes 246WHERE wc_id = ?1 247 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 248 AND op_depth = ?3 249 250-- STMT_SELECT_CHILDREN_OP_DEPTH 251SELECT local_relpath, kind 252FROM nodes 253WHERE wc_id = ?1 254 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 255 AND op_depth = ?3 256ORDER BY local_relpath DESC 257 258-- STMT_COPY_NODE_MOVE 259INSERT OR REPLACE INTO nodes ( 260 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 261 revision, presence, depth, kind, changed_revision, changed_date, 262 changed_author, checksum, properties, translated_size, last_mod_time, 263 symlink_target, moved_here, moved_to ) 264SELECT 265 wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* parent_relpath */, 266 repos_id, 267 repos_path, revision, presence, depth, kind, changed_revision, 268 changed_date, changed_author, checksum, properties, translated_size, 269 last_mod_time, symlink_target, 1, 270 (SELECT dst.moved_to FROM nodes AS dst 271 WHERE dst.wc_id = ?1 272 AND dst.local_relpath = ?4 273 AND dst.op_depth = ?5) 274FROM nodes 275WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 276 277-- STMT_SELECT_OP_DEPTH_CHILDREN 278SELECT local_relpath, kind FROM nodes 279WHERE wc_id = ?1 280 AND parent_relpath = ?2 281 AND op_depth = ?3 282 AND presence != MAP_BASE_DELETED 283 AND file_external is NULL 284 285/* Used by non-recursive revert to detect higher level children, and 286 actual-only rows that would be left orphans, if the revert 287 proceeded. */ 288-- STMT_SELECT_GE_OP_DEPTH_CHILDREN 289SELECT 1 FROM nodes 290WHERE wc_id = ?1 AND parent_relpath = ?2 291 AND (op_depth > ?3 OR (op_depth = ?3 AND presence != MAP_BASE_DELETED)) 292UNION ALL 293SELECT 1 FROM ACTUAL_NODE a 294WHERE wc_id = ?1 AND parent_relpath = ?2 295 AND NOT EXISTS (SELECT 1 FROM nodes n 296 WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath) 297 298/* Delete the nodes shadowed by local_relpath. Not valid for the wc-root */ 299-- STMT_DELETE_SHADOWED_RECURSIVE 300DELETE FROM nodes 301WHERE wc_id = ?1 302 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 303 AND (op_depth < ?3 304 OR (op_depth = ?3 AND presence = MAP_BASE_DELETED)) 305 306-- STMT_CLEAR_MOVED_TO_FROM_DEST 307UPDATE NODES SET moved_to = NULL 308WHERE wc_id = ?1 309 AND moved_to = ?2 310 311/* Get not-present descendants of a copied node. Not valid for the wc-root */ 312-- STMT_SELECT_NOT_PRESENT_DESCENDANTS 313SELECT local_relpath FROM nodes 314WHERE wc_id = ?1 AND op_depth = ?3 315 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 316 AND presence = MAP_NOT_PRESENT 317 318-- STMT_COMMIT_DESCENDANTS_TO_BASE 319UPDATE NODES SET op_depth = 0, 320 repos_id = ?4, 321 repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1), 322 revision = ?6, 323 dav_cache = NULL, 324 moved_here = NULL, 325 presence = CASE presence 326 WHEN MAP_NORMAL THEN MAP_NORMAL 327 WHEN MAP_EXCLUDED THEN MAP_EXCLUDED 328 ELSE MAP_NOT_PRESENT 329 END 330WHERE wc_id = ?1 331 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 332 AND op_depth = ?3 333 334-- STMT_SELECT_NODE_CHILDREN 335/* Return all paths that are children of the directory (?1, ?2) in any 336 op-depth, including children of any underlying, replaced directories. */ 337SELECT local_relpath FROM nodes 338WHERE wc_id = ?1 AND parent_relpath = ?2 339 340-- STMT_SELECT_WORKING_CHILDREN 341/* Return all paths that are children of the working version of the 342 directory (?1, ?2). A given path is not included just because it is a 343 child of an underlying (replaced) directory, it has to be in the 344 working version of the directory. */ 345SELECT local_relpath FROM nodes 346WHERE wc_id = ?1 AND parent_relpath = ?2 347 AND (op_depth > (SELECT MAX(op_depth) FROM nodes 348 WHERE wc_id = ?1 AND local_relpath = ?2) 349 OR 350 (op_depth = (SELECT MAX(op_depth) FROM nodes 351 WHERE wc_id = ?1 AND local_relpath = ?2) 352 AND presence != MAP_BASE_DELETED)) 353 354-- STMT_SELECT_NODE_PROPS 355SELECT properties, presence FROM nodes 356WHERE wc_id = ?1 AND local_relpath = ?2 357ORDER BY op_depth DESC 358 359-- STMT_SELECT_ACTUAL_PROPS 360SELECT properties FROM actual_node 361WHERE wc_id = ?1 AND local_relpath = ?2 362 363-- STMT_UPDATE_ACTUAL_PROPS 364UPDATE actual_node SET properties = ?3 365WHERE wc_id = ?1 AND local_relpath = ?2 366 367-- STMT_INSERT_ACTUAL_PROPS 368INSERT INTO actual_node (wc_id, local_relpath, parent_relpath, properties) 369VALUES (?1, ?2, ?3, ?4) 370 371-- STMT_INSERT_LOCK 372INSERT OR REPLACE INTO lock 373(repos_id, repos_relpath, lock_token, lock_owner, lock_comment, 374 lock_date) 375VALUES (?1, ?2, ?3, ?4, ?5, ?6) 376 377/* Not valid for the working copy root */ 378-- STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE 379SELECT nodes.repos_id, nodes.repos_path, lock_token 380FROM nodes 381LEFT JOIN lock ON nodes.repos_id = lock.repos_id 382 AND nodes.repos_path = lock.repos_relpath 383WHERE wc_id = ?1 AND op_depth = 0 384 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 385 386-- STMT_INSERT_WCROOT 387INSERT INTO wcroot (local_abspath) 388VALUES (?1) 389 390-- STMT_UPDATE_BASE_NODE_DAV_CACHE 391UPDATE nodes SET dav_cache = ?3 392WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 393 394-- STMT_SELECT_BASE_DAV_CACHE 395SELECT dav_cache FROM nodes 396WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 397 398-- STMT_SELECT_DELETION_INFO 399SELECT (SELECT b.presence FROM nodes AS b 400 WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), 401 work.presence, work.op_depth 402FROM nodes_current AS work 403WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 404LIMIT 1 405 406-- STMT_SELECT_DELETION_INFO_SCAN 407/* ### FIXME. moved.moved_to IS NOT NULL works when there is 408 only one move but we need something else when there are several. */ 409SELECT (SELECT b.presence FROM nodes AS b 410 WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), 411 work.presence, work.op_depth, moved.moved_to 412FROM nodes_current AS work 413LEFT OUTER JOIN nodes AS moved 414 ON moved.wc_id = work.wc_id 415 AND moved.local_relpath = work.local_relpath 416 AND moved.moved_to IS NOT NULL 417WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 418LIMIT 1 419 420-- STMT_SELECT_MOVED_TO_NODE 421SELECT op_depth, moved_to 422FROM nodes 423WHERE wc_id = ?1 AND local_relpath = ?2 AND moved_to IS NOT NULL 424ORDER BY op_depth DESC 425 426-- STMT_SELECT_OP_DEPTH_MOVED_TO 427SELECT op_depth, moved_to, repos_path, revision 428FROM nodes 429WHERE wc_id = ?1 AND local_relpath = ?2 430 AND op_depth <= (SELECT MIN(op_depth) FROM nodes 431 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) 432ORDER BY op_depth DESC 433 434-- STMT_SELECT_MOVED_TO 435SELECT moved_to 436FROM nodes 437WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 438 439-- STMT_SELECT_MOVED_HERE 440SELECT moved_here, presence, repos_path, revision 441FROM nodes 442WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth >= ?3 443ORDER BY op_depth 444 445-- STMT_SELECT_MOVED_BACK 446SELECT u.local_relpath, 447 u.presence, u.repos_id, u.repos_path, u.revision, 448 l.presence, l.repos_id, l.repos_path, l.revision, 449 u.moved_here, u.moved_to 450FROM nodes u 451LEFT OUTER JOIN nodes l ON l.wc_id = ?1 452 AND l.local_relpath = u.local_relpath 453 AND l.op_depth = ?3 454WHERE u.wc_id = ?1 455 AND u.local_relpath = ?2 456 AND u.op_depth = ?4 457UNION ALL 458SELECT u.local_relpath, 459 u.presence, u.repos_id, u.repos_path, u.revision, 460 l.presence, l.repos_id, l.repos_path, l.revision, 461 u.moved_here, NULL 462FROM nodes u 463LEFT OUTER JOIN nodes l ON l.wc_id=?1 464 AND l.local_relpath=u.local_relpath 465 AND l.op_depth=?3 466WHERE u.wc_id = ?1 467 AND IS_STRICT_DESCENDANT_OF(u.local_relpath, ?2) 468 AND u.op_depth = ?4 469 470-- STMT_DELETE_MOVED_BACK 471DELETE FROM nodes 472WHERE wc_id = ?1 473 AND (local_relpath = ?2 474 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 475 AND op_depth = ?3 476 477-- STMT_DELETE_LOCK 478DELETE FROM lock 479WHERE repos_id = ?1 AND repos_relpath = ?2 480 481-- STMT_DELETE_LOCK_RECURSIVELY 482DELETE FROM lock 483WHERE repos_id = ?1 AND (repos_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(repos_relpath, ?2)) 484 485-- STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE 486UPDATE nodes SET dav_cache = NULL 487WHERE dav_cache IS NOT NULL AND wc_id = ?1 AND op_depth = 0 488 AND (local_relpath = ?2 489 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 490 491-- STMT_RECURSIVE_UPDATE_NODE_REPO 492UPDATE nodes SET repos_id = ?4, dav_cache = NULL 493/* ### The Sqlite optimizer needs help here ### 494 * WHERE wc_id = ?1 495 * AND repos_id = ?3 496 * AND (local_relpath = ?2 497 * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))*/ 498WHERE (wc_id = ?1 AND local_relpath = ?2 AND repos_id = ?3) 499 OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 500 AND repos_id = ?3) 501 502 503-- STMT_UPDATE_LOCK_REPOS_ID 504UPDATE lock SET repos_id = ?2 505WHERE repos_id = ?1 506 507-- STMT_UPDATE_NODE_FILEINFO 508UPDATE nodes SET translated_size = ?3, last_mod_time = ?4 509WHERE wc_id = ?1 AND local_relpath = ?2 510 AND op_depth = (SELECT MAX(op_depth) FROM nodes 511 WHERE wc_id = ?1 AND local_relpath = ?2) 512 513-- STMT_INSERT_ACTUAL_CONFLICT 514INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) 515VALUES (?1, ?2, ?3, ?4) 516 517-- STMT_UPDATE_ACTUAL_CONFLICT 518UPDATE actual_node SET conflict_data = ?3 519WHERE wc_id = ?1 AND local_relpath = ?2 520 521-- STMT_UPDATE_ACTUAL_CHANGELISTS 522UPDATE actual_node SET changelist = ?3 523WHERE wc_id = ?1 524 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 525 AND local_relpath = (SELECT local_relpath FROM targets_list AS t 526 WHERE wc_id = ?1 527 AND t.local_relpath = actual_node.local_relpath 528 AND kind = MAP_FILE) 529 530-- STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST 531UPDATE actual_node SET changelist = NULL 532 WHERE wc_id = ?1 AND local_relpath = ?2 533 534-- STMT_MARK_SKIPPED_CHANGELIST_DIRS 535/* 7 corresponds to svn_wc_notify_skip */ 536INSERT INTO changelist_list (wc_id, local_relpath, notify, changelist) 537SELECT wc_id, local_relpath, 7, ?3 538FROM targets_list 539WHERE wc_id = ?1 540 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 541 AND kind = MAP_DIR 542 543-- STMT_RESET_ACTUAL_WITH_CHANGELIST 544REPLACE INTO actual_node ( 545 wc_id, local_relpath, parent_relpath, changelist) 546VALUES (?1, ?2, ?3, ?4) 547 548-- STMT_CREATE_CHANGELIST_LIST 549DROP TABLE IF EXISTS changelist_list; 550CREATE TEMPORARY TABLE changelist_list ( 551 wc_id INTEGER NOT NULL, 552 local_relpath TEXT NOT NULL, 553 notify INTEGER NOT NULL, 554 changelist TEXT NOT NULL, 555 /* Order NOTIFY descending to make us show clears (27) before adds (26) */ 556 PRIMARY KEY (wc_id, local_relpath, notify DESC) 557) 558 559/* Create notify items for when a node is removed from a changelist and 560 when a node is added to a changelist. Make sure nothing is notified 561 if there were no changes. 562*/ 563-- STMT_CREATE_CHANGELIST_TRIGGER 564DROP TRIGGER IF EXISTS trigger_changelist_list_change; 565CREATE TEMPORARY TRIGGER trigger_changelist_list_change 566BEFORE UPDATE ON actual_node 567WHEN old.changelist IS NOT new.changelist 568BEGIN 569 /* 27 corresponds to svn_wc_notify_changelist_clear */ 570 INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) 571 SELECT old.wc_id, old.local_relpath, 27, old.changelist 572 WHERE old.changelist is NOT NULL; 573 574 /* 26 corresponds to svn_wc_notify_changelist_set */ 575 INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) 576 SELECT new.wc_id, new.local_relpath, 26, new.changelist 577 WHERE new.changelist IS NOT NULL; 578END 579 580-- STMT_FINALIZE_CHANGELIST 581DROP TRIGGER trigger_changelist_list_change; 582DROP TABLE changelist_list; 583DROP TABLE targets_list 584 585-- STMT_SELECT_CHANGELIST_LIST 586SELECT wc_id, local_relpath, notify, changelist 587FROM changelist_list 588ORDER BY wc_id, local_relpath ASC, notify DESC 589 590-- STMT_CREATE_TARGETS_LIST 591DROP TABLE IF EXISTS targets_list; 592CREATE TEMPORARY TABLE targets_list ( 593 wc_id INTEGER NOT NULL, 594 local_relpath TEXT NOT NULL, 595 parent_relpath TEXT, 596 kind TEXT NOT NULL, 597 PRIMARY KEY (wc_id, local_relpath) 598 ); 599/* need more indicies? */ 600 601-- STMT_DROP_TARGETS_LIST 602DROP TABLE targets_list 603 604-- STMT_INSERT_TARGET 605INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 606SELECT wc_id, local_relpath, parent_relpath, kind 607FROM nodes_current 608WHERE wc_id = ?1 609 AND local_relpath = ?2 610 611-- STMT_INSERT_TARGET_DEPTH_FILES 612INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 613SELECT wc_id, local_relpath, parent_relpath, kind 614FROM nodes_current 615WHERE wc_id = ?1 616 AND parent_relpath = ?2 617 AND kind = MAP_FILE 618 619-- STMT_INSERT_TARGET_DEPTH_IMMEDIATES 620INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 621SELECT wc_id, local_relpath, parent_relpath, kind 622FROM nodes_current 623WHERE wc_id = ?1 624 AND parent_relpath = ?2 625 626-- STMT_INSERT_TARGET_DEPTH_INFINITY 627INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 628SELECT wc_id, local_relpath, parent_relpath, kind 629FROM nodes_current 630WHERE wc_id = ?1 631 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 632 633-- STMT_INSERT_TARGET_WITH_CHANGELIST 634INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 635SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 636 FROM actual_node AS A JOIN nodes_current AS N 637 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 638 WHERE N.wc_id = ?1 639 AND N.local_relpath = ?2 640 AND A.changelist = ?3 641 642-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES 643INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 644SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 645 FROM actual_node AS A JOIN nodes_current AS N 646 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 647 WHERE N.wc_id = ?1 648 AND N.parent_relpath = ?2 649 AND kind = MAP_FILE 650 AND A.changelist = ?3 651 652-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES 653INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 654SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 655 FROM actual_node AS A JOIN nodes_current AS N 656 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 657 WHERE N.wc_id = ?1 658 AND N.parent_relpath = ?2 659 AND A.changelist = ?3 660 661-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY 662INSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 663SELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 664 FROM actual_node AS A JOIN nodes_current AS N 665 ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 666 WHERE N.wc_id = ?1 667 AND IS_STRICT_DESCENDANT_OF(N.local_relpath, ?2) 668 AND A.changelist = ?3 669 670/* Only used by commented dump_targets() in wc_db.c */ 671/*-- STMT_SELECT_TARGETS 672SELECT local_relpath, parent_relpath from targets_list*/ 673 674-- STMT_INSERT_ACTUAL_EMPTIES 675INSERT OR IGNORE INTO actual_node ( 676 wc_id, local_relpath, parent_relpath) 677SELECT wc_id, local_relpath, parent_relpath 678FROM targets_list 679 680-- STMT_DELETE_ACTUAL_EMPTY 681DELETE FROM actual_node 682WHERE wc_id = ?1 AND local_relpath = ?2 683 AND properties IS NULL 684 AND conflict_data IS NULL 685 AND changelist IS NULL 686 AND text_mod IS NULL 687 AND older_checksum IS NULL 688 AND right_checksum IS NULL 689 AND left_checksum IS NULL 690 691-- STMT_DELETE_ACTUAL_EMPTIES 692DELETE FROM actual_node 693WHERE wc_id = ?1 694 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 695 AND properties IS NULL 696 AND conflict_data IS NULL 697 AND changelist IS NULL 698 AND text_mod IS NULL 699 AND older_checksum IS NULL 700 AND right_checksum IS NULL 701 AND left_checksum IS NULL 702 703-- STMT_DELETE_BASE_NODE 704DELETE FROM nodes 705WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 706 707-- STMT_DELETE_WORKING_NODE 708DELETE FROM nodes 709WHERE wc_id = ?1 AND local_relpath = ?2 710 AND op_depth = (SELECT MAX(op_depth) FROM nodes 711 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0) 712 713-- STMT_DELETE_LOWEST_WORKING_NODE 714DELETE FROM nodes 715WHERE wc_id = ?1 AND local_relpath = ?2 716 AND op_depth = (SELECT MIN(op_depth) FROM nodes 717 WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) 718 AND presence = MAP_BASE_DELETED 719 720-- STMT_DELETE_NODE_ALL_LAYERS 721DELETE FROM nodes 722WHERE wc_id = ?1 AND local_relpath = ?2 723 724-- STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE 725DELETE FROM nodes 726WHERE wc_id = ?1 727 AND (local_relpath = ?2 728 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 729 AND op_depth >= ?3 730 731-- STMT_DELETE_ACTUAL_NODE 732DELETE FROM actual_node 733WHERE wc_id = ?1 AND local_relpath = ?2 734 735/* Will not delete recursive when run on the wcroot */ 736-- STMT_DELETE_ACTUAL_NODE_RECURSIVE 737DELETE FROM actual_node 738WHERE wc_id = ?1 739 AND (local_relpath = ?2 740 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 741 742-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST 743DELETE FROM actual_node 744WHERE wc_id = ?1 745 AND local_relpath = ?2 746 AND (changelist IS NULL 747 OR NOT EXISTS (SELECT 1 FROM nodes_current c 748 WHERE c.wc_id = ?1 AND c.local_relpath = ?2 749 AND c.kind = MAP_FILE)) 750 751-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 752DELETE FROM actual_node 753WHERE wc_id = ?1 754 AND (local_relpath = ?2 755 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 756 AND (changelist IS NULL 757 OR NOT EXISTS (SELECT 1 FROM nodes_current c 758 WHERE c.wc_id = ?1 759 AND c.local_relpath = actual_node.local_relpath 760 AND c.kind = MAP_FILE)) 761 762-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST 763UPDATE actual_node 764SET properties = NULL, 765 text_mod = NULL, 766 conflict_data = NULL, 767 tree_conflict_data = NULL, 768 older_checksum = NULL, 769 left_checksum = NULL, 770 right_checksum = NULL 771WHERE wc_id = ?1 AND local_relpath = ?2 772 773-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 774UPDATE actual_node 775SET properties = NULL, 776 text_mod = NULL, 777 conflict_data = NULL, 778 tree_conflict_data = NULL, 779 older_checksum = NULL, 780 left_checksum = NULL, 781 right_checksum = NULL 782WHERE wc_id = ?1 783 AND (local_relpath = ?2 784 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 785 786-- STMT_UPDATE_NODE_BASE_DEPTH 787UPDATE nodes SET depth = ?3 788WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 789 AND kind=MAP_DIR 790 791-- STMT_UPDATE_NODE_BASE_PRESENCE 792UPDATE nodes SET presence = ?3 793WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 794 795-- STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH 796UPDATE nodes SET presence = ?3, revision = ?4, repos_path = ?5 797WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 798 799-- STMT_LOOK_FOR_WORK 800SELECT id FROM work_queue LIMIT 1 801 802-- STMT_INSERT_WORK_ITEM 803INSERT INTO work_queue (work) VALUES (?1) 804 805-- STMT_SELECT_WORK_ITEM 806SELECT id, work FROM work_queue ORDER BY id LIMIT 1 807 808-- STMT_DELETE_WORK_ITEM 809DELETE FROM work_queue WHERE id = ?1 810 811-- STMT_INSERT_OR_IGNORE_PRISTINE 812INSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount) 813VALUES (?1, ?2, ?3, 0) 814 815-- STMT_INSERT_PRISTINE 816INSERT INTO pristine (checksum, md5_checksum, size, refcount) 817VALUES (?1, ?2, ?3, 0) 818 819-- STMT_SELECT_PRISTINE 820SELECT md5_checksum 821FROM pristine 822WHERE checksum = ?1 823 824-- STMT_SELECT_PRISTINE_SIZE 825SELECT size 826FROM pristine 827WHERE checksum = ?1 LIMIT 1 828 829-- STMT_SELECT_PRISTINE_BY_MD5 830SELECT checksum 831FROM pristine 832WHERE md5_checksum = ?1 833 834-- STMT_SELECT_UNREFERENCED_PRISTINES 835SELECT checksum 836FROM pristine 837WHERE refcount = 0 838 839-- STMT_DELETE_PRISTINE_IF_UNREFERENCED 840DELETE FROM pristine 841WHERE checksum = ?1 AND refcount = 0 842 843-- STMT_SELECT_COPY_PRISTINES 844/* For the root itself */ 845SELECT n.checksum, md5_checksum, size 846FROM nodes_current n 847LEFT JOIN pristine p ON n.checksum = p.checksum 848WHERE wc_id = ?1 849 AND n.local_relpath = ?2 850 AND n.checksum IS NOT NULL 851UNION ALL 852/* And all descendants */ 853SELECT n.checksum, md5_checksum, size 854FROM nodes n 855LEFT JOIN pristine p ON n.checksum = p.checksum 856WHERE wc_id = ?1 857 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 858 AND op_depth >= 859 (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2) 860 AND n.checksum IS NOT NULL 861 862-- STMT_VACUUM 863VACUUM 864 865-- STMT_SELECT_CONFLICT_VICTIMS 866SELECT local_relpath, conflict_data 867FROM actual_node 868WHERE wc_id = ?1 AND parent_relpath = ?2 AND 869 NOT (conflict_data IS NULL) 870 871-- STMT_INSERT_WC_LOCK 872INSERT INTO wc_lock (wc_id, local_dir_relpath, locked_levels) 873VALUES (?1, ?2, ?3) 874 875-- STMT_SELECT_WC_LOCK 876SELECT locked_levels FROM wc_lock 877WHERE wc_id = ?1 AND local_dir_relpath = ?2 878 879-- STMT_SELECT_ANCESTOR_WCLOCKS 880SELECT local_dir_relpath, locked_levels FROM wc_lock 881WHERE wc_id = ?1 882 AND ((local_dir_relpath >= ?3 AND local_dir_relpath <= ?2) 883 OR local_dir_relpath = '') 884 885-- STMT_DELETE_WC_LOCK 886DELETE FROM wc_lock 887WHERE wc_id = ?1 AND local_dir_relpath = ?2 888 889-- STMT_FIND_WC_LOCK 890SELECT local_dir_relpath FROM wc_lock 891WHERE wc_id = ?1 892 AND IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2) 893 894-- STMT_DELETE_WC_LOCK_ORPHAN 895DELETE FROM wc_lock 896WHERE wc_id = ?1 AND local_dir_relpath = ?2 897AND NOT EXISTS (SELECT 1 FROM nodes 898 WHERE nodes.wc_id = ?1 899 AND nodes.local_relpath = wc_lock.local_dir_relpath) 900 901-- STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE 902DELETE FROM wc_lock 903WHERE wc_id = ?1 904 AND (local_dir_relpath = ?2 905 OR IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2)) 906 AND NOT EXISTS (SELECT 1 FROM nodes 907 WHERE nodes.wc_id = ?1 908 AND nodes.local_relpath = wc_lock.local_dir_relpath) 909 910-- STMT_APPLY_CHANGES_TO_BASE_NODE 911/* translated_size and last_mod_time are not mentioned here because they will 912 be tweaked after the working-file is installed. When we replace an existing 913 BASE node (read: bump), preserve its file_external status. */ 914INSERT OR REPLACE INTO nodes ( 915 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 916 revision, presence, depth, kind, changed_revision, changed_date, 917 changed_author, checksum, properties, dav_cache, symlink_target, 918 inherited_props, file_external ) 919VALUES (?1, ?2, 0, 920 ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, 921 (SELECT file_external FROM nodes 922 WHERE wc_id = ?1 923 AND local_relpath = ?2 924 AND op_depth = 0)) 925 926-- STMT_INSTALL_WORKING_NODE_FOR_DELETE 927INSERT OR REPLACE INTO nodes ( 928 wc_id, local_relpath, op_depth, 929 parent_relpath, presence, kind) 930VALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5) 931 932-- STMT_DELETE_NO_LOWER_LAYER 933DELETE FROM nodes 934 WHERE wc_id = ?1 935 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 936 AND op_depth = ?3 937 AND NOT EXISTS (SELECT 1 FROM nodes n 938 WHERE n.wc_id = ?1 939 AND n.local_relpath = nodes.local_relpath 940 AND n.op_depth = ?4 941 AND n.presence IN (MAP_NORMAL, MAP_INCOMPLETE)) 942 943-- STMT_REPLACE_WITH_BASE_DELETED 944INSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath, 945 kind, moved_to, presence) 946SELECT wc_id, local_relpath, op_depth, parent_relpath, 947 kind, moved_to, MAP_BASE_DELETED 948 FROM nodes 949 WHERE wc_id = ?1 950 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 951 AND op_depth = ?3 952 953/* If this query is updated, STMT_INSERT_DELETE_LIST should too. */ 954-- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE 955INSERT INTO nodes ( 956 wc_id, local_relpath, op_depth, parent_relpath, presence, kind) 957SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED, 958 kind 959FROM nodes 960WHERE wc_id = ?1 961 AND (local_relpath = ?2 962 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 963 AND op_depth = ?3 964 AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) 965 AND file_external IS NULL 966 967-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY 968INSERT INTO nodes ( 969 wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 970 revision, presence, depth, kind, changed_revision, changed_date, 971 changed_author, checksum, properties, translated_size, last_mod_time, 972 symlink_target ) 973SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id, 974 repos_path, revision, presence, depth, kind, changed_revision, 975 changed_date, changed_author, checksum, properties, translated_size, 976 last_mod_time, symlink_target 977FROM nodes 978WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 979 980-- STMT_INSERT_DELETE_FROM_BASE 981INSERT INTO nodes ( 982 wc_id, local_relpath, op_depth, parent_relpath, presence, kind) 983SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, 984 MAP_BASE_DELETED, kind 985FROM nodes 986WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 987 988/* Not valid on the wc-root */ 989-- STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE 990UPDATE nodes SET op_depth = ?3 + 1 991WHERE wc_id = ?1 992 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 993 AND op_depth = ?3 994 995-- STMT_UPDATE_OP_DEPTH_RECURSIVE 996UPDATE nodes SET op_depth = ?4, moved_here = NULL 997WHERE wc_id = ?1 998 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 999 AND op_depth = ?3 1000 1001-- STMT_DOES_NODE_EXIST 1002SELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 1003LIMIT 1 1004 1005-- STMT_HAS_SERVER_EXCLUDED_DESCENDANTS 1006SELECT local_relpath FROM nodes 1007WHERE wc_id = ?1 1008 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1009 AND op_depth = 0 AND presence = MAP_SERVER_EXCLUDED 1010LIMIT 1 1011 1012/* Select all excluded nodes. Not valid on the WC-root */ 1013-- STMT_SELECT_ALL_EXCLUDED_DESCENDANTS 1014SELECT local_relpath FROM nodes 1015WHERE wc_id = ?1 1016 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1017 AND op_depth = 0 1018 AND (presence = MAP_SERVER_EXCLUDED OR presence = MAP_EXCLUDED) 1019 1020/* Creates a copy from one top level NODE to a different location */ 1021-- STMT_INSERT_WORKING_NODE_COPY_FROM 1022INSERT OR REPLACE INTO nodes ( 1023 wc_id, local_relpath, op_depth, parent_relpath, repos_id, 1024 repos_path, revision, presence, depth, moved_here, kind, changed_revision, 1025 changed_date, changed_author, checksum, properties, translated_size, 1026 last_mod_time, symlink_target, moved_to ) 1027SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/, 1028 repos_id, repos_path, revision, ?6 /*presence*/, depth, 1029 ?7/*moved_here*/, kind, changed_revision, changed_date, 1030 changed_author, checksum, properties, translated_size, 1031 last_mod_time, symlink_target, 1032 (SELECT dst.moved_to FROM nodes AS dst 1033 WHERE dst.wc_id = ?1 1034 AND dst.local_relpath = ?3 1035 AND dst.op_depth = ?4) 1036FROM nodes_current 1037WHERE wc_id = ?1 AND local_relpath = ?2 1038 1039-- STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH 1040INSERT OR REPLACE INTO nodes ( 1041 wc_id, local_relpath, op_depth, parent_relpath, repos_id, 1042 repos_path, revision, presence, depth, moved_here, kind, changed_revision, 1043 changed_date, changed_author, checksum, properties, translated_size, 1044 last_mod_time, symlink_target, moved_to ) 1045SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/, 1046 repos_id, repos_path, revision, ?6 /*presence*/, depth, 1047 ?8 /*moved_here*/, kind, changed_revision, changed_date, 1048 changed_author, checksum, properties, translated_size, 1049 last_mod_time, symlink_target, 1050 (SELECT dst.moved_to FROM nodes AS dst 1051 WHERE dst.wc_id = ?1 1052 AND dst.local_relpath = ?3 1053 AND dst.op_depth = ?4) 1054FROM nodes 1055WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?7 1056 1057-- STMT_UPDATE_BASE_REVISION 1058UPDATE nodes SET revision = ?3 1059WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1060 1061-- STMT_UPDATE_BASE_REPOS 1062UPDATE nodes SET repos_id = ?3, repos_path = ?4 1063WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1064 1065-- STMT_ACTUAL_HAS_CHILDREN 1066SELECT 1 FROM actual_node 1067WHERE wc_id = ?1 AND parent_relpath = ?2 1068LIMIT 1 1069 1070-- STMT_INSERT_EXTERNAL 1071INSERT OR REPLACE INTO externals ( 1072 wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath, 1073 repos_id, def_repos_relpath, def_operational_revision, def_revision) 1074VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10) 1075 1076-- STMT_SELECT_EXTERNAL_INFO 1077SELECT presence, kind, def_local_relpath, repos_id, 1078 def_repos_relpath, def_operational_revision, def_revision 1079FROM externals WHERE wc_id = ?1 AND local_relpath = ?2 1080LIMIT 1 1081 1082-- STMT_DELETE_FILE_EXTERNALS 1083DELETE FROM nodes 1084WHERE wc_id = ?1 1085 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1086 AND op_depth = 0 1087 AND file_external IS NOT NULL 1088 1089-- STMT_DELETE_FILE_EXTERNAL_REGISTATIONS 1090DELETE FROM externals 1091WHERE wc_id = ?1 1092 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1093 AND kind != MAP_DIR 1094 1095-- STMT_DELETE_EXTERNAL_REGISTATIONS 1096DELETE FROM externals 1097WHERE wc_id = ?1 1098 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1099 1100/* Select all committable externals, i.e. only unpegged ones on the same 1101 * repository as the target path ?2, that are defined by WC ?1 to 1102 * live below the target path. It does not matter which ancestor has the 1103 * svn:externals definition, only the local path at which the external is 1104 * supposed to be checked out is queried. 1105 * Arguments: 1106 * ?1: wc_id. 1107 * ?2: the target path, local relpath inside ?1. 1108 * 1109 * ### NOTE: This statement deliberately removes file externals that live 1110 * inside an unversioned dir, because commit still breaks on those. 1111 * Once that's been fixed, the conditions below "--->8---" become obsolete. */ 1112-- STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW 1113SELECT local_relpath, kind, def_repos_relpath, 1114 (SELECT root FROM repository AS r WHERE r.id = e.repos_id) 1115FROM externals e 1116WHERE wc_id = ?1 1117 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1118 AND def_revision IS NULL 1119 AND repos_id = (SELECT repos_id 1120 FROM nodes AS n 1121 WHERE n.wc_id = ?1 1122 AND n.local_relpath = '' 1123 AND n.op_depth = 0) 1124 AND ((kind='dir') 1125 OR EXISTS (SELECT 1 FROM nodes 1126 WHERE nodes.wc_id = e.wc_id 1127 AND nodes.local_relpath = e.parent_relpath)) 1128 1129-- STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW 1130SELECT local_relpath, kind, def_repos_relpath, 1131 (SELECT root FROM repository AS r WHERE r.id = e.repos_id) 1132FROM externals e 1133WHERE wc_id = ?1 1134 AND IS_STRICT_DESCENDANT_OF(e.local_relpath, ?2) 1135 AND parent_relpath = ?2 1136 AND def_revision IS NULL 1137 AND repos_id = (SELECT repos_id 1138 FROM nodes AS n 1139 WHERE n.wc_id = ?1 1140 AND n.local_relpath = '' 1141 AND n.op_depth = 0) 1142 AND ((kind='dir') 1143 OR EXISTS (SELECT 1 FROM nodes 1144 WHERE nodes.wc_id = e.wc_id 1145 AND nodes.local_relpath = e.parent_relpath)) 1146 1147-- STMT_SELECT_EXTERNALS_DEFINED 1148SELECT local_relpath, def_local_relpath 1149FROM externals 1150/* ### The Sqlite optimizer needs help here ### 1151 * WHERE wc_id = ?1 1152 * AND (def_local_relpath = ?2 1153 * OR IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) */ 1154WHERE (wc_id = ?1 AND def_local_relpath = ?2) 1155 OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) 1156 1157-- STMT_DELETE_EXTERNAL 1158DELETE FROM externals 1159WHERE wc_id = ?1 AND local_relpath = ?2 1160 1161-- STMT_SELECT_EXTERNAL_PROPERTIES 1162/* ### It would be nice if Sqlite would handle 1163 * SELECT IFNULL((SELECT properties FROM actual_node a 1164 * WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1165 * properties), 1166 * local_relpath, depth 1167 * FROM nodes_current n 1168 * WHERE wc_id = ?1 1169 * AND (local_relpath = ?2 1170 * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1171 * AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1172 * ### But it would take a double table scan execution plan for it. 1173 * ### Maybe there is something else going on? */ 1174SELECT IFNULL((SELECT properties FROM actual_node a 1175 WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1176 properties), 1177 local_relpath, depth 1178FROM nodes_current n 1179WHERE wc_id = ?1 AND local_relpath = ?2 1180 AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1181UNION ALL 1182SELECT IFNULL((SELECT properties FROM actual_node a 1183 WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1184 properties), 1185 local_relpath, depth 1186FROM nodes_current n 1187WHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1188 AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1189 1190-- STMT_SELECT_CURRENT_PROPS_RECURSIVE 1191/* ### Ugly OR to make sqlite use the proper optimizations */ 1192SELECT IFNULL((SELECT properties FROM actual_node a 1193 WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1194 properties), 1195 local_relpath 1196FROM nodes_current n 1197WHERE (wc_id = ?1 AND local_relpath = ?2) 1198 OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1199 1200-- STMT_PRAGMA_LOCKING_MODE 1201PRAGMA locking_mode = exclusive 1202 1203/* ------------------------------------------------------------------------- */ 1204 1205/* these are used in entries.c */ 1206 1207-- STMT_INSERT_ACTUAL_NODE 1208INSERT OR REPLACE INTO actual_node ( 1209 wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data) 1210VALUES (?1, ?2, ?3, ?4, ?5, ?6) 1211 1212/* ------------------------------------------------------------------------- */ 1213 1214/* these are used in upgrade.c */ 1215 1216-- STMT_UPDATE_ACTUAL_CONFLICT_DATA 1217UPDATE actual_node SET conflict_data = ?3 1218WHERE wc_id = ?1 AND local_relpath = ?2 1219 1220-- STMT_INSERT_ACTUAL_CONFLICT_DATA 1221INSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) 1222VALUES (?1, ?2, ?3, ?4) 1223 1224-- STMT_SELECT_ALL_FILES 1225SELECT local_relpath FROM nodes_current 1226WHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE 1227 1228-- STMT_UPDATE_NODE_PROPS 1229UPDATE nodes SET properties = ?4 1230WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1231 1232-- STMT_PRAGMA_TABLE_INFO_NODES 1233PRAGMA table_info("NODES") 1234 1235/* -------------------------------------------------------------------------- 1236 * Complex queries for callback walks, caching results in a temporary table. 1237 * 1238 * These target table are then used for joins against NODES, or for reporting 1239 */ 1240 1241-- STMT_CREATE_TARGET_PROP_CACHE 1242DROP TABLE IF EXISTS target_prop_cache; 1243CREATE TEMPORARY TABLE target_prop_cache ( 1244 local_relpath TEXT NOT NULL PRIMARY KEY, 1245 kind TEXT NOT NULL, 1246 properties BLOB 1247); 1248/* ### Need index? 1249CREATE UNIQUE INDEX temp__node_props_cache_unique 1250 ON temp__node_props_cache (local_relpath) */ 1251 1252-- STMT_CACHE_TARGET_PROPS 1253INSERT INTO target_prop_cache(local_relpath, kind, properties) 1254 SELECT n.local_relpath, n.kind, 1255 IFNULL((SELECT properties FROM actual_node AS a 1256 WHERE a.wc_id = n.wc_id 1257 AND a.local_relpath = n.local_relpath), 1258 n.properties) 1259 FROM targets_list AS t 1260 JOIN nodes AS n 1261 ON n.wc_id = ?1 1262 AND n.local_relpath = t.local_relpath 1263 AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 1264 WHERE n3.wc_id = ?1 1265 AND n3.local_relpath = t.local_relpath) 1266 WHERE t.wc_id = ?1 1267 AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE) 1268 ORDER BY t.local_relpath 1269 1270-- STMT_CACHE_TARGET_PRISTINE_PROPS 1271INSERT INTO target_prop_cache(local_relpath, kind, properties) 1272 SELECT n.local_relpath, n.kind, 1273 CASE n.presence 1274 WHEN MAP_BASE_DELETED 1275 THEN (SELECT properties FROM nodes AS p 1276 WHERE p.wc_id = n.wc_id 1277 AND p.local_relpath = n.local_relpath 1278 AND p.op_depth < n.op_depth 1279 ORDER BY p.op_depth DESC /* LIMIT 1 */) 1280 ELSE properties END 1281 FROM targets_list AS t 1282 JOIN nodes AS n 1283 ON n.wc_id = ?1 1284 AND n.local_relpath = t.local_relpath 1285 AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 1286 WHERE n3.wc_id = ?1 1287 AND n3.local_relpath = t.local_relpath) 1288 WHERE t.wc_id = ?1 1289 AND (presence = MAP_NORMAL 1290 OR presence = MAP_INCOMPLETE 1291 OR presence = MAP_BASE_DELETED) 1292 ORDER BY t.local_relpath 1293 1294-- STMT_SELECT_ALL_TARGET_PROP_CACHE 1295SELECT local_relpath, properties FROM target_prop_cache 1296ORDER BY local_relpath 1297 1298-- STMT_DROP_TARGET_PROP_CACHE 1299DROP TABLE target_prop_cache; 1300 1301-- STMT_CREATE_REVERT_LIST 1302DROP TABLE IF EXISTS revert_list; 1303CREATE TEMPORARY TABLE revert_list ( 1304 /* need wc_id if/when revert spans multiple working copies */ 1305 local_relpath TEXT NOT NULL, 1306 actual INTEGER NOT NULL, /* 1 if an actual row, 0 if a nodes row */ 1307 conflict_data BLOB, 1308 notify INTEGER, /* 1 if an actual row had props or tree conflict */ 1309 op_depth INTEGER, 1310 repos_id INTEGER, 1311 kind TEXT, 1312 PRIMARY KEY (local_relpath, actual) 1313 ); 1314DROP TRIGGER IF EXISTS trigger_revert_list_nodes; 1315CREATE TEMPORARY TRIGGER trigger_revert_list_nodes 1316BEFORE DELETE ON nodes 1317BEGIN 1318 INSERT OR REPLACE INTO revert_list(local_relpath, actual, op_depth, 1319 repos_id, kind) 1320 SELECT OLD.local_relpath, 0, OLD.op_depth, OLD.repos_id, OLD.kind; 1321END; 1322DROP TRIGGER IF EXISTS trigger_revert_list_actual_delete; 1323CREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete 1324BEFORE DELETE ON actual_node 1325BEGIN 1326 INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, 1327 notify) 1328 SELECT OLD.local_relpath, 1, OLD.conflict_data, 1329 CASE 1330 WHEN OLD.properties IS NOT NULL 1331 THEN 1 1332 WHEN NOT EXISTS(SELECT 1 FROM NODES n 1333 WHERE n.wc_id = OLD.wc_id 1334 AND n.local_relpath = OLD.local_relpath) 1335 THEN 1 1336 ELSE NULL 1337 END; 1338END; 1339DROP TRIGGER IF EXISTS trigger_revert_list_actual_update; 1340CREATE TEMPORARY TRIGGER trigger_revert_list_actual_update 1341BEFORE UPDATE ON actual_node 1342BEGIN 1343 INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, 1344 notify) 1345 SELECT OLD.local_relpath, 1, OLD.conflict_data, 1346 CASE 1347 WHEN OLD.properties IS NOT NULL 1348 THEN 1 1349 WHEN NOT EXISTS(SELECT 1 FROM NODES n 1350 WHERE n.wc_id = OLD.wc_id 1351 AND n.local_relpath = OLD.local_relpath) 1352 THEN 1 1353 ELSE NULL 1354 END; 1355END 1356 1357-- STMT_DROP_REVERT_LIST_TRIGGERS 1358DROP TRIGGER trigger_revert_list_nodes; 1359DROP TRIGGER trigger_revert_list_actual_delete; 1360DROP TRIGGER trigger_revert_list_actual_update 1361 1362-- STMT_SELECT_REVERT_LIST 1363SELECT actual, notify, kind, op_depth, repos_id, conflict_data 1364FROM revert_list 1365WHERE local_relpath = ?1 1366ORDER BY actual DESC 1367 1368-- STMT_SELECT_REVERT_LIST_COPIED_CHILDREN 1369SELECT local_relpath, kind 1370FROM revert_list 1371WHERE IS_STRICT_DESCENDANT_OF(local_relpath, ?1) 1372 AND op_depth >= ?2 1373 AND repos_id IS NOT NULL 1374ORDER BY local_relpath 1375 1376-- STMT_DELETE_REVERT_LIST 1377DELETE FROM revert_list WHERE local_relpath = ?1 1378 1379-- STMT_SELECT_REVERT_LIST_RECURSIVE 1380SELECT DISTINCT local_relpath 1381FROM revert_list 1382WHERE (local_relpath = ?1 1383 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1)) 1384 AND (notify OR actual = 0) 1385ORDER BY local_relpath 1386 1387-- STMT_DELETE_REVERT_LIST_RECURSIVE 1388DELETE FROM revert_list 1389WHERE (local_relpath = ?1 1390 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1)) 1391 1392-- STMT_DROP_REVERT_LIST 1393DROP TABLE IF EXISTS revert_list 1394 1395-- STMT_CREATE_DELETE_LIST 1396DROP TABLE IF EXISTS delete_list; 1397CREATE TEMPORARY TABLE delete_list ( 1398/* ### we should put the wc_id in here in case a delete spans multiple 1399 ### working copies. queries, etc will need to be adjusted. */ 1400 local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE 1401 ) 1402 1403/* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE. 1404 A subquery is used instead of nodes_current to avoid a table scan */ 1405-- STMT_INSERT_DELETE_LIST 1406INSERT INTO delete_list(local_relpath) 1407SELECT local_relpath FROM nodes AS n 1408WHERE wc_id = ?1 1409 AND (local_relpath = ?2 1410 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1411 AND op_depth >= ?3 1412 AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s 1413 WHERE s.wc_id = ?1 1414 AND s.local_relpath = n.local_relpath) 1415 AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) 1416 AND file_external IS NULL 1417 1418-- STMT_SELECT_DELETE_LIST 1419SELECT local_relpath FROM delete_list 1420ORDER BY local_relpath 1421 1422-- STMT_FINALIZE_DELETE 1423DROP TABLE IF EXISTS delete_list 1424 1425-- STMT_CREATE_UPDATE_MOVE_LIST 1426DROP TABLE IF EXISTS update_move_list; 1427CREATE TEMPORARY TABLE update_move_list ( 1428/* ### we should put the wc_id in here in case a move update spans multiple 1429 ### working copies. queries, etc will need to be adjusted. */ 1430 local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE, 1431 action INTEGER NOT NULL, 1432 kind INTEGER NOT NULL, 1433 content_state INTEGER NOT NULL, 1434 prop_state INTEGER NOT NULL 1435 ) 1436 1437-- STMT_INSERT_UPDATE_MOVE_LIST 1438INSERT INTO update_move_list(local_relpath, action, kind, content_state, 1439 prop_state) 1440VALUES (?1, ?2, ?3, ?4, ?5) 1441 1442-- STMT_SELECT_UPDATE_MOVE_LIST 1443SELECT local_relpath, action, kind, content_state, prop_state 1444FROM update_move_list 1445ORDER BY local_relpath 1446 1447-- STMT_FINALIZE_UPDATE_MOVE 1448DROP TABLE IF EXISTS update_move_list 1449 1450/* ------------------------------------------------------------------------- */ 1451 1452/* Queries for revision status. */ 1453 1454-- STMT_SELECT_MIN_MAX_REVISIONS 1455SELECT MIN(revision), MAX(revision), 1456 MIN(changed_revision), MAX(changed_revision) FROM nodes 1457 WHERE wc_id = ?1 1458 AND (local_relpath = ?2 1459 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1460 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1461 AND file_external IS NULL 1462 AND op_depth = 0 1463 1464-- STMT_HAS_SPARSE_NODES 1465SELECT 1 FROM nodes 1466WHERE wc_id = ?1 1467 AND (local_relpath = ?2 1468 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1469 AND op_depth = 0 1470 AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED) 1471 OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN)) 1472 AND file_external IS NULL 1473LIMIT 1 1474 1475-- STMT_SUBTREE_HAS_TREE_MODIFICATIONS 1476SELECT 1 FROM nodes 1477WHERE wc_id = ?1 1478 AND (local_relpath = ?2 1479 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1480 AND op_depth > 0 1481LIMIT 1 1482 1483-- STMT_SUBTREE_HAS_PROP_MODIFICATIONS 1484SELECT 1 FROM actual_node 1485WHERE wc_id = ?1 1486 AND (local_relpath = ?2 1487 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1488 AND properties IS NOT NULL 1489LIMIT 1 1490 1491-- STMT_HAS_SWITCHED 1492SELECT 1 1493FROM nodes 1494WHERE wc_id = ?1 1495 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1496 AND op_depth = 0 1497 AND file_external IS NULL 1498 AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1499 AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath) 1500LIMIT 1 1501 1502-- STMT_SELECT_BASE_FILES_RECURSIVE 1503SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n 1504WHERE wc_id = ?1 1505 AND (local_relpath = ?2 1506 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1507 AND op_depth = 0 1508 AND kind=MAP_FILE 1509 AND presence=MAP_NORMAL 1510 AND file_external IS NULL 1511 1512-- STMT_SELECT_MOVED_FROM_RELPATH 1513SELECT local_relpath, op_depth FROM nodes 1514WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 1515 1516-- STMT_UPDATE_MOVED_TO_RELPATH 1517UPDATE nodes SET moved_to = ?4 1518WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1519 1520-- STMT_CLEAR_MOVED_TO_RELPATH 1521UPDATE nodes SET moved_to = NULL 1522WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1523 1524-- STMT_CLEAR_MOVED_HERE_RECURSIVE 1525UPDATE nodes SET moved_here = NULL 1526WHERE wc_id = ?1 1527 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1528 AND op_depth = ?3 1529 1530/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1. 1531 * Each row returns a moved-here path (always a child of ?2) in the first 1532 * column, and its matching moved-away (deleted) path in the second column. */ 1533-- STMT_SELECT_MOVED_HERE_CHILDREN 1534SELECT moved_to, local_relpath FROM nodes 1535WHERE wc_id = ?1 AND op_depth > 0 1536 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1537 1538/* If the node is moved here (r.moved_here = 1) we are really interested in 1539 where the node was moved from. To obtain that we need the op_depth, but 1540 this form of select only allows a single return value */ 1541-- STMT_SELECT_MOVED_FOR_DELETE 1542SELECT local_relpath, moved_to, op_depth, 1543 (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r 1544 WHERE r.wc_id = ?1 1545 AND r.local_relpath = n.local_relpath 1546 AND r.op_depth < n.op_depth 1547 ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth 1548 FROM nodes n 1549WHERE wc_id = ?1 1550 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1551 AND moved_to IS NOT NULL 1552 AND op_depth >= ?3 1553 1554-- STMT_SELECT_MOVED_FROM_FOR_DELETE 1555SELECT local_relpath, op_depth, 1556 (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r 1557 WHERE r.wc_id = ?1 1558 AND r.local_relpath = n.local_relpath 1559 AND r.op_depth < n.op_depth 1560 ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth 1561 FROM nodes n 1562WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 1563 1564-- STMT_UPDATE_MOVED_TO_DESCENDANTS 1565UPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to) 1566 WHERE wc_id = ?1 1567 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1568 1569-- STMT_CLEAR_MOVED_TO_DESCENDANTS 1570UPDATE nodes SET moved_to = NULL 1571 WHERE wc_id = ?1 1572 AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1573 1574 1575/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1, 1576 * where the source of the move is within the subtree rooted at path ?2, and 1577 * the destination of the move is outside the subtree rooted at path ?2. */ 1578-- STMT_SELECT_MOVED_PAIR2 1579SELECT local_relpath, moved_to, op_depth FROM nodes 1580WHERE wc_id = ?1 1581 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1582 AND moved_to IS NOT NULL 1583 AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1584 AND op_depth >= (SELECT MAX(op_depth) FROM nodes o 1585 WHERE o.wc_id = ?1 1586 AND o.local_relpath = ?2) 1587 1588-- STMT_SELECT_MOVED_PAIR3 1589SELECT local_relpath, moved_to, op_depth, kind FROM nodes 1590WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 1591 AND moved_to IS NOT NULL 1592UNION ALL 1593SELECT local_relpath, moved_to, op_depth, kind FROM nodes 1594WHERE wc_id = ?1 1595 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1596 AND op_depth > ?3 1597 AND moved_to IS NOT NULL 1598ORDER BY local_relpath, op_depth 1599 1600-- STMT_SELECT_MOVED_OUTSIDE 1601SELECT local_relpath, moved_to, op_depth FROM nodes 1602WHERE wc_id = ?1 1603 AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1604 AND op_depth >= ?3 1605 AND moved_to IS NOT NULL 1606 AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1607 1608-- STMT_SELECT_OP_DEPTH_MOVED_PAIR 1609SELECT n.local_relpath, n.moved_to, 1610 (SELECT o.repos_path FROM nodes AS o 1611 WHERE o.wc_id = n.wc_id 1612 AND o.local_relpath = n.local_relpath 1613 AND o.op_depth < ?3 ORDER BY o.op_depth DESC LIMIT 1) 1614FROM nodes AS n 1615WHERE n.wc_id = ?1 1616 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 1617 AND n.op_depth = ?3 1618 AND n.moved_to IS NOT NULL 1619 1620-- STMT_SELECT_MOVED_DESCENDANTS 1621SELECT n.local_relpath, h.moved_to 1622FROM nodes n, nodes h 1623WHERE n.wc_id = ?1 1624 AND h.wc_id = ?1 1625 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 1626 AND h.local_relpath = n.local_relpath 1627 AND n.op_depth = ?3 1628 AND h.op_depth = (SELECT MIN(o.op_depth) 1629 FROM nodes o 1630 WHERE o.wc_id = ?1 1631 AND o.local_relpath = n.local_relpath 1632 AND o.op_depth > ?3) 1633 AND h.moved_to IS NOT NULL 1634 1635-- STMT_COMMIT_UPDATE_ORIGIN 1636/* Note that the only reason this SUBSTR() trick is valid is that you 1637 can move neither the working copy nor the repository root. 1638 1639 SUBSTR(local_relpath, LENGTH(?2)+1) includes the '/' of the path */ 1640UPDATE nodes SET repos_id = ?4, 1641 repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1), 1642 revision = ?6 1643WHERE wc_id = ?1 1644 AND (local_relpath = ?2 1645 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1646 AND op_depth = ?3 1647 1648-- STMT_HAS_LAYER_BETWEEN 1649SELECT 1 FROM NODES 1650WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4 1651 1652-- STMT_SELECT_REPOS_PATH_REVISION 1653SELECT local_relpath, repos_path, revision FROM nodes 1654WHERE wc_id = ?1 1655 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1656 AND op_depth = 0 1657ORDER BY local_relpath 1658 1659-- STMT_SELECT_HAS_NON_FILE_CHILDREN 1660SELECT 1 FROM nodes 1661WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 AND kind != MAP_FILE 1662 1663-- STMT_SELECT_HAS_GRANDCHILDREN 1664SELECT 1 FROM nodes 1665WHERE wc_id = ?1 1666 AND IS_STRICT_DESCENDANT_OF(parent_relpath, ?2) 1667 AND op_depth = 0 1668 AND file_external IS NULL 1669 1670/* ------------------------------------------------------------------------- */ 1671 1672/* Queries for verification. */ 1673 1674-- STMT_SELECT_ALL_NODES 1675SELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes 1676WHERE wc_id = ?1 1677 1678/* ------------------------------------------------------------------------- */ 1679 1680/* Queries for cached inherited properties. */ 1681 1682/* Select the inherited properties of a single base node. */ 1683-- STMT_SELECT_IPROPS 1684SELECT inherited_props FROM nodes 1685WHERE wc_id = ?1 1686 AND local_relpath = ?2 1687 AND op_depth = 0 1688 1689/* Update the inherited properties of a single base node. */ 1690-- STMT_UPDATE_IPROP 1691UPDATE nodes 1692SET inherited_props = ?3 1693WHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0) 1694 1695/* Select a single path if its base node has cached inherited properties. */ 1696-- STMT_SELECT_IPROPS_NODE 1697SELECT local_relpath, repos_path FROM nodes 1698WHERE wc_id = ?1 1699 AND local_relpath = ?2 1700 AND op_depth = 0 1701 AND (inherited_props not null) 1702 1703/* Select all paths whose base nodes are below a given path, which 1704 have cached inherited properties. */ 1705-- STMT_SELECT_IPROPS_RECURSIVE 1706SELECT local_relpath, repos_path FROM nodes 1707WHERE wc_id = ?1 1708 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1709 AND op_depth = 0 1710 AND (inherited_props not null) 1711 1712-- STMT_SELECT_IPROPS_CHILDREN 1713SELECT local_relpath, repos_path FROM nodes 1714WHERE wc_id = ?1 1715 AND parent_relpath = ?2 1716 AND op_depth = 0 1717 AND (inherited_props not null) 1718 1719/* ------------------------------------------------------------------------- */ 1720 1721/* Grab all the statements related to the schema. */ 1722 1723-- include: wc-metadata 1724-- include: wc-checks 1725