1251881Speter/* wc-queries.sql -- queries used to interact with the wc-metadata 2251881Speter * SQLite database 3251881Speter * This is intended for use with SQLite 3 4251881Speter * 5251881Speter * ==================================================================== 6251881Speter * Licensed to the Apache Software Foundation (ASF) under one 7251881Speter * or more contributor license agreements. See the NOTICE file 8251881Speter * distributed with this work for additional information 9251881Speter * regarding copyright ownership. The ASF licenses this file 10251881Speter * to you under the Apache License, Version 2.0 (the 11251881Speter * "License"); you may not use this file except in compliance 12251881Speter * with the License. You may obtain a copy of the License at 13251881Speter * 14251881Speter * http://www.apache.org/licenses/LICENSE-2.0 15251881Speter * 16251881Speter * Unless required by applicable law or agreed to in writing, 17251881Speter * software distributed under the License is distributed on an 18251881Speter * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19251881Speter * KIND, either express or implied. See the License for the 20251881Speter * specific language governing permissions and limitations 21251881Speter * under the License. 22251881Speter * ==================================================================== 23251881Speter */ 24251881Speter 25251881Speter/* ------------------------------------------------------------------------- */ 26251881Speter 27251881Speter/* these are used in wc_db.c */ 28251881Speter 29251881Speter-- STMT_SELECT_NODE_INFO 30251881SpeterSELECT op_depth, repos_id, repos_path, presence, kind, revision, checksum, 31251881Speter translated_size, changed_revision, changed_date, changed_author, depth, 32251881Speter symlink_target, last_mod_time, properties, moved_here, inherited_props, 33251881Speter moved_to 34251881SpeterFROM nodes 35251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 36251881SpeterORDER BY op_depth DESC 37251881Speter 38251881Speter-- STMT_SELECT_NODE_INFO_WITH_LOCK 39251881SpeterSELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, 40251881Speter checksum, translated_size, changed_revision, changed_date, changed_author, 41251881Speter depth, symlink_target, last_mod_time, properties, moved_here, 42251881Speter inherited_props, 43251881Speter /* All the columns until now must match those returned by 44251881Speter STMT_SELECT_NODE_INFO. The implementation of svn_wc__db_read_info() 45251881Speter assumes that these columns are followed by the lock information) */ 46251881Speter lock_token, lock_owner, lock_comment, lock_date 47251881SpeterFROM nodes 48251881SpeterLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 49251881Speter AND nodes.repos_path = lock.repos_relpath 50251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 51251881SpeterORDER BY op_depth DESC 52251881Speter 53251881Speter-- STMT_SELECT_BASE_NODE 54251881SpeterSELECT repos_id, repos_path, presence, kind, revision, checksum, 55251881Speter translated_size, changed_revision, changed_date, changed_author, depth, 56251881Speter symlink_target, last_mod_time, properties, file_external 57251881SpeterFROM nodes 58251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 59251881Speter 60251881Speter-- STMT_SELECT_BASE_NODE_WITH_LOCK 61251881SpeterSELECT nodes.repos_id, nodes.repos_path, presence, kind, revision, 62251881Speter checksum, translated_size, changed_revision, changed_date, changed_author, 63251881Speter depth, symlink_target, last_mod_time, properties, file_external, 64251881Speter /* All the columns until now must match those returned by 65251881Speter STMT_SELECT_BASE_NODE. The implementation of svn_wc__db_base_get_info() 66251881Speter assumes that these columns are followed by the lock information) */ 67251881Speter lock_token, lock_owner, lock_comment, lock_date 68251881SpeterFROM nodes 69251881SpeterLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 70251881Speter AND nodes.repos_path = lock.repos_relpath 71251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 72251881Speter 73251881Speter-- STMT_SELECT_BASE_CHILDREN_INFO 74251881SpeterSELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind, 75299742Sdim revision, depth, file_external 76299742SdimFROM nodes 77299742SdimWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 78299742Sdim 79299742Sdim-- STMT_SELECT_BASE_CHILDREN_INFO_LOCK 80299742SdimSELECT local_relpath, nodes.repos_id, nodes.repos_path, presence, kind, 81251881Speter revision, depth, file_external, 82251881Speter lock_token, lock_owner, lock_comment, lock_date 83251881SpeterFROM nodes 84251881SpeterLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 85251881Speter AND nodes.repos_path = lock.repos_relpath 86251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 87251881Speter 88299742Sdim 89251881Speter-- STMT_SELECT_WORKING_NODE 90251881SpeterSELECT op_depth, presence, kind, checksum, translated_size, 91251881Speter changed_revision, changed_date, changed_author, depth, symlink_target, 92251881Speter repos_id, repos_path, revision, 93251881Speter moved_here, moved_to, last_mod_time, properties 94251881SpeterFROM nodes 95251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0 96251881SpeterORDER BY op_depth DESC 97251881SpeterLIMIT 1 98251881Speter 99251881Speter-- STMT_SELECT_DEPTH_NODE 100251881SpeterSELECT repos_id, repos_path, presence, kind, revision, checksum, 101251881Speter translated_size, changed_revision, changed_date, changed_author, depth, 102299742Sdim symlink_target, properties, moved_to, moved_here 103251881SpeterFROM nodes 104251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 105251881Speter 106251881Speter-- STMT_SELECT_LOWEST_WORKING_NODE 107251881SpeterSELECT op_depth, presence, kind, moved_to 108251881SpeterFROM nodes 109251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 110251881SpeterORDER BY op_depth 111251881SpeterLIMIT 1 112251881Speter 113251881Speter-- STMT_SELECT_HIGHEST_WORKING_NODE 114251881SpeterSELECT op_depth 115251881SpeterFROM nodes 116251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth < ?3 117251881SpeterORDER BY op_depth DESC 118251881SpeterLIMIT 1 119251881Speter 120251881Speter-- STMT_SELECT_ACTUAL_NODE 121251881SpeterSELECT changelist, properties, conflict_data 122251881SpeterFROM actual_node 123251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 124251881Speter 125251881Speter-- STMT_SELECT_NODE_CHILDREN_INFO 126251881Speter/* Getting rows in an advantageous order using 127251881Speter ORDER BY local_relpath, op_depth DESC 128299742Sdim doesn't work as the index is created without the DESC keyword. 129299742Sdim Using both local_relpath and op_depth descending does work without any 130299742Sdim performance penalty. */ 131251881SpeterSELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, 132251881Speter checksum, translated_size, changed_revision, changed_date, changed_author, 133251881Speter depth, symlink_target, last_mod_time, properties, lock_token, lock_owner, 134251881Speter lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external 135251881SpeterFROM nodes 136251881SpeterLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 137251881Speter AND nodes.repos_path = lock.repos_relpath AND op_depth = 0 138251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 139299742SdimORDER BY local_relpath DESC, op_depth DESC 140251881Speter 141299742Sdim-- STMT_SELECT_BASE_NODE_CHILDREN_INFO 142299742Sdim/* See above re: result ordering. The results of this query must be in 143299742Sdimthe same order as returned by STMT_SELECT_NODE_CHILDREN_INFO, because 144299742Sdimread_children_info expects them to be. */ 145299742SdimSELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, 146299742Sdim checksum, translated_size, changed_revision, changed_date, changed_author, 147299742Sdim depth, symlink_target, last_mod_time, properties, lock_token, lock_owner, 148299742Sdim lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external 149299742SdimFROM nodes 150299742SdimLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 151299742Sdim AND nodes.repos_path = lock.repos_relpath AND op_depth = 0 152299742SdimWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 153299742SdimORDER BY local_relpath DESC 154299742Sdim 155251881Speter-- STMT_SELECT_NODE_CHILDREN_WALKER_INFO 156251881SpeterSELECT local_relpath, op_depth, presence, kind 157251881SpeterFROM nodes_current 158251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 159299742SdimORDER BY local_relpath 160251881Speter 161251881Speter-- STMT_SELECT_ACTUAL_CHILDREN_INFO 162251881SpeterSELECT local_relpath, changelist, properties, conflict_data 163251881SpeterFROM actual_node 164251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 165251881Speter 166251881Speter-- STMT_SELECT_REPOSITORY_BY_ID 167251881SpeterSELECT root, uuid FROM repository WHERE id = ?1 168251881Speter 169251881Speter-- STMT_SELECT_WCROOT_NULL 170251881SpeterSELECT id FROM wcroot WHERE local_abspath IS NULL 171251881Speter 172251881Speter-- STMT_SELECT_REPOSITORY 173251881SpeterSELECT id FROM repository WHERE root = ?1 174251881Speter 175251881Speter-- STMT_INSERT_REPOSITORY 176251881SpeterINSERT INTO repository (root, uuid) VALUES (?1, ?2) 177251881Speter 178251881Speter-- STMT_INSERT_NODE 179251881SpeterINSERT OR REPLACE INTO nodes ( 180251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 181251881Speter revision, presence, depth, kind, changed_revision, changed_date, 182251881Speter changed_author, checksum, properties, translated_size, last_mod_time, 183251881Speter dav_cache, symlink_target, file_external, moved_to, moved_here, 184251881Speter inherited_props) 185251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, 186251881Speter ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23) 187251881Speter 188251881Speter-- STMT_SELECT_WORKING_PRESENT 189251881SpeterSELECT local_relpath, kind, checksum, translated_size, last_mod_time 190251881SpeterFROM nodes n 191251881SpeterWHERE wc_id = ?1 192251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 193251881Speter AND presence in (MAP_NORMAL, MAP_INCOMPLETE) 194251881Speter AND op_depth = (SELECT MAX(op_depth) 195251881Speter FROM NODES w 196251881Speter WHERE w.wc_id = ?1 197251881Speter AND w.local_relpath = n.local_relpath) 198251881SpeterORDER BY local_relpath DESC 199251881Speter 200251881Speter-- STMT_DELETE_NODE_RECURSIVE 201251881SpeterDELETE FROM NODES 202251881SpeterWHERE wc_id = ?1 203251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 204251881Speter 205251881Speter-- STMT_DELETE_NODE 206251881SpeterDELETE 207251881SpeterFROM NODES 208269847SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 209251881Speter 210251881Speter-- STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE 211251881Speter/* The ACTUAL_NODE applies to BASE, unless there is in at least one op_depth 212251881Speter a WORKING node that could have a conflict */ 213251881SpeterDELETE FROM actual_node 214251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 215251881Speter AND EXISTS(SELECT 1 FROM NODES b 216251881Speter WHERE b.wc_id = ?1 217251881Speter AND b.local_relpath = actual_node.local_relpath 218251881Speter AND op_depth = 0) 219251881Speter AND NOT EXISTS(SELECT 1 FROM NODES w 220251881Speter WHERE w.wc_id = ?1 221251881Speter AND w.local_relpath = actual_node.local_relpath 222251881Speter AND op_depth > 0 223251881Speter AND presence in (MAP_NORMAL, MAP_INCOMPLETE, MAP_NOT_PRESENT)) 224251881Speter 225251881Speter-- STMT_DELETE_WORKING_BASE_DELETE 226251881SpeterDELETE FROM nodes 227299742SdimWHERE wc_id = ?1 AND local_relpath = ?2 228299742Sdim AND presence = MAP_BASE_DELETED 229299742Sdim AND op_depth > ?3 230299742Sdim AND op_depth = (SELECT MIN(op_depth) FROM nodes n 231299742Sdim WHERE n.wc_id = ?1 232299742Sdim AND n.local_relpath = nodes.local_relpath 233299742Sdim AND op_depth > ?3) 234299742Sdim 235299742Sdim-- STMT_DELETE_WORKING_BASE_DELETE_RECURSIVE 236299742SdimDELETE FROM nodes 237251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 238251881Speter AND presence = MAP_BASE_DELETED 239299742Sdim AND op_depth > ?3 240251881Speter AND op_depth = (SELECT MIN(op_depth) FROM nodes n 241251881Speter WHERE n.wc_id = ?1 242251881Speter AND n.local_relpath = nodes.local_relpath 243299742Sdim AND op_depth > ?3) 244251881Speter 245251881Speter-- STMT_DELETE_WORKING_RECURSIVE 246251881SpeterDELETE FROM nodes 247251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 248251881Speter AND op_depth > 0 249251881Speter 250251881Speter-- STMT_DELETE_BASE_RECURSIVE 251251881SpeterDELETE FROM nodes 252299742SdimWHERE wc_id = ?1 AND (local_relpath = ?2 253299742Sdim OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 254251881Speter AND op_depth = 0 255251881Speter 256251881Speter-- STMT_DELETE_WORKING_OP_DEPTH 257251881SpeterDELETE FROM nodes 258299742SdimWHERE wc_id = ?1 259251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 260251881Speter AND op_depth = ?3 261251881Speter 262299742Sdim/* Full layer replacement check code for handling moves 263299742SdimThe op_root must exist (or there is no layer to replace) and an op-root 264299742Sdim always has presence 'normal' */ 265299742Sdim-- STMT_SELECT_LAYER_FOR_REPLACE 266299742SdimSELECT s.local_relpath, s.kind, 267299742Sdim RELPATH_SKIP_JOIN(?2, ?4, s.local_relpath) drp, 'normal' 268299742SdimFROM nodes s 269299742SdimWHERE s.wc_id = ?1 AND s.local_relpath = ?2 AND s.op_depth = ?3 270299742SdimUNION ALL 271299742SdimSELECT s.local_relpath, s.kind, 272299742Sdim RELPATH_SKIP_JOIN(?2, ?4, s.local_relpath) drp, d.presence 273299742SdimFROM nodes s 274299742SdimLEFT OUTER JOIN nodes d ON d.wc_id= ?1 AND d.op_depth = ?5 275299742Sdim AND d.local_relpath = drp 276299742SdimWHERE s.wc_id = ?1 277299742Sdim AND IS_STRICT_DESCENDANT_OF(s.local_relpath, ?2) 278299742Sdim AND s.op_depth = ?3 279299742SdimORDER BY s.local_relpath 280251881Speter 281299742Sdim-- STMT_SELECT_DESCENDANTS_OP_DEPTH_RV 282251881SpeterSELECT local_relpath, kind 283251881SpeterFROM nodes 284251881SpeterWHERE wc_id = ?1 285251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 286251881Speter AND op_depth = ?3 287299742Sdim AND presence in (MAP_NORMAL, MAP_INCOMPLETE) 288251881SpeterORDER BY local_relpath DESC 289251881Speter 290251881Speter-- STMT_COPY_NODE_MOVE 291251881SpeterINSERT OR REPLACE INTO nodes ( 292251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 293251881Speter revision, presence, depth, kind, changed_revision, changed_date, 294251881Speter changed_author, checksum, properties, translated_size, last_mod_time, 295251881Speter symlink_target, moved_here, moved_to ) 296251881SpeterSELECT 297299742Sdim s.wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* parent_relpath */, 298299742Sdim s.repos_id, 299299742Sdim s.repos_path, s.revision, s.presence, s.depth, s.kind, s.changed_revision, 300299742Sdim s.changed_date, s.changed_author, s.checksum, s.properties, 301299742Sdim CASE WHEN d.checksum=s.checksum THEN d.translated_size END, 302299742Sdim CASE WHEN d.checksum=s.checksum THEN d.last_mod_time END, 303299742Sdim s.symlink_target, 1, d.moved_to 304299742SdimFROM nodes s 305299742SdimLEFT JOIN nodes d ON d.wc_id=?1 AND d.local_relpath=?4 AND d.op_depth=?5 306299742SdimWHERE s.wc_id = ?1 AND s.local_relpath = ?2 AND s.op_depth = ?3 307251881Speter 308299742Sdim-- STMT_SELECT_NO_LONGER_MOVED_RV 309299742SdimSELECT d.local_relpath, RELPATH_SKIP_JOIN(?2, ?4, d.local_relpath) srp, 310299742Sdim b.presence, b.op_depth 311299742SdimFROM nodes d 312299742SdimLEFT OUTER JOIN nodes b ON b.wc_id = ?1 AND b.local_relpath = d.local_relpath 313299742Sdim AND b.op_depth = (SELECT MAX(x.op_depth) FROM nodes x 314299742Sdim WHERE x.wc_id = ?1 315299742Sdim AND x.local_relpath = b.local_relpath 316299742Sdim AND x.op_depth < ?3) 317299742SdimWHERE d.wc_id = ?1 318299742Sdim AND IS_STRICT_DESCENDANT_OF(d.local_relpath, ?2) 319299742Sdim AND d.op_depth = ?3 320299742Sdim AND NOT EXISTS(SELECT * FROM nodes s 321299742Sdim WHERE s.wc_id = ?1 322299742Sdim AND s.local_relpath = srp 323299742Sdim AND s.op_depth = ?5) 324299742SdimORDER BY d.local_relpath DESC 325299742Sdim 326251881Speter-- STMT_SELECT_OP_DEPTH_CHILDREN 327251881SpeterSELECT local_relpath, kind FROM nodes 328299742SdimWHERE wc_id = ?1 329251881Speter AND parent_relpath = ?2 330251881Speter AND op_depth = ?3 331251881Speter AND presence != MAP_BASE_DELETED 332251881Speter AND file_external is NULL 333299742SdimORDER BY local_relpath 334251881Speter 335299742Sdim-- STMT_SELECT_OP_DEPTH_CHILDREN_EXISTS 336299742SdimSELECT local_relpath, kind FROM nodes 337299742SdimWHERE wc_id = ?1 338299742Sdim AND parent_relpath = ?2 339299742Sdim AND op_depth = ?3 340299742Sdim AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 341299742SdimORDER BY local_relpath 342299742Sdim 343251881Speter/* Used by non-recursive revert to detect higher level children, and 344251881Speter actual-only rows that would be left orphans, if the revert 345251881Speter proceeded. */ 346251881Speter-- STMT_SELECT_GE_OP_DEPTH_CHILDREN 347251881SpeterSELECT 1 FROM nodes 348251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 349299742Sdim AND (op_depth > ?3 OR (op_depth = ?3 350299742Sdim AND presence IN (MAP_NORMAL, MAP_INCOMPLETE))) 351251881SpeterUNION ALL 352251881SpeterSELECT 1 FROM ACTUAL_NODE a 353251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 354251881Speter AND NOT EXISTS (SELECT 1 FROM nodes n 355251881Speter WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath) 356251881Speter 357251881Speter/* Delete the nodes shadowed by local_relpath. Not valid for the wc-root */ 358251881Speter-- STMT_DELETE_SHADOWED_RECURSIVE 359251881SpeterDELETE FROM nodes 360251881SpeterWHERE wc_id = ?1 361251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 362251881Speter AND (op_depth < ?3 363251881Speter OR (op_depth = ?3 AND presence = MAP_BASE_DELETED)) 364251881Speter 365251881Speter-- STMT_CLEAR_MOVED_TO_FROM_DEST 366251881SpeterUPDATE NODES SET moved_to = NULL 367251881SpeterWHERE wc_id = ?1 368251881Speter AND moved_to = ?2 369251881Speter 370251881Speter/* Get not-present descendants of a copied node. Not valid for the wc-root */ 371251881Speter-- STMT_SELECT_NOT_PRESENT_DESCENDANTS 372251881SpeterSELECT local_relpath FROM nodes 373251881SpeterWHERE wc_id = ?1 AND op_depth = ?3 374251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 375251881Speter AND presence = MAP_NOT_PRESENT 376251881Speter 377251881Speter-- STMT_COMMIT_DESCENDANTS_TO_BASE 378251881SpeterUPDATE NODES SET op_depth = 0, 379251881Speter repos_id = ?4, 380299742Sdim repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath), 381251881Speter revision = ?6, 382251881Speter dav_cache = NULL, 383251881Speter moved_here = NULL, 384299742Sdim moved_to = NULL, 385251881Speter presence = CASE presence 386251881Speter WHEN MAP_NORMAL THEN MAP_NORMAL 387251881Speter WHEN MAP_EXCLUDED THEN MAP_EXCLUDED 388251881Speter ELSE MAP_NOT_PRESENT 389251881Speter END 390251881SpeterWHERE wc_id = ?1 391251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 392251881Speter AND op_depth = ?3 393251881Speter 394251881Speter-- STMT_SELECT_NODE_CHILDREN 395251881Speter/* Return all paths that are children of the directory (?1, ?2) in any 396251881Speter op-depth, including children of any underlying, replaced directories. */ 397299742SdimSELECT DISTINCT local_relpath FROM nodes 398251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 399299742SdimORDER BY local_relpath 400251881Speter 401251881Speter-- STMT_SELECT_WORKING_CHILDREN 402251881Speter/* Return all paths that are children of the working version of the 403251881Speter directory (?1, ?2). A given path is not included just because it is a 404251881Speter child of an underlying (replaced) directory, it has to be in the 405251881Speter working version of the directory. */ 406299742SdimSELECT DISTINCT local_relpath FROM nodes 407251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 408251881Speter AND (op_depth > (SELECT MAX(op_depth) FROM nodes 409251881Speter WHERE wc_id = ?1 AND local_relpath = ?2) 410251881Speter OR 411251881Speter (op_depth = (SELECT MAX(op_depth) FROM nodes 412251881Speter WHERE wc_id = ?1 AND local_relpath = ?2) 413299742Sdim AND presence IN (MAP_NORMAL, MAP_INCOMPLETE))) 414299742SdimORDER BY local_relpath 415251881Speter 416299742Sdim-- STMT_SELECT_BASE_NOT_PRESENT_CHILDREN 417299742SdimSELECT local_relpath FROM nodes 418299742SdimWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 419299742Sdim AND presence = MAP_NOT_PRESENT 420299742SdimORDER BY local_relpath 421299742Sdim 422251881Speter-- STMT_SELECT_NODE_PROPS 423251881SpeterSELECT properties, presence FROM nodes 424251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 425251881SpeterORDER BY op_depth DESC 426251881Speter 427251881Speter-- STMT_SELECT_ACTUAL_PROPS 428251881SpeterSELECT properties FROM actual_node 429251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 430251881Speter 431251881Speter-- STMT_UPDATE_ACTUAL_PROPS 432251881SpeterUPDATE actual_node SET properties = ?3 433251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 434251881Speter 435251881Speter-- STMT_INSERT_ACTUAL_PROPS 436251881SpeterINSERT INTO actual_node (wc_id, local_relpath, parent_relpath, properties) 437251881SpeterVALUES (?1, ?2, ?3, ?4) 438251881Speter 439251881Speter-- STMT_INSERT_LOCK 440251881SpeterINSERT OR REPLACE INTO lock 441251881Speter(repos_id, repos_relpath, lock_token, lock_owner, lock_comment, 442251881Speter lock_date) 443251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6) 444251881Speter 445251881Speter/* Not valid for the working copy root */ 446251881Speter-- STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE 447251881SpeterSELECT nodes.repos_id, nodes.repos_path, lock_token 448251881SpeterFROM nodes 449251881SpeterLEFT JOIN lock ON nodes.repos_id = lock.repos_id 450251881Speter AND nodes.repos_path = lock.repos_relpath 451251881SpeterWHERE wc_id = ?1 AND op_depth = 0 452251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 453251881Speter 454251881Speter-- STMT_INSERT_WCROOT 455251881SpeterINSERT INTO wcroot (local_abspath) 456251881SpeterVALUES (?1) 457251881Speter 458251881Speter-- STMT_UPDATE_BASE_NODE_DAV_CACHE 459251881SpeterUPDATE nodes SET dav_cache = ?3 460251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 461251881Speter 462251881Speter-- STMT_SELECT_BASE_DAV_CACHE 463251881SpeterSELECT dav_cache FROM nodes 464251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 465251881Speter 466251881Speter-- STMT_SELECT_DELETION_INFO 467299742SdimSELECT b.presence, w.presence, w.op_depth, w.moved_to 468299742SdimFROM nodes w 469299742SdimLEFT JOIN nodes b ON b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0 470299742SdimWHERE w.wc_id = ?1 AND w.local_relpath = ?2 471299742Sdim AND w.op_depth = (SELECT MAX(op_depth) FROM nodes d 472299742Sdim WHERE d.wc_id = ?1 AND d.local_relpath = ?2 473299742Sdim AND d.op_depth > 0) 474251881SpeterLIMIT 1 475251881Speter 476269847Speter-- STMT_SELECT_MOVED_TO_NODE 477269847SpeterSELECT op_depth, moved_to 478269847SpeterFROM nodes 479269847SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND moved_to IS NOT NULL 480269847SpeterORDER BY op_depth DESC 481269847Speter 482251881Speter-- STMT_SELECT_OP_DEPTH_MOVED_TO 483299742SdimSELECT op_depth, moved_to 484251881SpeterFROM nodes 485299742SdimWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 486299742Sdim AND EXISTS(SELECT * from nodes 487299742Sdim WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 488299742Sdim AND presence IN (MAP_NORMAL, MAP_INCOMPLETE)) 489299742SdimORDER BY op_depth ASC 490299742SdimLIMIT 1 491251881Speter 492251881Speter-- STMT_SELECT_MOVED_TO 493251881SpeterSELECT moved_to 494251881SpeterFROM nodes 495251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 496251881Speter 497251881Speter-- STMT_SELECT_MOVED_BACK 498251881SpeterSELECT u.local_relpath, 499251881Speter u.presence, u.repos_id, u.repos_path, u.revision, 500251881Speter l.presence, l.repos_id, l.repos_path, l.revision, 501251881Speter u.moved_here, u.moved_to 502251881SpeterFROM nodes u 503251881SpeterLEFT OUTER JOIN nodes l ON l.wc_id = ?1 504251881Speter AND l.local_relpath = u.local_relpath 505251881Speter AND l.op_depth = ?3 506251881SpeterWHERE u.wc_id = ?1 507251881Speter AND u.local_relpath = ?2 508251881Speter AND u.op_depth = ?4 509251881SpeterUNION ALL 510251881SpeterSELECT u.local_relpath, 511251881Speter u.presence, u.repos_id, u.repos_path, u.revision, 512251881Speter l.presence, l.repos_id, l.repos_path, l.revision, 513251881Speter u.moved_here, NULL 514251881SpeterFROM nodes u 515251881SpeterLEFT OUTER JOIN nodes l ON l.wc_id=?1 516251881Speter AND l.local_relpath=u.local_relpath 517251881Speter AND l.op_depth=?3 518251881SpeterWHERE u.wc_id = ?1 519251881Speter AND IS_STRICT_DESCENDANT_OF(u.local_relpath, ?2) 520251881Speter AND u.op_depth = ?4 521251881Speter 522251881Speter-- STMT_DELETE_LOCK 523251881SpeterDELETE FROM lock 524251881SpeterWHERE repos_id = ?1 AND repos_relpath = ?2 525251881Speter 526253734Speter-- STMT_DELETE_LOCK_RECURSIVELY 527253734SpeterDELETE FROM lock 528253734SpeterWHERE repos_id = ?1 AND (repos_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(repos_relpath, ?2)) 529253734Speter 530251881Speter-- STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE 531251881SpeterUPDATE nodes SET dav_cache = NULL 532251881SpeterWHERE dav_cache IS NOT NULL AND wc_id = ?1 AND op_depth = 0 533251881Speter AND (local_relpath = ?2 534251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 535251881Speter 536251881Speter-- STMT_RECURSIVE_UPDATE_NODE_REPO 537251881SpeterUPDATE nodes SET repos_id = ?4, dav_cache = NULL 538251881Speter/* ### The Sqlite optimizer needs help here ### 539251881Speter * WHERE wc_id = ?1 540251881Speter * AND repos_id = ?3 541251881Speter * AND (local_relpath = ?2 542251881Speter * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))*/ 543251881SpeterWHERE (wc_id = ?1 AND local_relpath = ?2 AND repos_id = ?3) 544251881Speter OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 545251881Speter AND repos_id = ?3) 546251881Speter 547299742Sdim 548251881Speter-- STMT_UPDATE_LOCK_REPOS_ID 549251881SpeterUPDATE lock SET repos_id = ?2 550251881SpeterWHERE repos_id = ?1 551251881Speter 552251881Speter-- STMT_UPDATE_NODE_FILEINFO 553251881SpeterUPDATE nodes SET translated_size = ?3, last_mod_time = ?4 554251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 555251881Speter AND op_depth = (SELECT MAX(op_depth) FROM nodes 556251881Speter WHERE wc_id = ?1 AND local_relpath = ?2) 557251881Speter 558251881Speter-- STMT_INSERT_ACTUAL_CONFLICT 559251881SpeterINSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) 560251881SpeterVALUES (?1, ?2, ?3, ?4) 561251881Speter 562251881Speter-- STMT_UPDATE_ACTUAL_CONFLICT 563251881SpeterUPDATE actual_node SET conflict_data = ?3 564251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 565251881Speter 566251881Speter-- STMT_UPDATE_ACTUAL_CHANGELISTS 567251881SpeterUPDATE actual_node SET changelist = ?3 568251881SpeterWHERE wc_id = ?1 569251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 570251881Speter AND local_relpath = (SELECT local_relpath FROM targets_list AS t 571251881Speter WHERE wc_id = ?1 572251881Speter AND t.local_relpath = actual_node.local_relpath 573251881Speter AND kind = MAP_FILE) 574251881Speter 575251881Speter-- STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST 576251881SpeterUPDATE actual_node SET changelist = NULL 577251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 578251881Speter 579251881Speter-- STMT_MARK_SKIPPED_CHANGELIST_DIRS 580251881Speter/* 7 corresponds to svn_wc_notify_skip */ 581251881SpeterINSERT INTO changelist_list (wc_id, local_relpath, notify, changelist) 582251881SpeterSELECT wc_id, local_relpath, 7, ?3 583251881SpeterFROM targets_list 584251881SpeterWHERE wc_id = ?1 585251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 586251881Speter AND kind = MAP_DIR 587251881Speter 588251881Speter-- STMT_RESET_ACTUAL_WITH_CHANGELIST 589251881SpeterREPLACE INTO actual_node ( 590251881Speter wc_id, local_relpath, parent_relpath, changelist) 591251881SpeterVALUES (?1, ?2, ?3, ?4) 592251881Speter 593251881Speter-- STMT_CREATE_CHANGELIST_LIST 594251881SpeterDROP TABLE IF EXISTS changelist_list; 595251881SpeterCREATE TEMPORARY TABLE changelist_list ( 596251881Speter wc_id INTEGER NOT NULL, 597251881Speter local_relpath TEXT NOT NULL, 598251881Speter notify INTEGER NOT NULL, 599251881Speter changelist TEXT NOT NULL, 600251881Speter /* Order NOTIFY descending to make us show clears (27) before adds (26) */ 601251881Speter PRIMARY KEY (wc_id, local_relpath, notify DESC) 602251881Speter) 603251881Speter 604251881Speter/* Create notify items for when a node is removed from a changelist and 605251881Speter when a node is added to a changelist. Make sure nothing is notified 606251881Speter if there were no changes. 607251881Speter*/ 608251881Speter-- STMT_CREATE_CHANGELIST_TRIGGER 609251881SpeterDROP TRIGGER IF EXISTS trigger_changelist_list_change; 610251881SpeterCREATE TEMPORARY TRIGGER trigger_changelist_list_change 611251881SpeterBEFORE UPDATE ON actual_node 612251881SpeterWHEN old.changelist IS NOT new.changelist 613251881SpeterBEGIN 614251881Speter /* 27 corresponds to svn_wc_notify_changelist_clear */ 615251881Speter INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) 616251881Speter SELECT old.wc_id, old.local_relpath, 27, old.changelist 617251881Speter WHERE old.changelist is NOT NULL; 618251881Speter 619251881Speter /* 26 corresponds to svn_wc_notify_changelist_set */ 620251881Speter INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) 621251881Speter SELECT new.wc_id, new.local_relpath, 26, new.changelist 622251881Speter WHERE new.changelist IS NOT NULL; 623251881SpeterEND 624251881Speter 625251881Speter-- STMT_FINALIZE_CHANGELIST 626251881SpeterDROP TRIGGER trigger_changelist_list_change; 627251881SpeterDROP TABLE changelist_list; 628251881SpeterDROP TABLE targets_list 629251881Speter 630251881Speter-- STMT_SELECT_CHANGELIST_LIST 631251881SpeterSELECT wc_id, local_relpath, notify, changelist 632251881SpeterFROM changelist_list 633251881SpeterORDER BY wc_id, local_relpath ASC, notify DESC 634251881Speter 635251881Speter-- STMT_CREATE_TARGETS_LIST 636251881SpeterDROP TABLE IF EXISTS targets_list; 637251881SpeterCREATE TEMPORARY TABLE targets_list ( 638251881Speter wc_id INTEGER NOT NULL, 639251881Speter local_relpath TEXT NOT NULL, 640251881Speter parent_relpath TEXT, 641251881Speter kind TEXT NOT NULL, 642251881Speter PRIMARY KEY (wc_id, local_relpath) 643251881Speter ); 644251881Speter/* need more indicies? */ 645251881Speter 646251881Speter-- STMT_DROP_TARGETS_LIST 647251881SpeterDROP TABLE targets_list 648251881Speter 649251881Speter-- STMT_INSERT_TARGET 650251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 651251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 652251881SpeterFROM nodes_current 653251881SpeterWHERE wc_id = ?1 654251881Speter AND local_relpath = ?2 655251881Speter 656251881Speter-- STMT_INSERT_TARGET_DEPTH_FILES 657251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 658251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 659251881SpeterFROM nodes_current 660251881SpeterWHERE wc_id = ?1 661251881Speter AND parent_relpath = ?2 662251881Speter AND kind = MAP_FILE 663251881Speter 664251881Speter-- STMT_INSERT_TARGET_DEPTH_IMMEDIATES 665251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 666251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 667251881SpeterFROM nodes_current 668251881SpeterWHERE wc_id = ?1 669251881Speter AND parent_relpath = ?2 670251881Speter 671251881Speter-- STMT_INSERT_TARGET_DEPTH_INFINITY 672251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 673251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 674251881SpeterFROM nodes_current 675251881SpeterWHERE wc_id = ?1 676251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 677251881Speter 678251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST 679251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 680251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 681251881Speter FROM actual_node AS A JOIN nodes_current AS N 682251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 683251881Speter WHERE N.wc_id = ?1 684251881Speter AND N.local_relpath = ?2 685251881Speter AND A.changelist = ?3 686251881Speter 687251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES 688251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 689251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 690251881Speter FROM actual_node AS A JOIN nodes_current AS N 691251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 692251881Speter WHERE N.wc_id = ?1 693251881Speter AND N.parent_relpath = ?2 694251881Speter AND kind = MAP_FILE 695251881Speter AND A.changelist = ?3 696251881Speter 697251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES 698251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 699251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 700251881Speter FROM actual_node AS A JOIN nodes_current AS N 701251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 702251881Speter WHERE N.wc_id = ?1 703251881Speter AND N.parent_relpath = ?2 704251881Speter AND A.changelist = ?3 705251881Speter 706251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY 707251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 708251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 709251881Speter FROM actual_node AS A JOIN nodes_current AS N 710251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 711251881Speter WHERE N.wc_id = ?1 712251881Speter AND IS_STRICT_DESCENDANT_OF(N.local_relpath, ?2) 713251881Speter AND A.changelist = ?3 714251881Speter 715251881Speter/* Only used by commented dump_targets() in wc_db.c */ 716251881Speter/*-- STMT_SELECT_TARGETS 717251881SpeterSELECT local_relpath, parent_relpath from targets_list*/ 718251881Speter 719251881Speter-- STMT_INSERT_ACTUAL_EMPTIES 720251881SpeterINSERT OR IGNORE INTO actual_node ( 721251881Speter wc_id, local_relpath, parent_relpath) 722251881SpeterSELECT wc_id, local_relpath, parent_relpath 723251881SpeterFROM targets_list 724251881Speter 725299742Sdim-- STMT_INSERT_ACTUAL_EMPTIES_FILES 726299742SdimINSERT OR IGNORE INTO actual_node ( 727299742Sdim wc_id, local_relpath, parent_relpath) 728299742SdimSELECT wc_id, local_relpath, parent_relpath 729299742SdimFROM targets_list 730299742SdimWHERE kind=MAP_FILE 731299742Sdim 732251881Speter-- STMT_DELETE_ACTUAL_EMPTY 733251881SpeterDELETE FROM actual_node 734251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 735251881Speter AND properties IS NULL 736251881Speter AND conflict_data IS NULL 737251881Speter AND changelist IS NULL 738251881Speter AND text_mod IS NULL 739251881Speter AND older_checksum IS NULL 740251881Speter AND right_checksum IS NULL 741251881Speter AND left_checksum IS NULL 742251881Speter 743251881Speter-- STMT_DELETE_ACTUAL_EMPTIES 744251881SpeterDELETE FROM actual_node 745251881SpeterWHERE wc_id = ?1 746299742Sdim AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 747251881Speter AND properties IS NULL 748251881Speter AND conflict_data IS NULL 749251881Speter AND changelist IS NULL 750251881Speter AND text_mod IS NULL 751251881Speter AND older_checksum IS NULL 752251881Speter AND right_checksum IS NULL 753251881Speter AND left_checksum IS NULL 754251881Speter 755251881Speter-- STMT_DELETE_BASE_NODE 756251881SpeterDELETE FROM nodes 757251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 758251881Speter 759251881Speter-- STMT_DELETE_WORKING_NODE 760251881SpeterDELETE FROM nodes 761251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 762251881Speter AND op_depth = (SELECT MAX(op_depth) FROM nodes 763251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0) 764251881Speter 765251881Speter-- STMT_DELETE_LOWEST_WORKING_NODE 766251881SpeterDELETE FROM nodes 767251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 768251881Speter AND op_depth = (SELECT MIN(op_depth) FROM nodes 769251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) 770251881Speter AND presence = MAP_BASE_DELETED 771251881Speter 772269847Speter-- STMT_DELETE_NODE_ALL_LAYERS 773251881SpeterDELETE FROM nodes 774251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 775251881Speter 776251881Speter-- STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE 777251881SpeterDELETE FROM nodes 778251881SpeterWHERE wc_id = ?1 779251881Speter AND (local_relpath = ?2 780251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 781251881Speter AND op_depth >= ?3 782251881Speter 783251881Speter-- STMT_DELETE_ACTUAL_NODE 784251881SpeterDELETE FROM actual_node 785251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 786251881Speter 787251881Speter/* Will not delete recursive when run on the wcroot */ 788251881Speter-- STMT_DELETE_ACTUAL_NODE_RECURSIVE 789251881SpeterDELETE FROM actual_node 790251881SpeterWHERE wc_id = ?1 791251881Speter AND (local_relpath = ?2 792251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 793251881Speter 794251881Speter-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST 795251881SpeterDELETE FROM actual_node 796251881SpeterWHERE wc_id = ?1 797251881Speter AND local_relpath = ?2 798251881Speter AND (changelist IS NULL 799251881Speter OR NOT EXISTS (SELECT 1 FROM nodes_current c 800251881Speter WHERE c.wc_id = ?1 AND c.local_relpath = ?2 801251881Speter AND c.kind = MAP_FILE)) 802251881Speter 803251881Speter-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 804251881SpeterDELETE FROM actual_node 805251881SpeterWHERE wc_id = ?1 806251881Speter AND (local_relpath = ?2 807251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 808251881Speter AND (changelist IS NULL 809251881Speter OR NOT EXISTS (SELECT 1 FROM nodes_current c 810299742Sdim WHERE c.wc_id = ?1 811251881Speter AND c.local_relpath = actual_node.local_relpath 812251881Speter AND c.kind = MAP_FILE)) 813251881Speter 814251881Speter-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST 815251881SpeterUPDATE actual_node 816251881SpeterSET properties = NULL, 817251881Speter text_mod = NULL, 818251881Speter conflict_data = NULL, 819251881Speter tree_conflict_data = NULL, 820251881Speter older_checksum = NULL, 821251881Speter left_checksum = NULL, 822251881Speter right_checksum = NULL 823251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 824251881Speter 825299742Sdim-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CONFLICT 826299742SdimUPDATE actual_node 827299742SdimSET properties = NULL, 828299742Sdim text_mod = NULL, 829299742Sdim tree_conflict_data = NULL, 830299742Sdim older_checksum = NULL, 831299742Sdim left_checksum = NULL, 832299742Sdim right_checksum = NULL, 833299742Sdim changelist = NULL 834299742SdimWHERE wc_id = ?1 AND local_relpath = ?2 835299742Sdim 836251881Speter-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 837251881SpeterUPDATE actual_node 838251881SpeterSET properties = NULL, 839251881Speter text_mod = NULL, 840251881Speter conflict_data = NULL, 841251881Speter tree_conflict_data = NULL, 842251881Speter older_checksum = NULL, 843251881Speter left_checksum = NULL, 844251881Speter right_checksum = NULL 845251881SpeterWHERE wc_id = ?1 846251881Speter AND (local_relpath = ?2 847251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 848251881Speter 849251881Speter-- STMT_UPDATE_NODE_BASE_DEPTH 850251881SpeterUPDATE nodes SET depth = ?3 851251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 852251881Speter AND kind=MAP_DIR 853299742Sdim AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 854251881Speter 855251881Speter-- STMT_UPDATE_NODE_BASE_PRESENCE 856251881SpeterUPDATE nodes SET presence = ?3 857251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 858251881Speter 859251881Speter-- STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH 860251881SpeterUPDATE nodes SET presence = ?3, revision = ?4, repos_path = ?5 861251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 862251881Speter 863251881Speter-- STMT_LOOK_FOR_WORK 864251881SpeterSELECT id FROM work_queue LIMIT 1 865251881Speter 866251881Speter-- STMT_INSERT_WORK_ITEM 867251881SpeterINSERT INTO work_queue (work) VALUES (?1) 868251881Speter 869251881Speter-- STMT_SELECT_WORK_ITEM 870251881SpeterSELECT id, work FROM work_queue ORDER BY id LIMIT 1 871251881Speter 872251881Speter-- STMT_DELETE_WORK_ITEM 873251881SpeterDELETE FROM work_queue WHERE id = ?1 874251881Speter 875251881Speter-- STMT_INSERT_OR_IGNORE_PRISTINE 876251881SpeterINSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount) 877251881SpeterVALUES (?1, ?2, ?3, 0) 878251881Speter 879251881Speter-- STMT_INSERT_PRISTINE 880251881SpeterINSERT INTO pristine (checksum, md5_checksum, size, refcount) 881251881SpeterVALUES (?1, ?2, ?3, 0) 882251881Speter 883251881Speter-- STMT_SELECT_PRISTINE 884251881SpeterSELECT md5_checksum 885251881SpeterFROM pristine 886251881SpeterWHERE checksum = ?1 887251881Speter 888251881Speter-- STMT_SELECT_PRISTINE_SIZE 889251881SpeterSELECT size 890251881SpeterFROM pristine 891251881SpeterWHERE checksum = ?1 LIMIT 1 892251881Speter 893251881Speter-- STMT_SELECT_PRISTINE_BY_MD5 894251881SpeterSELECT checksum 895251881SpeterFROM pristine 896251881SpeterWHERE md5_checksum = ?1 897251881Speter 898251881Speter-- STMT_SELECT_UNREFERENCED_PRISTINES 899251881SpeterSELECT checksum 900251881SpeterFROM pristine 901251881SpeterWHERE refcount = 0 902251881Speter 903251881Speter-- STMT_DELETE_PRISTINE_IF_UNREFERENCED 904251881SpeterDELETE FROM pristine 905251881SpeterWHERE checksum = ?1 AND refcount = 0 906251881Speter 907251881Speter-- STMT_SELECT_COPY_PRISTINES 908251881Speter/* For the root itself */ 909251881SpeterSELECT n.checksum, md5_checksum, size 910251881SpeterFROM nodes_current n 911251881SpeterLEFT JOIN pristine p ON n.checksum = p.checksum 912251881SpeterWHERE wc_id = ?1 913251881Speter AND n.local_relpath = ?2 914251881Speter AND n.checksum IS NOT NULL 915251881SpeterUNION ALL 916251881Speter/* And all descendants */ 917251881SpeterSELECT n.checksum, md5_checksum, size 918251881SpeterFROM nodes n 919251881SpeterLEFT JOIN pristine p ON n.checksum = p.checksum 920251881SpeterWHERE wc_id = ?1 921251881Speter AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 922251881Speter AND op_depth >= 923251881Speter (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2) 924251881Speter AND n.checksum IS NOT NULL 925251881Speter 926251881Speter-- STMT_VACUUM 927251881SpeterVACUUM 928251881Speter 929251881Speter-- STMT_SELECT_CONFLICT_VICTIMS 930251881SpeterSELECT local_relpath, conflict_data 931251881SpeterFROM actual_node 932251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND 933251881Speter NOT (conflict_data IS NULL) 934251881Speter 935251881Speter-- STMT_INSERT_WC_LOCK 936251881SpeterINSERT INTO wc_lock (wc_id, local_dir_relpath, locked_levels) 937251881SpeterVALUES (?1, ?2, ?3) 938251881Speter 939251881Speter-- STMT_SELECT_WC_LOCK 940251881SpeterSELECT locked_levels FROM wc_lock 941251881SpeterWHERE wc_id = ?1 AND local_dir_relpath = ?2 942251881Speter 943251881Speter-- STMT_SELECT_ANCESTOR_WCLOCKS 944251881SpeterSELECT local_dir_relpath, locked_levels FROM wc_lock 945251881SpeterWHERE wc_id = ?1 946251881Speter AND ((local_dir_relpath >= ?3 AND local_dir_relpath <= ?2) 947251881Speter OR local_dir_relpath = '') 948251881Speter 949251881Speter-- STMT_DELETE_WC_LOCK 950251881SpeterDELETE FROM wc_lock 951251881SpeterWHERE wc_id = ?1 AND local_dir_relpath = ?2 952251881Speter 953251881Speter-- STMT_FIND_WC_LOCK 954251881SpeterSELECT local_dir_relpath FROM wc_lock 955251881SpeterWHERE wc_id = ?1 956251881Speter AND IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2) 957251881Speter 958299742Sdim-- STMT_FIND_CONFLICT_DESCENDANT 959299742SdimSELECT 1 FROM actual_node 960299742SdimWHERE wc_id = ?1 961299742Sdim AND local_relpath > (?2 || '/') 962299742Sdim AND local_relpath < (?2 || '0') /* '0' = ascii('/') +1 */ 963299742Sdim AND conflict_data IS NOT NULL 964299742SdimLIMIT 1 965299742Sdim 966251881Speter-- STMT_DELETE_WC_LOCK_ORPHAN 967251881SpeterDELETE FROM wc_lock 968251881SpeterWHERE wc_id = ?1 AND local_dir_relpath = ?2 969251881SpeterAND NOT EXISTS (SELECT 1 FROM nodes 970251881Speter WHERE nodes.wc_id = ?1 971251881Speter AND nodes.local_relpath = wc_lock.local_dir_relpath) 972251881Speter 973251881Speter-- STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE 974251881SpeterDELETE FROM wc_lock 975251881SpeterWHERE wc_id = ?1 976251881Speter AND (local_dir_relpath = ?2 977251881Speter OR IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2)) 978251881Speter AND NOT EXISTS (SELECT 1 FROM nodes 979251881Speter WHERE nodes.wc_id = ?1 980251881Speter AND nodes.local_relpath = wc_lock.local_dir_relpath) 981251881Speter 982251881Speter-- STMT_APPLY_CHANGES_TO_BASE_NODE 983251881Speter/* translated_size and last_mod_time are not mentioned here because they will 984251881Speter be tweaked after the working-file is installed. When we replace an existing 985251881Speter BASE node (read: bump), preserve its file_external status. */ 986251881SpeterINSERT OR REPLACE INTO nodes ( 987251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 988251881Speter revision, presence, depth, kind, changed_revision, changed_date, 989251881Speter changed_author, checksum, properties, dav_cache, symlink_target, 990251881Speter inherited_props, file_external ) 991251881SpeterVALUES (?1, ?2, 0, 992251881Speter ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, 993251881Speter (SELECT file_external FROM nodes 994251881Speter WHERE wc_id = ?1 995251881Speter AND local_relpath = ?2 996251881Speter AND op_depth = 0)) 997251881Speter 998251881Speter-- STMT_INSTALL_WORKING_NODE_FOR_DELETE 999299742SdimINSERT INTO nodes ( 1000251881Speter wc_id, local_relpath, op_depth, 1001251881Speter parent_relpath, presence, kind) 1002251881SpeterVALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5) 1003251881Speter 1004251881Speter-- STMT_REPLACE_WITH_BASE_DELETED 1005251881SpeterINSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath, 1006251881Speter kind, moved_to, presence) 1007251881SpeterSELECT wc_id, local_relpath, op_depth, parent_relpath, 1008251881Speter kind, moved_to, MAP_BASE_DELETED 1009251881Speter FROM nodes 1010251881Speter WHERE wc_id = ?1 1011299742Sdim AND local_relpath = ?2 1012251881Speter AND op_depth = ?3 1013251881Speter 1014299742Sdim/* If this query is updated, STMT_INSERT_DELETE_LIST should too. 1015299742Sdim Use UNION ALL instead of a simple 'OR' to avoid creating a temp table */ 1016251881Speter-- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE 1017251881SpeterINSERT INTO nodes ( 1018251881Speter wc_id, local_relpath, op_depth, parent_relpath, presence, kind) 1019251881SpeterSELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED, 1020251881Speter kind 1021251881SpeterFROM nodes 1022299742SdimWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1023299742SdimUNION ALL 1024299742SdimSELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED, 1025299742Sdim kind 1026299742SdimFROM nodes 1027251881SpeterWHERE wc_id = ?1 1028299742Sdim AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1029251881Speter AND op_depth = ?3 1030251881Speter AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) 1031251881Speter AND file_external IS NULL 1032299742SdimORDER BY local_relpath 1033251881Speter 1034251881Speter-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY 1035299742SdimINSERT OR REPLACE INTO nodes ( 1036251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 1037251881Speter revision, presence, depth, kind, changed_revision, changed_date, 1038251881Speter changed_author, checksum, properties, translated_size, last_mod_time, 1039299742Sdim symlink_target, moved_to ) 1040251881SpeterSELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id, 1041251881Speter repos_path, revision, presence, depth, kind, changed_revision, 1042251881Speter changed_date, changed_author, checksum, properties, translated_size, 1043299742Sdim last_mod_time, symlink_target, 1044299742Sdim (SELECT moved_to FROM nodes 1045299742Sdim WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3) moved_to 1046251881SpeterFROM nodes 1047251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1048251881Speter 1049251881Speter-- STMT_INSERT_DELETE_FROM_BASE 1050251881SpeterINSERT INTO nodes ( 1051251881Speter wc_id, local_relpath, op_depth, parent_relpath, presence, kind) 1052251881SpeterSELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, 1053251881Speter MAP_BASE_DELETED, kind 1054251881SpeterFROM nodes 1055251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1056251881Speter 1057251881Speter/* Not valid on the wc-root */ 1058251881Speter-- STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE 1059251881SpeterUPDATE nodes SET op_depth = ?3 + 1 1060251881SpeterWHERE wc_id = ?1 1061251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1062251881Speter AND op_depth = ?3 1063251881Speter 1064299742Sdim/* Duplicated SELECT body to avoid creating temporary table */ 1065299742Sdim-- STMT_COPY_OP_DEPTH_RECURSIVE 1066299742SdimINSERT INTO nodes ( 1067299742Sdim wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 1068299742Sdim revision, presence, depth, kind, changed_revision, changed_date, 1069299742Sdim changed_author, checksum, properties, translated_size, last_mod_time, 1070299742Sdim symlink_target, moved_here, moved_to ) 1071299742SdimSELECT 1072299742Sdim wc_id, local_relpath, ?4, parent_relpath, repos_id, 1073299742Sdim repos_path, revision, presence, depth, kind, changed_revision, 1074299742Sdim changed_date, changed_author, checksum, properties, translated_size, 1075299742Sdim last_mod_time, symlink_target, NULL, NULL 1076299742SdimFROM nodes 1077299742SdimWHERE wc_id = ?1 AND op_depth = ?3 AND local_relpath = ?2 1078299742SdimUNION ALL 1079299742SdimSELECT 1080299742Sdim wc_id, local_relpath, ?4, parent_relpath, repos_id, 1081299742Sdim repos_path, revision, presence, depth, kind, changed_revision, 1082299742Sdim changed_date, changed_author, checksum, properties, translated_size, 1083299742Sdim last_mod_time, symlink_target, NULL, NULL 1084299742SdimFROM nodes 1085299742SdimWHERE wc_id = ?1 AND op_depth = ?3 1086299742Sdim AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1087299742SdimORDER BY local_relpath 1088251881Speter 1089251881Speter-- STMT_DOES_NODE_EXIST 1090251881SpeterSELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 1091251881SpeterLIMIT 1 1092251881Speter 1093251881Speter-- STMT_HAS_SERVER_EXCLUDED_DESCENDANTS 1094251881SpeterSELECT local_relpath FROM nodes 1095251881SpeterWHERE wc_id = ?1 1096251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1097251881Speter AND op_depth = 0 AND presence = MAP_SERVER_EXCLUDED 1098251881SpeterLIMIT 1 1099251881Speter 1100251881Speter/* Select all excluded nodes. Not valid on the WC-root */ 1101251881Speter-- STMT_SELECT_ALL_EXCLUDED_DESCENDANTS 1102251881SpeterSELECT local_relpath FROM nodes 1103251881SpeterWHERE wc_id = ?1 1104251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1105251881Speter AND op_depth = 0 1106251881Speter AND (presence = MAP_SERVER_EXCLUDED OR presence = MAP_EXCLUDED) 1107251881Speter 1108251881Speter/* Creates a copy from one top level NODE to a different location */ 1109251881Speter-- STMT_INSERT_WORKING_NODE_COPY_FROM 1110251881SpeterINSERT OR REPLACE INTO nodes ( 1111251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, 1112251881Speter repos_path, revision, presence, depth, moved_here, kind, changed_revision, 1113251881Speter changed_date, changed_author, checksum, properties, translated_size, 1114251881Speter last_mod_time, symlink_target, moved_to ) 1115251881SpeterSELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/, 1116251881Speter repos_id, repos_path, revision, ?6 /*presence*/, depth, 1117251881Speter ?7/*moved_here*/, kind, changed_revision, changed_date, 1118251881Speter changed_author, checksum, properties, translated_size, 1119251881Speter last_mod_time, symlink_target, 1120251881Speter (SELECT dst.moved_to FROM nodes AS dst 1121251881Speter WHERE dst.wc_id = ?1 1122251881Speter AND dst.local_relpath = ?3 1123251881Speter AND dst.op_depth = ?4) 1124251881SpeterFROM nodes_current 1125251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1126251881Speter 1127251881Speter-- STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH 1128251881SpeterINSERT OR REPLACE INTO nodes ( 1129251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, 1130251881Speter repos_path, revision, presence, depth, moved_here, kind, changed_revision, 1131251881Speter changed_date, changed_author, checksum, properties, translated_size, 1132251881Speter last_mod_time, symlink_target, moved_to ) 1133251881SpeterSELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/, 1134251881Speter repos_id, repos_path, revision, ?6 /*presence*/, depth, 1135251881Speter ?8 /*moved_here*/, kind, changed_revision, changed_date, 1136251881Speter changed_author, checksum, properties, translated_size, 1137251881Speter last_mod_time, symlink_target, 1138251881Speter (SELECT dst.moved_to FROM nodes AS dst 1139251881Speter WHERE dst.wc_id = ?1 1140251881Speter AND dst.local_relpath = ?3 1141251881Speter AND dst.op_depth = ?4) 1142251881SpeterFROM nodes 1143251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?7 1144251881Speter 1145251881Speter-- STMT_UPDATE_BASE_REVISION 1146251881SpeterUPDATE nodes SET revision = ?3 1147251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1148251881Speter 1149251881Speter-- STMT_UPDATE_BASE_REPOS 1150251881SpeterUPDATE nodes SET repos_id = ?3, repos_path = ?4 1151251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1152251881Speter 1153251881Speter-- STMT_ACTUAL_HAS_CHILDREN 1154251881SpeterSELECT 1 FROM actual_node 1155251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 1156251881SpeterLIMIT 1 1157251881Speter 1158251881Speter-- STMT_INSERT_EXTERNAL 1159251881SpeterINSERT OR REPLACE INTO externals ( 1160251881Speter wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath, 1161251881Speter repos_id, def_repos_relpath, def_operational_revision, def_revision) 1162251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10) 1163251881Speter 1164251881Speter-- STMT_SELECT_EXTERNAL_INFO 1165251881SpeterSELECT presence, kind, def_local_relpath, repos_id, 1166251881Speter def_repos_relpath, def_operational_revision, def_revision 1167251881SpeterFROM externals WHERE wc_id = ?1 AND local_relpath = ?2 1168251881SpeterLIMIT 1 1169251881Speter 1170251881Speter-- STMT_DELETE_FILE_EXTERNALS 1171251881SpeterDELETE FROM nodes 1172251881SpeterWHERE wc_id = ?1 1173251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1174251881Speter AND op_depth = 0 1175251881Speter AND file_external IS NOT NULL 1176251881Speter 1177251881Speter-- STMT_DELETE_FILE_EXTERNAL_REGISTATIONS 1178251881SpeterDELETE FROM externals 1179251881SpeterWHERE wc_id = ?1 1180251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1181251881Speter AND kind != MAP_DIR 1182251881Speter 1183251881Speter-- STMT_DELETE_EXTERNAL_REGISTATIONS 1184251881SpeterDELETE FROM externals 1185251881SpeterWHERE wc_id = ?1 1186251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1187251881Speter 1188251881Speter/* Select all committable externals, i.e. only unpegged ones on the same 1189251881Speter * repository as the target path ?2, that are defined by WC ?1 to 1190251881Speter * live below the target path. It does not matter which ancestor has the 1191251881Speter * svn:externals definition, only the local path at which the external is 1192251881Speter * supposed to be checked out is queried. 1193251881Speter * Arguments: 1194251881Speter * ?1: wc_id. 1195251881Speter * ?2: the target path, local relpath inside ?1. 1196251881Speter * 1197251881Speter * ### NOTE: This statement deliberately removes file externals that live 1198251881Speter * inside an unversioned dir, because commit still breaks on those. 1199251881Speter * Once that's been fixed, the conditions below "--->8---" become obsolete. */ 1200251881Speter-- STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW 1201251881SpeterSELECT local_relpath, kind, def_repos_relpath, 1202251881Speter (SELECT root FROM repository AS r WHERE r.id = e.repos_id) 1203251881SpeterFROM externals e 1204251881SpeterWHERE wc_id = ?1 1205251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1206251881Speter AND def_revision IS NULL 1207251881Speter AND repos_id = (SELECT repos_id 1208251881Speter FROM nodes AS n 1209251881Speter WHERE n.wc_id = ?1 1210251881Speter AND n.local_relpath = '' 1211251881Speter AND n.op_depth = 0) 1212251881Speter AND ((kind='dir') 1213251881Speter OR EXISTS (SELECT 1 FROM nodes 1214251881Speter WHERE nodes.wc_id = e.wc_id 1215251881Speter AND nodes.local_relpath = e.parent_relpath)) 1216251881Speter 1217251881Speter-- STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW 1218251881SpeterSELECT local_relpath, kind, def_repos_relpath, 1219251881Speter (SELECT root FROM repository AS r WHERE r.id = e.repos_id) 1220251881SpeterFROM externals e 1221251881SpeterWHERE wc_id = ?1 1222251881Speter AND IS_STRICT_DESCENDANT_OF(e.local_relpath, ?2) 1223251881Speter AND parent_relpath = ?2 1224251881Speter AND def_revision IS NULL 1225251881Speter AND repos_id = (SELECT repos_id 1226251881Speter FROM nodes AS n 1227251881Speter WHERE n.wc_id = ?1 1228251881Speter AND n.local_relpath = '' 1229251881Speter AND n.op_depth = 0) 1230251881Speter AND ((kind='dir') 1231251881Speter OR EXISTS (SELECT 1 FROM nodes 1232251881Speter WHERE nodes.wc_id = e.wc_id 1233251881Speter AND nodes.local_relpath = e.parent_relpath)) 1234251881Speter 1235251881Speter-- STMT_SELECT_EXTERNALS_DEFINED 1236251881SpeterSELECT local_relpath, def_local_relpath 1237251881SpeterFROM externals 1238251881Speter/* ### The Sqlite optimizer needs help here ### 1239251881Speter * WHERE wc_id = ?1 1240251881Speter * AND (def_local_relpath = ?2 1241251881Speter * OR IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) */ 1242251881SpeterWHERE (wc_id = ?1 AND def_local_relpath = ?2) 1243251881Speter OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) 1244251881Speter 1245251881Speter-- STMT_DELETE_EXTERNAL 1246251881SpeterDELETE FROM externals 1247251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1248251881Speter 1249251881Speter-- STMT_SELECT_EXTERNAL_PROPERTIES 1250251881Speter/* ### It would be nice if Sqlite would handle 1251251881Speter * SELECT IFNULL((SELECT properties FROM actual_node a 1252251881Speter * WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1253251881Speter * properties), 1254251881Speter * local_relpath, depth 1255251881Speter * FROM nodes_current n 1256251881Speter * WHERE wc_id = ?1 1257251881Speter * AND (local_relpath = ?2 1258251881Speter * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1259251881Speter * AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1260251881Speter * ### But it would take a double table scan execution plan for it. 1261251881Speter * ### Maybe there is something else going on? */ 1262251881SpeterSELECT IFNULL((SELECT properties FROM actual_node a 1263251881Speter WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1264251881Speter properties), 1265251881Speter local_relpath, depth 1266251881SpeterFROM nodes_current n 1267251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1268251881Speter AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1269251881SpeterUNION ALL 1270251881SpeterSELECT IFNULL((SELECT properties FROM actual_node a 1271251881Speter WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1272251881Speter properties), 1273251881Speter local_relpath, depth 1274251881SpeterFROM nodes_current n 1275251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1276251881Speter AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1277251881Speter 1278251881Speter-- STMT_SELECT_CURRENT_PROPS_RECURSIVE 1279251881Speter/* ### Ugly OR to make sqlite use the proper optimizations */ 1280251881SpeterSELECT IFNULL((SELECT properties FROM actual_node a 1281251881Speter WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1282251881Speter properties), 1283251881Speter local_relpath 1284251881SpeterFROM nodes_current n 1285251881SpeterWHERE (wc_id = ?1 AND local_relpath = ?2) 1286251881Speter OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1287251881Speter 1288251881Speter-- STMT_PRAGMA_LOCKING_MODE 1289299742SdimPRAGMA locking_mode = exclusive; 1290299742Sdim/* Testing shows DELETE is faster than TRUNCATE on NFS and 1291299742Sdim exclusive-locking is mostly used on remote file systems. */ 1292299742SdimPRAGMA journal_mode = DELETE 1293251881Speter 1294251881Speter/* ------------------------------------------------------------------------- */ 1295251881Speter 1296251881Speter/* these are used in entries.c */ 1297251881Speter 1298251881Speter-- STMT_INSERT_ACTUAL_NODE 1299251881SpeterINSERT OR REPLACE INTO actual_node ( 1300251881Speter wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data) 1301251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6) 1302251881Speter 1303251881Speter/* ------------------------------------------------------------------------- */ 1304251881Speter 1305251881Speter/* these are used in upgrade.c */ 1306251881Speter 1307251881Speter-- STMT_SELECT_ALL_FILES 1308251881SpeterSELECT local_relpath FROM nodes_current 1309251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE 1310251881Speter 1311251881Speter-- STMT_UPDATE_NODE_PROPS 1312251881SpeterUPDATE nodes SET properties = ?4 1313251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1314251881Speter 1315251881Speter-- STMT_PRAGMA_TABLE_INFO_NODES 1316251881SpeterPRAGMA table_info("NODES") 1317251881Speter 1318251881Speter/* -------------------------------------------------------------------------- 1319251881Speter * Complex queries for callback walks, caching results in a temporary table. 1320251881Speter * 1321251881Speter * These target table are then used for joins against NODES, or for reporting 1322251881Speter */ 1323251881Speter 1324251881Speter-- STMT_CREATE_TARGET_PROP_CACHE 1325251881SpeterDROP TABLE IF EXISTS target_prop_cache; 1326251881SpeterCREATE TEMPORARY TABLE target_prop_cache ( 1327251881Speter local_relpath TEXT NOT NULL PRIMARY KEY, 1328251881Speter kind TEXT NOT NULL, 1329251881Speter properties BLOB 1330251881Speter); 1331251881Speter/* ### Need index? 1332251881SpeterCREATE UNIQUE INDEX temp__node_props_cache_unique 1333251881Speter ON temp__node_props_cache (local_relpath) */ 1334251881Speter 1335251881Speter-- STMT_CACHE_TARGET_PROPS 1336251881SpeterINSERT INTO target_prop_cache(local_relpath, kind, properties) 1337251881Speter SELECT n.local_relpath, n.kind, 1338251881Speter IFNULL((SELECT properties FROM actual_node AS a 1339251881Speter WHERE a.wc_id = n.wc_id 1340251881Speter AND a.local_relpath = n.local_relpath), 1341251881Speter n.properties) 1342251881Speter FROM targets_list AS t 1343251881Speter JOIN nodes AS n 1344251881Speter ON n.wc_id = ?1 1345251881Speter AND n.local_relpath = t.local_relpath 1346251881Speter AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 1347251881Speter WHERE n3.wc_id = ?1 1348251881Speter AND n3.local_relpath = t.local_relpath) 1349251881Speter WHERE t.wc_id = ?1 1350251881Speter AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE) 1351251881Speter ORDER BY t.local_relpath 1352251881Speter 1353251881Speter-- STMT_CACHE_TARGET_PRISTINE_PROPS 1354251881SpeterINSERT INTO target_prop_cache(local_relpath, kind, properties) 1355251881Speter SELECT n.local_relpath, n.kind, 1356251881Speter CASE n.presence 1357251881Speter WHEN MAP_BASE_DELETED 1358251881Speter THEN (SELECT properties FROM nodes AS p 1359251881Speter WHERE p.wc_id = n.wc_id 1360251881Speter AND p.local_relpath = n.local_relpath 1361251881Speter AND p.op_depth < n.op_depth 1362251881Speter ORDER BY p.op_depth DESC /* LIMIT 1 */) 1363251881Speter ELSE properties END 1364251881Speter FROM targets_list AS t 1365251881Speter JOIN nodes AS n 1366251881Speter ON n.wc_id = ?1 1367251881Speter AND n.local_relpath = t.local_relpath 1368251881Speter AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 1369251881Speter WHERE n3.wc_id = ?1 1370251881Speter AND n3.local_relpath = t.local_relpath) 1371251881Speter WHERE t.wc_id = ?1 1372251881Speter AND (presence = MAP_NORMAL 1373251881Speter OR presence = MAP_INCOMPLETE 1374251881Speter OR presence = MAP_BASE_DELETED) 1375251881Speter ORDER BY t.local_relpath 1376251881Speter 1377251881Speter-- STMT_SELECT_ALL_TARGET_PROP_CACHE 1378251881SpeterSELECT local_relpath, properties FROM target_prop_cache 1379251881SpeterORDER BY local_relpath 1380251881Speter 1381251881Speter-- STMT_DROP_TARGET_PROP_CACHE 1382251881SpeterDROP TABLE target_prop_cache; 1383251881Speter 1384251881Speter-- STMT_CREATE_REVERT_LIST 1385251881SpeterDROP TABLE IF EXISTS revert_list; 1386251881SpeterCREATE TEMPORARY TABLE revert_list ( 1387251881Speter /* need wc_id if/when revert spans multiple working copies */ 1388251881Speter local_relpath TEXT NOT NULL, 1389251881Speter actual INTEGER NOT NULL, /* 1 if an actual row, 0 if a nodes row */ 1390251881Speter conflict_data BLOB, 1391251881Speter notify INTEGER, /* 1 if an actual row had props or tree conflict */ 1392251881Speter op_depth INTEGER, 1393251881Speter repos_id INTEGER, 1394251881Speter kind TEXT, 1395251881Speter PRIMARY KEY (local_relpath, actual) 1396251881Speter ); 1397251881SpeterDROP TRIGGER IF EXISTS trigger_revert_list_nodes; 1398251881SpeterCREATE TEMPORARY TRIGGER trigger_revert_list_nodes 1399251881SpeterBEFORE DELETE ON nodes 1400251881SpeterBEGIN 1401251881Speter INSERT OR REPLACE INTO revert_list(local_relpath, actual, op_depth, 1402251881Speter repos_id, kind) 1403251881Speter SELECT OLD.local_relpath, 0, OLD.op_depth, OLD.repos_id, OLD.kind; 1404251881SpeterEND; 1405251881SpeterDROP TRIGGER IF EXISTS trigger_revert_list_actual_delete; 1406251881SpeterCREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete 1407251881SpeterBEFORE DELETE ON actual_node 1408251881SpeterBEGIN 1409251881Speter INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, 1410251881Speter notify) 1411251881Speter SELECT OLD.local_relpath, 1, OLD.conflict_data, 1412251881Speter CASE 1413251881Speter WHEN OLD.properties IS NOT NULL 1414251881Speter THEN 1 1415251881Speter WHEN NOT EXISTS(SELECT 1 FROM NODES n 1416251881Speter WHERE n.wc_id = OLD.wc_id 1417251881Speter AND n.local_relpath = OLD.local_relpath) 1418251881Speter THEN 1 1419299742Sdim END notify 1420299742Sdim WHERE OLD.conflict_data IS NOT NULL 1421299742Sdim OR notify IS NOT NULL; 1422251881SpeterEND; 1423251881SpeterDROP TRIGGER IF EXISTS trigger_revert_list_actual_update; 1424251881SpeterCREATE TEMPORARY TRIGGER trigger_revert_list_actual_update 1425251881SpeterBEFORE UPDATE ON actual_node 1426251881SpeterBEGIN 1427251881Speter INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, 1428251881Speter notify) 1429251881Speter SELECT OLD.local_relpath, 1, OLD.conflict_data, 1430251881Speter CASE 1431251881Speter WHEN OLD.properties IS NOT NULL 1432251881Speter THEN 1 1433251881Speter WHEN NOT EXISTS(SELECT 1 FROM NODES n 1434251881Speter WHERE n.wc_id = OLD.wc_id 1435251881Speter AND n.local_relpath = OLD.local_relpath) 1436251881Speter THEN 1 1437299742Sdim END notify 1438299742Sdim WHERE OLD.conflict_data IS NOT NULL 1439299742Sdim OR notify IS NOT NULL; 1440251881SpeterEND 1441251881Speter 1442251881Speter-- STMT_DROP_REVERT_LIST_TRIGGERS 1443251881SpeterDROP TRIGGER trigger_revert_list_nodes; 1444251881SpeterDROP TRIGGER trigger_revert_list_actual_delete; 1445251881SpeterDROP TRIGGER trigger_revert_list_actual_update 1446251881Speter 1447251881Speter-- STMT_SELECT_REVERT_LIST 1448251881SpeterSELECT actual, notify, kind, op_depth, repos_id, conflict_data 1449251881SpeterFROM revert_list 1450251881SpeterWHERE local_relpath = ?1 1451251881SpeterORDER BY actual DESC 1452251881Speter 1453251881Speter-- STMT_SELECT_REVERT_LIST_COPIED_CHILDREN 1454251881SpeterSELECT local_relpath, kind 1455251881SpeterFROM revert_list 1456251881SpeterWHERE IS_STRICT_DESCENDANT_OF(local_relpath, ?1) 1457251881Speter AND op_depth >= ?2 1458251881Speter AND repos_id IS NOT NULL 1459251881SpeterORDER BY local_relpath 1460251881Speter 1461251881Speter-- STMT_DELETE_REVERT_LIST 1462251881SpeterDELETE FROM revert_list WHERE local_relpath = ?1 1463251881Speter 1464251881Speter-- STMT_SELECT_REVERT_LIST_RECURSIVE 1465299742SdimSELECT p.local_relpath, n.kind, a.notify, a.kind 1466299742SdimFROM (SELECT DISTINCT local_relpath 1467299742Sdim FROM revert_list 1468299742Sdim WHERE (local_relpath = ?1 1469299742Sdim OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1))) p 1470251881Speter 1471299742SdimLEFT JOIN revert_list n ON n.local_relpath=p.local_relpath AND n.actual=0 1472299742SdimLEFT JOIN revert_list a ON a.local_relpath=p.local_relpath AND a.actual=1 1473299742SdimORDER BY p.local_relpath 1474299742Sdim 1475251881Speter-- STMT_DELETE_REVERT_LIST_RECURSIVE 1476251881SpeterDELETE FROM revert_list 1477251881SpeterWHERE (local_relpath = ?1 1478251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1)) 1479251881Speter 1480251881Speter-- STMT_DROP_REVERT_LIST 1481251881SpeterDROP TABLE IF EXISTS revert_list 1482251881Speter 1483251881Speter-- STMT_CREATE_DELETE_LIST 1484251881SpeterDROP TABLE IF EXISTS delete_list; 1485251881SpeterCREATE TEMPORARY TABLE delete_list ( 1486251881Speter/* ### we should put the wc_id in here in case a delete spans multiple 1487251881Speter ### working copies. queries, etc will need to be adjusted. */ 1488251881Speter local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE 1489251881Speter ) 1490251881Speter 1491251881Speter/* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE. 1492251881Speter A subquery is used instead of nodes_current to avoid a table scan */ 1493251881Speter-- STMT_INSERT_DELETE_LIST 1494251881SpeterINSERT INTO delete_list(local_relpath) 1495299742SdimSELECT ?2 1496299742SdimUNION ALL 1497251881SpeterSELECT local_relpath FROM nodes AS n 1498251881SpeterWHERE wc_id = ?1 1499299742Sdim AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1500251881Speter AND op_depth >= ?3 1501251881Speter AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s 1502251881Speter WHERE s.wc_id = ?1 1503251881Speter AND s.local_relpath = n.local_relpath) 1504251881Speter AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) 1505251881Speter AND file_external IS NULL 1506299742SdimORDER by local_relpath 1507251881Speter 1508251881Speter-- STMT_SELECT_DELETE_LIST 1509251881SpeterSELECT local_relpath FROM delete_list 1510251881SpeterORDER BY local_relpath 1511251881Speter 1512251881Speter-- STMT_FINALIZE_DELETE 1513251881SpeterDROP TABLE IF EXISTS delete_list 1514251881Speter 1515251881Speter-- STMT_CREATE_UPDATE_MOVE_LIST 1516251881SpeterDROP TABLE IF EXISTS update_move_list; 1517251881SpeterCREATE TEMPORARY TABLE update_move_list ( 1518251881Speter/* ### we should put the wc_id in here in case a move update spans multiple 1519251881Speter ### working copies. queries, etc will need to be adjusted. */ 1520251881Speter local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE, 1521251881Speter action INTEGER NOT NULL, 1522299742Sdim kind TEXT NOT NULL, 1523251881Speter content_state INTEGER NOT NULL, 1524251881Speter prop_state INTEGER NOT NULL 1525251881Speter ) 1526251881Speter 1527251881Speter-- STMT_INSERT_UPDATE_MOVE_LIST 1528251881SpeterINSERT INTO update_move_list(local_relpath, action, kind, content_state, 1529251881Speter prop_state) 1530251881SpeterVALUES (?1, ?2, ?3, ?4, ?5) 1531251881Speter 1532251881Speter-- STMT_SELECT_UPDATE_MOVE_LIST 1533251881SpeterSELECT local_relpath, action, kind, content_state, prop_state 1534251881SpeterFROM update_move_list 1535251881SpeterORDER BY local_relpath 1536251881Speter 1537251881Speter-- STMT_FINALIZE_UPDATE_MOVE 1538251881SpeterDROP TABLE IF EXISTS update_move_list 1539251881Speter 1540299742Sdim-- STMT_MOVE_NOTIFY_TO_REVERT 1541299742SdimINSERT INTO revert_list (local_relpath, notify, kind, actual) 1542299742Sdim SELECT local_relpath, 2, kind, 1 FROM update_move_list; 1543299742SdimDROP TABLE update_move_list 1544299742Sdim 1545251881Speter/* ------------------------------------------------------------------------- */ 1546251881Speter 1547251881Speter/* Queries for revision status. */ 1548251881Speter 1549251881Speter-- STMT_SELECT_MIN_MAX_REVISIONS 1550251881SpeterSELECT MIN(revision), MAX(revision), 1551251881Speter MIN(changed_revision), MAX(changed_revision) FROM nodes 1552251881Speter WHERE wc_id = ?1 1553251881Speter AND (local_relpath = ?2 1554251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1555251881Speter AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1556251881Speter AND file_external IS NULL 1557251881Speter AND op_depth = 0 1558251881Speter 1559251881Speter-- STMT_HAS_SPARSE_NODES 1560251881SpeterSELECT 1 FROM nodes 1561251881SpeterWHERE wc_id = ?1 1562251881Speter AND (local_relpath = ?2 1563251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1564251881Speter AND op_depth = 0 1565251881Speter AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED) 1566251881Speter OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN)) 1567251881Speter AND file_external IS NULL 1568251881SpeterLIMIT 1 1569251881Speter 1570251881Speter-- STMT_SUBTREE_HAS_TREE_MODIFICATIONS 1571251881SpeterSELECT 1 FROM nodes 1572251881SpeterWHERE wc_id = ?1 1573251881Speter AND (local_relpath = ?2 1574251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1575251881Speter AND op_depth > 0 1576251881SpeterLIMIT 1 1577251881Speter 1578251881Speter-- STMT_SUBTREE_HAS_PROP_MODIFICATIONS 1579251881SpeterSELECT 1 FROM actual_node 1580251881SpeterWHERE wc_id = ?1 1581251881Speter AND (local_relpath = ?2 1582251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1583251881Speter AND properties IS NOT NULL 1584251881SpeterLIMIT 1 1585251881Speter 1586251881Speter-- STMT_HAS_SWITCHED 1587251881SpeterSELECT 1 1588251881SpeterFROM nodes 1589251881SpeterWHERE wc_id = ?1 1590251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1591251881Speter AND op_depth = 0 1592251881Speter AND file_external IS NULL 1593251881Speter AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1594251881Speter AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath) 1595251881SpeterLIMIT 1 1596251881Speter 1597251881Speter-- STMT_SELECT_MOVED_FROM_RELPATH 1598251881SpeterSELECT local_relpath, op_depth FROM nodes 1599251881SpeterWHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 1600251881Speter 1601251881Speter-- STMT_UPDATE_MOVED_TO_RELPATH 1602251881SpeterUPDATE nodes SET moved_to = ?4 1603251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1604251881Speter 1605251881Speter-- STMT_CLEAR_MOVED_TO_RELPATH 1606251881SpeterUPDATE nodes SET moved_to = NULL 1607251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1608251881Speter 1609251881Speter-- STMT_CLEAR_MOVED_HERE_RECURSIVE 1610251881SpeterUPDATE nodes SET moved_here = NULL 1611251881SpeterWHERE wc_id = ?1 1612251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1613251881Speter AND op_depth = ?3 1614251881Speter 1615251881Speter/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1. 1616251881Speter * Each row returns a moved-here path (always a child of ?2) in the first 1617251881Speter * column, and its matching moved-away (deleted) path in the second column. */ 1618251881Speter-- STMT_SELECT_MOVED_HERE_CHILDREN 1619251881SpeterSELECT moved_to, local_relpath FROM nodes 1620251881SpeterWHERE wc_id = ?1 AND op_depth > 0 1621251881Speter AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1622251881Speter 1623269847Speter/* If the node is moved here (r.moved_here = 1) we are really interested in 1624269847Speter where the node was moved from. To obtain that we need the op_depth, but 1625269847Speter this form of select only allows a single return value */ 1626251881Speter-- STMT_SELECT_MOVED_FOR_DELETE 1627269847SpeterSELECT local_relpath, moved_to, op_depth, 1628269847Speter (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r 1629269847Speter WHERE r.wc_id = ?1 1630269847Speter AND r.local_relpath = n.local_relpath 1631269847Speter AND r.op_depth < n.op_depth 1632269847Speter ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth 1633269847Speter FROM nodes n 1634251881SpeterWHERE wc_id = ?1 1635251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1636251881Speter AND moved_to IS NOT NULL 1637269847Speter AND op_depth >= ?3 1638251881Speter 1639269847Speter-- STMT_SELECT_MOVED_FROM_FOR_DELETE 1640269847SpeterSELECT local_relpath, op_depth, 1641269847Speter (SELECT CASE WHEN r.moved_here THEN r.op_depth END FROM nodes r 1642269847Speter WHERE r.wc_id = ?1 1643269847Speter AND r.local_relpath = n.local_relpath 1644269847Speter AND r.op_depth < n.op_depth 1645269847Speter ORDER BY r.op_depth DESC LIMIT 1) AS moved_here_op_depth 1646269847Speter FROM nodes n 1647269847SpeterWHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 1648269847Speter 1649251881Speter-- STMT_UPDATE_MOVED_TO_DESCENDANTS 1650251881SpeterUPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to) 1651251881Speter WHERE wc_id = ?1 1652251881Speter AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1653251881Speter 1654251881Speter-- STMT_CLEAR_MOVED_TO_DESCENDANTS 1655251881SpeterUPDATE nodes SET moved_to = NULL 1656251881Speter WHERE wc_id = ?1 1657251881Speter AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1658251881Speter 1659251881Speter-- STMT_SELECT_MOVED_PAIR3 1660299742SdimSELECT n.local_relpath, d.moved_to, d.op_depth, n.kind 1661299742SdimFROM nodes n 1662299742SdimJOIN nodes d ON d.wc_id = ?1 AND d.local_relpath = n.local_relpath 1663299742Sdim AND d.op_depth = (SELECT MIN(dd.op_depth) 1664299742Sdim FROM nodes dd 1665299742Sdim WHERE dd.wc_id = ?1 1666299742Sdim AND dd.local_relpath = d.local_relpath 1667299742Sdim AND dd.op_depth > ?3) 1668299742SdimWHERE n.wc_id = ?1 AND n.local_relpath = ?2 AND n.op_depth = ?3 1669299742Sdim AND d.moved_to IS NOT NULL 1670262253SpeterUNION ALL 1671299742SdimSELECT n.local_relpath, d.moved_to, d.op_depth, n.kind 1672299742SdimFROM nodes n 1673299742SdimJOIN nodes d ON d.wc_id = ?1 AND d.local_relpath = n.local_relpath 1674299742Sdim AND d.op_depth = (SELECT MIN(dd.op_depth) 1675299742Sdim FROM nodes dd 1676299742Sdim WHERE dd.wc_id = ?1 1677299742Sdim AND dd.local_relpath = d.local_relpath 1678299742Sdim AND dd.op_depth > ?3) 1679299742SdimWHERE n.wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 1680299742Sdim AND n.op_depth = ?3 1681299742Sdim AND d.moved_to IS NOT NULL 1682299742SdimORDER BY n.local_relpath 1683251881Speter 1684251881Speter-- STMT_SELECT_MOVED_OUTSIDE 1685262253SpeterSELECT local_relpath, moved_to, op_depth FROM nodes 1686251881SpeterWHERE wc_id = ?1 1687251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1688251881Speter AND op_depth >= ?3 1689251881Speter AND moved_to IS NOT NULL 1690251881Speter AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1691251881Speter 1692299742Sdim-- STMT_SELECT_MOVED_DESCENDANTS_SRC 1693299742SdimSELECT s.op_depth, n.local_relpath, n.kind, n.repos_path, s.moved_to 1694299742SdimFROM nodes n 1695299742SdimJOIN nodes s ON s.wc_id = n.wc_id AND s.local_relpath = n.local_relpath 1696299742Sdim AND s.op_depth = (SELECT MIN(d.op_depth) 1697299742Sdim FROM nodes d 1698299742Sdim WHERE d.wc_id = ?1 1699299742Sdim AND d.local_relpath = s.local_relpath 1700299742Sdim AND d.op_depth > ?3) 1701299742SdimWHERE n.wc_id = ?1 AND n.op_depth = ?3 1702299742Sdim AND (n.local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2)) 1703299742Sdim AND s.moved_to IS NOT NULL 1704251881Speter 1705251881Speter-- STMT_COMMIT_UPDATE_ORIGIN 1706251881SpeterUPDATE nodes SET repos_id = ?4, 1707299742Sdim repos_path = RELPATH_SKIP_JOIN(?2, ?5, local_relpath), 1708251881Speter revision = ?6 1709251881SpeterWHERE wc_id = ?1 1710251881Speter AND (local_relpath = ?2 1711251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1712251881Speter AND op_depth = ?3 1713251881Speter 1714251881Speter-- STMT_HAS_LAYER_BETWEEN 1715251881SpeterSELECT 1 FROM NODES 1716251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4 1717251881Speter 1718251881Speter-- STMT_SELECT_REPOS_PATH_REVISION 1719251881SpeterSELECT local_relpath, repos_path, revision FROM nodes 1720251881SpeterWHERE wc_id = ?1 1721251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1722251881Speter AND op_depth = 0 1723251881SpeterORDER BY local_relpath 1724251881Speter 1725251881Speter-- STMT_SELECT_HAS_NON_FILE_CHILDREN 1726251881SpeterSELECT 1 FROM nodes 1727299742SdimWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3 AND kind != MAP_FILE 1728299742SdimLIMIT 1 1729251881Speter 1730251881Speter-- STMT_SELECT_HAS_GRANDCHILDREN 1731251881SpeterSELECT 1 FROM nodes 1732251881SpeterWHERE wc_id = ?1 1733251881Speter AND IS_STRICT_DESCENDANT_OF(parent_relpath, ?2) 1734299742Sdim AND op_depth = ?3 1735251881Speter AND file_external IS NULL 1736299742SdimLIMIT 1 1737251881Speter 1738251881Speter/* ------------------------------------------------------------------------- */ 1739251881Speter 1740251881Speter/* Queries for verification. */ 1741251881Speter 1742251881Speter-- STMT_SELECT_ALL_NODES 1743251881SpeterSELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes 1744251881SpeterWHERE wc_id = ?1 1745251881Speter 1746251881Speter/* ------------------------------------------------------------------------- */ 1747251881Speter 1748251881Speter/* Queries for cached inherited properties. */ 1749251881Speter 1750251881Speter/* Select the inherited properties of a single base node. */ 1751251881Speter-- STMT_SELECT_IPROPS 1752251881SpeterSELECT inherited_props FROM nodes 1753251881SpeterWHERE wc_id = ?1 1754251881Speter AND local_relpath = ?2 1755251881Speter AND op_depth = 0 1756251881Speter 1757251881Speter/* Update the inherited properties of a single base node. */ 1758251881Speter-- STMT_UPDATE_IPROP 1759251881SpeterUPDATE nodes 1760251881SpeterSET inherited_props = ?3 1761251881SpeterWHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0) 1762251881Speter 1763251881Speter/* Select a single path if its base node has cached inherited properties. */ 1764251881Speter-- STMT_SELECT_IPROPS_NODE 1765251881SpeterSELECT local_relpath, repos_path FROM nodes 1766251881SpeterWHERE wc_id = ?1 1767251881Speter AND local_relpath = ?2 1768251881Speter AND op_depth = 0 1769251881Speter AND (inherited_props not null) 1770251881Speter 1771251881Speter/* Select all paths whose base nodes are below a given path, which 1772251881Speter have cached inherited properties. */ 1773251881Speter-- STMT_SELECT_IPROPS_RECURSIVE 1774251881SpeterSELECT local_relpath, repos_path FROM nodes 1775251881SpeterWHERE wc_id = ?1 1776251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1777251881Speter AND op_depth = 0 1778251881Speter AND (inherited_props not null) 1779251881Speter 1780251881Speter-- STMT_SELECT_IPROPS_CHILDREN 1781251881SpeterSELECT local_relpath, repos_path FROM nodes 1782251881SpeterWHERE wc_id = ?1 1783251881Speter AND parent_relpath = ?2 1784251881Speter AND op_depth = 0 1785251881Speter AND (inherited_props not null) 1786251881Speter 1787289166Speter-- STMT_HAVE_STAT1_TABLE 1788289166SpeterSELECT 1 FROM sqlite_master WHERE name='sqlite_stat1' AND type='table' 1789289166SpeterLIMIT 1 1790289166Speter 1791251881Speter/* ------------------------------------------------------------------------- */ 1792251881Speter 1793251881Speter/* Grab all the statements related to the schema. */ 1794251881Speter 1795251881Speter-- include: wc-metadata 1796251881Speter-- include: wc-checks 1797