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, 75251881Speter revision, depth, file_external, 76251881Speter lock_token, lock_owner, lock_comment, lock_date 77251881SpeterFROM nodes 78251881SpeterLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 79251881Speter AND nodes.repos_path = lock.repos_relpath 80251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 81251881Speter 82251881Speter-- STMT_SELECT_WORKING_NODE 83251881SpeterSELECT op_depth, presence, kind, checksum, translated_size, 84251881Speter changed_revision, changed_date, changed_author, depth, symlink_target, 85251881Speter repos_id, repos_path, revision, 86251881Speter moved_here, moved_to, last_mod_time, properties 87251881SpeterFROM nodes 88251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0 89251881SpeterORDER BY op_depth DESC 90251881SpeterLIMIT 1 91251881Speter 92251881Speter-- STMT_SELECT_DEPTH_NODE 93251881SpeterSELECT repos_id, repos_path, presence, kind, revision, checksum, 94251881Speter translated_size, changed_revision, changed_date, changed_author, depth, 95251881Speter symlink_target, last_mod_time, properties 96251881SpeterFROM nodes 97251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 98251881Speter 99251881Speter-- STMT_SELECT_LOWEST_WORKING_NODE 100251881SpeterSELECT op_depth, presence, kind, moved_to 101251881SpeterFROM nodes 102251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 103251881SpeterORDER BY op_depth 104251881SpeterLIMIT 1 105251881Speter 106251881Speter-- STMT_SELECT_HIGHEST_WORKING_NODE 107251881SpeterSELECT op_depth 108251881SpeterFROM nodes 109251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth < ?3 110251881SpeterORDER BY op_depth DESC 111251881SpeterLIMIT 1 112251881Speter 113251881Speter-- STMT_SELECT_ACTUAL_NODE 114251881SpeterSELECT changelist, properties, conflict_data 115251881SpeterFROM actual_node 116251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 117251881Speter 118251881Speter-- STMT_SELECT_NODE_CHILDREN_INFO 119251881Speter/* Getting rows in an advantageous order using 120251881Speter ORDER BY local_relpath, op_depth DESC 121251881Speter turns out to be slower than getting rows in a random order and making the 122251881Speter C code handle it. */ 123251881SpeterSELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision, 124251881Speter checksum, translated_size, changed_revision, changed_date, changed_author, 125251881Speter depth, symlink_target, last_mod_time, properties, lock_token, lock_owner, 126251881Speter lock_comment, lock_date, local_relpath, moved_here, moved_to, file_external 127251881SpeterFROM nodes 128251881SpeterLEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id 129251881Speter AND nodes.repos_path = lock.repos_relpath AND op_depth = 0 130251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 131251881Speter 132251881Speter-- STMT_SELECT_NODE_CHILDREN_WALKER_INFO 133251881SpeterSELECT local_relpath, op_depth, presence, kind 134251881SpeterFROM nodes_current 135251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 136251881Speter 137251881Speter-- STMT_SELECT_ACTUAL_CHILDREN_INFO 138251881SpeterSELECT local_relpath, changelist, properties, conflict_data 139251881SpeterFROM actual_node 140251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 141251881Speter 142251881Speter-- STMT_SELECT_REPOSITORY_BY_ID 143251881SpeterSELECT root, uuid FROM repository WHERE id = ?1 144251881Speter 145251881Speter-- STMT_SELECT_WCROOT_NULL 146251881SpeterSELECT id FROM wcroot WHERE local_abspath IS NULL 147251881Speter 148251881Speter-- STMT_SELECT_REPOSITORY 149251881SpeterSELECT id FROM repository WHERE root = ?1 150251881Speter 151251881Speter-- STMT_INSERT_REPOSITORY 152251881SpeterINSERT INTO repository (root, uuid) VALUES (?1, ?2) 153251881Speter 154251881Speter-- STMT_INSERT_NODE 155251881SpeterINSERT OR REPLACE INTO nodes ( 156251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 157251881Speter revision, presence, depth, kind, changed_revision, changed_date, 158251881Speter changed_author, checksum, properties, translated_size, last_mod_time, 159251881Speter dav_cache, symlink_target, file_external, moved_to, moved_here, 160251881Speter inherited_props) 161251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, 162251881Speter ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23) 163251881Speter 164251881Speter-- STMT_SELECT_BASE_PRESENT 165251881SpeterSELECT local_relpath, kind FROM nodes n 166251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 167251881Speter AND op_depth = 0 168251881Speter AND presence in (MAP_NORMAL, MAP_INCOMPLETE) 169251881Speter AND NOT EXISTS(SELECT 1 FROM NODES w 170251881Speter WHERE w.wc_id = ?1 AND w.local_relpath = n.local_relpath 171251881Speter AND op_depth > 0) 172251881SpeterORDER BY local_relpath DESC 173251881Speter 174251881Speter-- STMT_SELECT_WORKING_PRESENT 175251881SpeterSELECT local_relpath, kind, checksum, translated_size, last_mod_time 176251881SpeterFROM nodes n 177251881SpeterWHERE wc_id = ?1 178251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 179251881Speter AND presence in (MAP_NORMAL, MAP_INCOMPLETE) 180251881Speter AND op_depth = (SELECT MAX(op_depth) 181251881Speter FROM NODES w 182251881Speter WHERE w.wc_id = ?1 183251881Speter AND w.local_relpath = n.local_relpath) 184251881SpeterORDER BY local_relpath DESC 185251881Speter 186251881Speter-- STMT_DELETE_NODE_RECURSIVE 187251881SpeterDELETE FROM NODES 188251881SpeterWHERE wc_id = ?1 189251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 190251881Speter 191251881Speter-- STMT_DELETE_NODE 192251881SpeterDELETE 193251881SpeterFROM NODES 194251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 195251881Speter 196251881Speter-- STMT_DELETE_ACTUAL_FOR_BASE_RECURSIVE 197251881Speter/* The ACTUAL_NODE applies to BASE, unless there is in at least one op_depth 198251881Speter a WORKING node that could have a conflict */ 199251881SpeterDELETE FROM actual_node 200251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 201251881Speter AND EXISTS(SELECT 1 FROM NODES b 202251881Speter WHERE b.wc_id = ?1 203251881Speter AND b.local_relpath = actual_node.local_relpath 204251881Speter AND op_depth = 0) 205251881Speter AND NOT EXISTS(SELECT 1 FROM NODES w 206251881Speter WHERE w.wc_id = ?1 207251881Speter AND w.local_relpath = actual_node.local_relpath 208251881Speter AND op_depth > 0 209251881Speter AND presence in (MAP_NORMAL, MAP_INCOMPLETE, MAP_NOT_PRESENT)) 210251881Speter 211251881Speter-- STMT_DELETE_WORKING_BASE_DELETE 212251881SpeterDELETE FROM nodes 213251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 214251881Speter AND presence = MAP_BASE_DELETED 215251881Speter AND op_depth > 0 216251881Speter AND op_depth = (SELECT MIN(op_depth) FROM nodes n 217251881Speter WHERE n.wc_id = ?1 218251881Speter AND n.local_relpath = nodes.local_relpath 219251881Speter AND op_depth > 0) 220251881Speter 221251881Speter-- STMT_DELETE_WORKING_RECURSIVE 222251881SpeterDELETE FROM nodes 223251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 224251881Speter AND op_depth > 0 225251881Speter 226251881Speter-- STMT_DELETE_BASE_RECURSIVE 227251881SpeterDELETE FROM nodes 228251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 229251881Speter AND op_depth = 0 230251881Speter 231251881Speter-- STMT_DELETE_WORKING_OP_DEPTH 232251881SpeterDELETE FROM nodes 233251881SpeterWHERE wc_id = ?1 234251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 235251881Speter AND op_depth = ?3 236251881Speter 237251881Speter-- STMT_DELETE_WORKING_OP_DEPTH_ABOVE 238251881SpeterDELETE FROM nodes 239251881SpeterWHERE wc_id = ?1 240251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 241251881Speter AND op_depth > ?3 242251881Speter 243251881Speter-- STMT_SELECT_LOCAL_RELPATH_OP_DEPTH 244251881SpeterSELECT local_relpath 245251881SpeterFROM nodes 246251881SpeterWHERE wc_id = ?1 247251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 248251881Speter AND op_depth = ?3 249251881Speter 250251881Speter-- STMT_SELECT_CHILDREN_OP_DEPTH 251251881SpeterSELECT local_relpath, kind 252251881SpeterFROM nodes 253251881SpeterWHERE wc_id = ?1 254251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 255251881Speter AND op_depth = ?3 256251881SpeterORDER BY local_relpath DESC 257251881Speter 258251881Speter-- STMT_COPY_NODE_MOVE 259251881SpeterINSERT OR REPLACE INTO nodes ( 260251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 261251881Speter revision, presence, depth, kind, changed_revision, changed_date, 262251881Speter changed_author, checksum, properties, translated_size, last_mod_time, 263251881Speter symlink_target, moved_here, moved_to ) 264251881SpeterSELECT 265251881Speter wc_id, ?4 /*local_relpath */, ?5 /*op_depth*/, ?6 /* parent_relpath */, 266251881Speter repos_id, 267251881Speter repos_path, revision, presence, depth, kind, changed_revision, 268251881Speter changed_date, changed_author, checksum, properties, translated_size, 269251881Speter last_mod_time, symlink_target, 1, 270251881Speter (SELECT dst.moved_to FROM nodes AS dst 271251881Speter WHERE dst.wc_id = ?1 272251881Speter AND dst.local_relpath = ?4 273251881Speter AND dst.op_depth = ?5) 274251881SpeterFROM nodes 275251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 276251881Speter 277251881Speter-- STMT_SELECT_OP_DEPTH_CHILDREN 278251881SpeterSELECT local_relpath, kind FROM nodes 279251881SpeterWHERE wc_id = ?1 280251881Speter AND parent_relpath = ?2 281251881Speter AND op_depth = ?3 282251881Speter AND presence != MAP_BASE_DELETED 283251881Speter AND file_external is NULL 284251881Speter 285251881Speter/* Used by non-recursive revert to detect higher level children, and 286251881Speter actual-only rows that would be left orphans, if the revert 287251881Speter proceeded. */ 288251881Speter-- STMT_SELECT_GE_OP_DEPTH_CHILDREN 289251881SpeterSELECT 1 FROM nodes 290251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 291251881Speter AND (op_depth > ?3 OR (op_depth = ?3 AND presence != MAP_BASE_DELETED)) 292251881SpeterUNION ALL 293251881SpeterSELECT 1 FROM ACTUAL_NODE a 294251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 295251881Speter AND NOT EXISTS (SELECT 1 FROM nodes n 296251881Speter WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath) 297251881Speter 298251881Speter/* Delete the nodes shadowed by local_relpath. Not valid for the wc-root */ 299251881Speter-- STMT_DELETE_SHADOWED_RECURSIVE 300251881SpeterDELETE FROM nodes 301251881SpeterWHERE wc_id = ?1 302251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 303251881Speter AND (op_depth < ?3 304251881Speter OR (op_depth = ?3 AND presence = MAP_BASE_DELETED)) 305251881Speter 306251881Speter-- STMT_CLEAR_MOVED_TO_FROM_DEST 307251881SpeterUPDATE NODES SET moved_to = NULL 308251881SpeterWHERE wc_id = ?1 309251881Speter AND moved_to = ?2 310251881Speter 311251881Speter/* Get not-present descendants of a copied node. Not valid for the wc-root */ 312251881Speter-- STMT_SELECT_NOT_PRESENT_DESCENDANTS 313251881SpeterSELECT local_relpath FROM nodes 314251881SpeterWHERE wc_id = ?1 AND op_depth = ?3 315251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 316251881Speter AND presence = MAP_NOT_PRESENT 317251881Speter 318251881Speter-- STMT_COMMIT_DESCENDANTS_TO_BASE 319251881SpeterUPDATE NODES SET op_depth = 0, 320251881Speter repos_id = ?4, 321251881Speter repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1), 322251881Speter revision = ?6, 323251881Speter dav_cache = NULL, 324251881Speter moved_here = NULL, 325251881Speter presence = CASE presence 326251881Speter WHEN MAP_NORMAL THEN MAP_NORMAL 327251881Speter WHEN MAP_EXCLUDED THEN MAP_EXCLUDED 328251881Speter ELSE MAP_NOT_PRESENT 329251881Speter END 330251881SpeterWHERE wc_id = ?1 331251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 332251881Speter AND op_depth = ?3 333251881Speter 334251881Speter-- STMT_SELECT_NODE_CHILDREN 335251881Speter/* Return all paths that are children of the directory (?1, ?2) in any 336251881Speter op-depth, including children of any underlying, replaced directories. */ 337251881SpeterSELECT local_relpath FROM nodes 338251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 339251881Speter 340251881Speter-- STMT_SELECT_WORKING_CHILDREN 341251881Speter/* Return all paths that are children of the working version of the 342251881Speter directory (?1, ?2). A given path is not included just because it is a 343251881Speter child of an underlying (replaced) directory, it has to be in the 344251881Speter working version of the directory. */ 345251881SpeterSELECT local_relpath FROM nodes 346251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 347251881Speter AND (op_depth > (SELECT MAX(op_depth) FROM nodes 348251881Speter WHERE wc_id = ?1 AND local_relpath = ?2) 349251881Speter OR 350251881Speter (op_depth = (SELECT MAX(op_depth) FROM nodes 351251881Speter WHERE wc_id = ?1 AND local_relpath = ?2) 352251881Speter AND presence != MAP_BASE_DELETED)) 353251881Speter 354251881Speter-- STMT_SELECT_NODE_PROPS 355251881SpeterSELECT properties, presence FROM nodes 356251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 357251881SpeterORDER BY op_depth DESC 358251881Speter 359251881Speter-- STMT_SELECT_ACTUAL_PROPS 360251881SpeterSELECT properties FROM actual_node 361251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 362251881Speter 363251881Speter-- STMT_UPDATE_ACTUAL_PROPS 364251881SpeterUPDATE actual_node SET properties = ?3 365251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 366251881Speter 367251881Speter-- STMT_INSERT_ACTUAL_PROPS 368251881SpeterINSERT INTO actual_node (wc_id, local_relpath, parent_relpath, properties) 369251881SpeterVALUES (?1, ?2, ?3, ?4) 370251881Speter 371251881Speter-- STMT_INSERT_LOCK 372251881SpeterINSERT OR REPLACE INTO lock 373251881Speter(repos_id, repos_relpath, lock_token, lock_owner, lock_comment, 374251881Speter lock_date) 375251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6) 376251881Speter 377251881Speter/* Not valid for the working copy root */ 378251881Speter-- STMT_SELECT_BASE_NODE_LOCK_TOKENS_RECURSIVE 379251881SpeterSELECT nodes.repos_id, nodes.repos_path, lock_token 380251881SpeterFROM nodes 381251881SpeterLEFT JOIN lock ON nodes.repos_id = lock.repos_id 382251881Speter AND nodes.repos_path = lock.repos_relpath 383251881SpeterWHERE wc_id = ?1 AND op_depth = 0 384251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 385251881Speter 386251881Speter-- STMT_INSERT_WCROOT 387251881SpeterINSERT INTO wcroot (local_abspath) 388251881SpeterVALUES (?1) 389251881Speter 390251881Speter-- STMT_UPDATE_BASE_NODE_DAV_CACHE 391251881SpeterUPDATE nodes SET dav_cache = ?3 392251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 393251881Speter 394251881Speter-- STMT_SELECT_BASE_DAV_CACHE 395251881SpeterSELECT dav_cache FROM nodes 396251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 397251881Speter 398251881Speter-- STMT_SELECT_DELETION_INFO 399251881SpeterSELECT (SELECT b.presence FROM nodes AS b 400251881Speter WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), 401251881Speter work.presence, work.op_depth 402251881SpeterFROM nodes_current AS work 403251881SpeterWHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 404251881SpeterLIMIT 1 405251881Speter 406251881Speter-- STMT_SELECT_DELETION_INFO_SCAN 407251881Speter/* ### FIXME. moved.moved_to IS NOT NULL works when there is 408251881Speter only one move but we need something else when there are several. */ 409251881SpeterSELECT (SELECT b.presence FROM nodes AS b 410251881Speter WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), 411251881Speter work.presence, work.op_depth, moved.moved_to 412251881SpeterFROM nodes_current AS work 413251881SpeterLEFT OUTER JOIN nodes AS moved 414251881Speter ON moved.wc_id = work.wc_id 415251881Speter AND moved.local_relpath = work.local_relpath 416251881Speter AND moved.moved_to IS NOT NULL 417251881SpeterWHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 418251881SpeterLIMIT 1 419251881Speter 420251881Speter-- STMT_SELECT_OP_DEPTH_MOVED_TO 421251881SpeterSELECT op_depth, moved_to, repos_path, revision 422251881SpeterFROM nodes 423251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 424251881Speter AND op_depth <= (SELECT MIN(op_depth) FROM nodes 425251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) 426251881SpeterORDER BY op_depth DESC 427251881Speter 428251881Speter-- STMT_SELECT_MOVED_TO 429251881SpeterSELECT moved_to 430251881SpeterFROM nodes 431251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 432251881Speter 433251881Speter-- STMT_SELECT_MOVED_HERE 434251881SpeterSELECT moved_here, presence, repos_path, revision 435251881SpeterFROM nodes 436251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth >= ?3 437251881SpeterORDER BY op_depth 438251881Speter 439251881Speter-- STMT_SELECT_MOVED_BACK 440251881SpeterSELECT u.local_relpath, 441251881Speter u.presence, u.repos_id, u.repos_path, u.revision, 442251881Speter l.presence, l.repos_id, l.repos_path, l.revision, 443251881Speter u.moved_here, u.moved_to 444251881SpeterFROM nodes u 445251881SpeterLEFT OUTER JOIN nodes l ON l.wc_id = ?1 446251881Speter AND l.local_relpath = u.local_relpath 447251881Speter AND l.op_depth = ?3 448251881SpeterWHERE u.wc_id = ?1 449251881Speter AND u.local_relpath = ?2 450251881Speter AND u.op_depth = ?4 451251881SpeterUNION ALL 452251881SpeterSELECT u.local_relpath, 453251881Speter u.presence, u.repos_id, u.repos_path, u.revision, 454251881Speter l.presence, l.repos_id, l.repos_path, l.revision, 455251881Speter u.moved_here, NULL 456251881SpeterFROM nodes u 457251881SpeterLEFT OUTER JOIN nodes l ON l.wc_id=?1 458251881Speter AND l.local_relpath=u.local_relpath 459251881Speter AND l.op_depth=?3 460251881SpeterWHERE u.wc_id = ?1 461251881Speter AND IS_STRICT_DESCENDANT_OF(u.local_relpath, ?2) 462251881Speter AND u.op_depth = ?4 463251881Speter 464251881Speter-- STMT_DELETE_MOVED_BACK 465251881SpeterDELETE FROM nodes 466251881SpeterWHERE wc_id = ?1 467251881Speter AND (local_relpath = ?2 468251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 469251881Speter AND op_depth = ?3 470251881Speter 471251881Speter-- STMT_DELETE_LOCK 472251881SpeterDELETE FROM lock 473251881SpeterWHERE repos_id = ?1 AND repos_relpath = ?2 474251881Speter 475253734Speter-- STMT_DELETE_LOCK_RECURSIVELY 476253734SpeterDELETE FROM lock 477253734SpeterWHERE repos_id = ?1 AND (repos_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(repos_relpath, ?2)) 478253734Speter 479251881Speter-- STMT_CLEAR_BASE_NODE_RECURSIVE_DAV_CACHE 480251881SpeterUPDATE nodes SET dav_cache = NULL 481251881SpeterWHERE dav_cache IS NOT NULL AND wc_id = ?1 AND op_depth = 0 482251881Speter AND (local_relpath = ?2 483251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 484251881Speter 485251881Speter-- STMT_RECURSIVE_UPDATE_NODE_REPO 486251881SpeterUPDATE nodes SET repos_id = ?4, dav_cache = NULL 487251881Speter/* ### The Sqlite optimizer needs help here ### 488251881Speter * WHERE wc_id = ?1 489251881Speter * AND repos_id = ?3 490251881Speter * AND (local_relpath = ?2 491251881Speter * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))*/ 492251881SpeterWHERE (wc_id = ?1 AND local_relpath = ?2 AND repos_id = ?3) 493251881Speter OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 494251881Speter AND repos_id = ?3) 495251881Speter 496251881Speter 497251881Speter-- STMT_UPDATE_LOCK_REPOS_ID 498251881SpeterUPDATE lock SET repos_id = ?2 499251881SpeterWHERE repos_id = ?1 500251881Speter 501251881Speter-- STMT_UPDATE_NODE_FILEINFO 502251881SpeterUPDATE nodes SET translated_size = ?3, last_mod_time = ?4 503251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 504251881Speter AND op_depth = (SELECT MAX(op_depth) FROM nodes 505251881Speter WHERE wc_id = ?1 AND local_relpath = ?2) 506251881Speter 507251881Speter-- STMT_INSERT_ACTUAL_CONFLICT 508251881SpeterINSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) 509251881SpeterVALUES (?1, ?2, ?3, ?4) 510251881Speter 511251881Speter-- STMT_UPDATE_ACTUAL_CONFLICT 512251881SpeterUPDATE actual_node SET conflict_data = ?3 513251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 514251881Speter 515251881Speter-- STMT_UPDATE_ACTUAL_CHANGELISTS 516251881SpeterUPDATE actual_node SET changelist = ?3 517251881SpeterWHERE wc_id = ?1 518251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 519251881Speter AND local_relpath = (SELECT local_relpath FROM targets_list AS t 520251881Speter WHERE wc_id = ?1 521251881Speter AND t.local_relpath = actual_node.local_relpath 522251881Speter AND kind = MAP_FILE) 523251881Speter 524251881Speter-- STMT_UPDATE_ACTUAL_CLEAR_CHANGELIST 525251881SpeterUPDATE actual_node SET changelist = NULL 526251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 527251881Speter 528251881Speter-- STMT_MARK_SKIPPED_CHANGELIST_DIRS 529251881Speter/* 7 corresponds to svn_wc_notify_skip */ 530251881SpeterINSERT INTO changelist_list (wc_id, local_relpath, notify, changelist) 531251881SpeterSELECT wc_id, local_relpath, 7, ?3 532251881SpeterFROM targets_list 533251881SpeterWHERE wc_id = ?1 534251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 535251881Speter AND kind = MAP_DIR 536251881Speter 537251881Speter-- STMT_RESET_ACTUAL_WITH_CHANGELIST 538251881SpeterREPLACE INTO actual_node ( 539251881Speter wc_id, local_relpath, parent_relpath, changelist) 540251881SpeterVALUES (?1, ?2, ?3, ?4) 541251881Speter 542251881Speter-- STMT_CREATE_CHANGELIST_LIST 543251881SpeterDROP TABLE IF EXISTS changelist_list; 544251881SpeterCREATE TEMPORARY TABLE changelist_list ( 545251881Speter wc_id INTEGER NOT NULL, 546251881Speter local_relpath TEXT NOT NULL, 547251881Speter notify INTEGER NOT NULL, 548251881Speter changelist TEXT NOT NULL, 549251881Speter /* Order NOTIFY descending to make us show clears (27) before adds (26) */ 550251881Speter PRIMARY KEY (wc_id, local_relpath, notify DESC) 551251881Speter) 552251881Speter 553251881Speter/* Create notify items for when a node is removed from a changelist and 554251881Speter when a node is added to a changelist. Make sure nothing is notified 555251881Speter if there were no changes. 556251881Speter*/ 557251881Speter-- STMT_CREATE_CHANGELIST_TRIGGER 558251881SpeterDROP TRIGGER IF EXISTS trigger_changelist_list_change; 559251881SpeterCREATE TEMPORARY TRIGGER trigger_changelist_list_change 560251881SpeterBEFORE UPDATE ON actual_node 561251881SpeterWHEN old.changelist IS NOT new.changelist 562251881SpeterBEGIN 563251881Speter /* 27 corresponds to svn_wc_notify_changelist_clear */ 564251881Speter INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) 565251881Speter SELECT old.wc_id, old.local_relpath, 27, old.changelist 566251881Speter WHERE old.changelist is NOT NULL; 567251881Speter 568251881Speter /* 26 corresponds to svn_wc_notify_changelist_set */ 569251881Speter INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) 570251881Speter SELECT new.wc_id, new.local_relpath, 26, new.changelist 571251881Speter WHERE new.changelist IS NOT NULL; 572251881SpeterEND 573251881Speter 574251881Speter-- STMT_FINALIZE_CHANGELIST 575251881SpeterDROP TRIGGER trigger_changelist_list_change; 576251881SpeterDROP TABLE changelist_list; 577251881SpeterDROP TABLE targets_list 578251881Speter 579251881Speter-- STMT_SELECT_CHANGELIST_LIST 580251881SpeterSELECT wc_id, local_relpath, notify, changelist 581251881SpeterFROM changelist_list 582251881SpeterORDER BY wc_id, local_relpath ASC, notify DESC 583251881Speter 584251881Speter-- STMT_CREATE_TARGETS_LIST 585251881SpeterDROP TABLE IF EXISTS targets_list; 586251881SpeterCREATE TEMPORARY TABLE targets_list ( 587251881Speter wc_id INTEGER NOT NULL, 588251881Speter local_relpath TEXT NOT NULL, 589251881Speter parent_relpath TEXT, 590251881Speter kind TEXT NOT NULL, 591251881Speter PRIMARY KEY (wc_id, local_relpath) 592251881Speter ); 593251881Speter/* need more indicies? */ 594251881Speter 595251881Speter-- STMT_DROP_TARGETS_LIST 596251881SpeterDROP TABLE targets_list 597251881Speter 598251881Speter-- STMT_INSERT_TARGET 599251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 600251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 601251881SpeterFROM nodes_current 602251881SpeterWHERE wc_id = ?1 603251881Speter AND local_relpath = ?2 604251881Speter 605251881Speter-- STMT_INSERT_TARGET_DEPTH_FILES 606251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 607251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 608251881SpeterFROM nodes_current 609251881SpeterWHERE wc_id = ?1 610251881Speter AND parent_relpath = ?2 611251881Speter AND kind = MAP_FILE 612251881Speter 613251881Speter-- STMT_INSERT_TARGET_DEPTH_IMMEDIATES 614251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 615251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 616251881SpeterFROM nodes_current 617251881SpeterWHERE wc_id = ?1 618251881Speter AND parent_relpath = ?2 619251881Speter 620251881Speter-- STMT_INSERT_TARGET_DEPTH_INFINITY 621251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 622251881SpeterSELECT wc_id, local_relpath, parent_relpath, kind 623251881SpeterFROM nodes_current 624251881SpeterWHERE wc_id = ?1 625251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 626251881Speter 627251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST 628251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 629251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 630251881Speter FROM actual_node AS A JOIN nodes_current AS N 631251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 632251881Speter WHERE N.wc_id = ?1 633251881Speter AND N.local_relpath = ?2 634251881Speter AND A.changelist = ?3 635251881Speter 636251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_FILES 637251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 638251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 639251881Speter FROM actual_node AS A JOIN nodes_current AS N 640251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 641251881Speter WHERE N.wc_id = ?1 642251881Speter AND N.parent_relpath = ?2 643251881Speter AND kind = MAP_FILE 644251881Speter AND A.changelist = ?3 645251881Speter 646251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_IMMEDIATES 647251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 648251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 649251881Speter FROM actual_node AS A JOIN nodes_current AS N 650251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 651251881Speter WHERE N.wc_id = ?1 652251881Speter AND N.parent_relpath = ?2 653251881Speter AND A.changelist = ?3 654251881Speter 655251881Speter-- STMT_INSERT_TARGET_WITH_CHANGELIST_DEPTH_INFINITY 656251881SpeterINSERT INTO targets_list(wc_id, local_relpath, parent_relpath, kind) 657251881SpeterSELECT N.wc_id, N.local_relpath, N.parent_relpath, N.kind 658251881Speter FROM actual_node AS A JOIN nodes_current AS N 659251881Speter ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath 660251881Speter WHERE N.wc_id = ?1 661251881Speter AND IS_STRICT_DESCENDANT_OF(N.local_relpath, ?2) 662251881Speter AND A.changelist = ?3 663251881Speter 664251881Speter/* Only used by commented dump_targets() in wc_db.c */ 665251881Speter/*-- STMT_SELECT_TARGETS 666251881SpeterSELECT local_relpath, parent_relpath from targets_list*/ 667251881Speter 668251881Speter-- STMT_INSERT_ACTUAL_EMPTIES 669251881SpeterINSERT OR IGNORE INTO actual_node ( 670251881Speter wc_id, local_relpath, parent_relpath) 671251881SpeterSELECT wc_id, local_relpath, parent_relpath 672251881SpeterFROM targets_list 673251881Speter 674251881Speter-- STMT_DELETE_ACTUAL_EMPTY 675251881SpeterDELETE FROM actual_node 676251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 677251881Speter AND properties IS NULL 678251881Speter AND conflict_data IS NULL 679251881Speter AND changelist IS NULL 680251881Speter AND text_mod IS NULL 681251881Speter AND older_checksum IS NULL 682251881Speter AND right_checksum IS NULL 683251881Speter AND left_checksum IS NULL 684251881Speter 685251881Speter-- STMT_DELETE_ACTUAL_EMPTIES 686251881SpeterDELETE FROM actual_node 687251881SpeterWHERE wc_id = ?1 688251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 689251881Speter AND properties IS NULL 690251881Speter AND conflict_data IS NULL 691251881Speter AND changelist IS NULL 692251881Speter AND text_mod IS NULL 693251881Speter AND older_checksum IS NULL 694251881Speter AND right_checksum IS NULL 695251881Speter AND left_checksum IS NULL 696251881Speter 697251881Speter-- STMT_DELETE_BASE_NODE 698251881SpeterDELETE FROM nodes 699251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 700251881Speter 701251881Speter-- STMT_DELETE_WORKING_NODE 702251881SpeterDELETE FROM nodes 703251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 704251881Speter AND op_depth = (SELECT MAX(op_depth) FROM nodes 705251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > 0) 706251881Speter 707251881Speter-- STMT_DELETE_LOWEST_WORKING_NODE 708251881SpeterDELETE FROM nodes 709251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 710251881Speter AND op_depth = (SELECT MIN(op_depth) FROM nodes 711251881Speter WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3) 712251881Speter AND presence = MAP_BASE_DELETED 713251881Speter 714251881Speter-- STMT_DELETE_ALL_LAYERS 715251881SpeterDELETE FROM nodes 716251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 717251881Speter 718251881Speter-- STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE 719251881SpeterDELETE FROM nodes 720251881SpeterWHERE wc_id = ?1 721251881Speter AND (local_relpath = ?2 722251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 723251881Speter AND op_depth >= ?3 724251881Speter 725251881Speter-- STMT_DELETE_ACTUAL_NODE 726251881SpeterDELETE FROM actual_node 727251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 728251881Speter 729251881Speter/* Will not delete recursive when run on the wcroot */ 730251881Speter-- STMT_DELETE_ACTUAL_NODE_RECURSIVE 731251881SpeterDELETE FROM actual_node 732251881SpeterWHERE wc_id = ?1 733251881Speter AND (local_relpath = ?2 734251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 735251881Speter 736251881Speter-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST 737251881SpeterDELETE FROM actual_node 738251881SpeterWHERE wc_id = ?1 739251881Speter AND local_relpath = ?2 740251881Speter AND (changelist IS NULL 741251881Speter OR NOT EXISTS (SELECT 1 FROM nodes_current c 742251881Speter WHERE c.wc_id = ?1 AND c.local_relpath = ?2 743251881Speter AND c.kind = MAP_FILE)) 744251881Speter 745251881Speter-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 746251881SpeterDELETE FROM actual_node 747251881SpeterWHERE wc_id = ?1 748251881Speter AND (local_relpath = ?2 749251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 750251881Speter AND (changelist IS NULL 751251881Speter OR NOT EXISTS (SELECT 1 FROM nodes_current c 752251881Speter WHERE c.wc_id = ?1 753251881Speter AND c.local_relpath = actual_node.local_relpath 754251881Speter AND c.kind = MAP_FILE)) 755251881Speter 756251881Speter-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST 757251881SpeterUPDATE actual_node 758251881SpeterSET properties = NULL, 759251881Speter text_mod = NULL, 760251881Speter conflict_data = NULL, 761251881Speter tree_conflict_data = NULL, 762251881Speter older_checksum = NULL, 763251881Speter left_checksum = NULL, 764251881Speter right_checksum = NULL 765251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 766251881Speter 767251881Speter-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE 768251881SpeterUPDATE actual_node 769251881SpeterSET properties = NULL, 770251881Speter text_mod = NULL, 771251881Speter conflict_data = NULL, 772251881Speter tree_conflict_data = NULL, 773251881Speter older_checksum = NULL, 774251881Speter left_checksum = NULL, 775251881Speter right_checksum = NULL 776251881SpeterWHERE wc_id = ?1 777251881Speter AND (local_relpath = ?2 778251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 779251881Speter 780251881Speter-- STMT_UPDATE_NODE_BASE_DEPTH 781251881SpeterUPDATE nodes SET depth = ?3 782251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 783251881Speter AND kind=MAP_DIR 784251881Speter 785251881Speter-- STMT_UPDATE_NODE_BASE_PRESENCE 786251881SpeterUPDATE nodes SET presence = ?3 787251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 788251881Speter 789251881Speter-- STMT_UPDATE_BASE_NODE_PRESENCE_REVNUM_AND_REPOS_PATH 790251881SpeterUPDATE nodes SET presence = ?3, revision = ?4, repos_path = ?5 791251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 792251881Speter 793251881Speter-- STMT_LOOK_FOR_WORK 794251881SpeterSELECT id FROM work_queue LIMIT 1 795251881Speter 796251881Speter-- STMT_INSERT_WORK_ITEM 797251881SpeterINSERT INTO work_queue (work) VALUES (?1) 798251881Speter 799251881Speter-- STMT_SELECT_WORK_ITEM 800251881SpeterSELECT id, work FROM work_queue ORDER BY id LIMIT 1 801251881Speter 802251881Speter-- STMT_DELETE_WORK_ITEM 803251881SpeterDELETE FROM work_queue WHERE id = ?1 804251881Speter 805251881Speter-- STMT_INSERT_OR_IGNORE_PRISTINE 806251881SpeterINSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount) 807251881SpeterVALUES (?1, ?2, ?3, 0) 808251881Speter 809251881Speter-- STMT_INSERT_PRISTINE 810251881SpeterINSERT INTO pristine (checksum, md5_checksum, size, refcount) 811251881SpeterVALUES (?1, ?2, ?3, 0) 812251881Speter 813251881Speter-- STMT_SELECT_PRISTINE 814251881SpeterSELECT md5_checksum 815251881SpeterFROM pristine 816251881SpeterWHERE checksum = ?1 817251881Speter 818251881Speter-- STMT_SELECT_PRISTINE_SIZE 819251881SpeterSELECT size 820251881SpeterFROM pristine 821251881SpeterWHERE checksum = ?1 LIMIT 1 822251881Speter 823251881Speter-- STMT_SELECT_PRISTINE_BY_MD5 824251881SpeterSELECT checksum 825251881SpeterFROM pristine 826251881SpeterWHERE md5_checksum = ?1 827251881Speter 828251881Speter-- STMT_SELECT_UNREFERENCED_PRISTINES 829251881SpeterSELECT checksum 830251881SpeterFROM pristine 831251881SpeterWHERE refcount = 0 832251881Speter 833251881Speter-- STMT_DELETE_PRISTINE_IF_UNREFERENCED 834251881SpeterDELETE FROM pristine 835251881SpeterWHERE checksum = ?1 AND refcount = 0 836251881Speter 837251881Speter-- STMT_SELECT_COPY_PRISTINES 838251881Speter/* For the root itself */ 839251881SpeterSELECT n.checksum, md5_checksum, size 840251881SpeterFROM nodes_current n 841251881SpeterLEFT JOIN pristine p ON n.checksum = p.checksum 842251881SpeterWHERE wc_id = ?1 843251881Speter AND n.local_relpath = ?2 844251881Speter AND n.checksum IS NOT NULL 845251881SpeterUNION ALL 846251881Speter/* And all descendants */ 847251881SpeterSELECT n.checksum, md5_checksum, size 848251881SpeterFROM nodes n 849251881SpeterLEFT JOIN pristine p ON n.checksum = p.checksum 850251881SpeterWHERE wc_id = ?1 851251881Speter AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 852251881Speter AND op_depth >= 853251881Speter (SELECT MAX(op_depth) FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2) 854251881Speter AND n.checksum IS NOT NULL 855251881Speter 856251881Speter-- STMT_VACUUM 857251881SpeterVACUUM 858251881Speter 859251881Speter-- STMT_SELECT_CONFLICT_VICTIMS 860251881SpeterSELECT local_relpath, conflict_data 861251881SpeterFROM actual_node 862251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND 863251881Speter NOT (conflict_data IS NULL) 864251881Speter 865251881Speter-- STMT_INSERT_WC_LOCK 866251881SpeterINSERT INTO wc_lock (wc_id, local_dir_relpath, locked_levels) 867251881SpeterVALUES (?1, ?2, ?3) 868251881Speter 869251881Speter-- STMT_SELECT_WC_LOCK 870251881SpeterSELECT locked_levels FROM wc_lock 871251881SpeterWHERE wc_id = ?1 AND local_dir_relpath = ?2 872251881Speter 873251881Speter-- STMT_SELECT_ANCESTOR_WCLOCKS 874251881SpeterSELECT local_dir_relpath, locked_levels FROM wc_lock 875251881SpeterWHERE wc_id = ?1 876251881Speter AND ((local_dir_relpath >= ?3 AND local_dir_relpath <= ?2) 877251881Speter OR local_dir_relpath = '') 878251881Speter 879251881Speter-- STMT_DELETE_WC_LOCK 880251881SpeterDELETE FROM wc_lock 881251881SpeterWHERE wc_id = ?1 AND local_dir_relpath = ?2 882251881Speter 883251881Speter-- STMT_FIND_WC_LOCK 884251881SpeterSELECT local_dir_relpath FROM wc_lock 885251881SpeterWHERE wc_id = ?1 886251881Speter AND IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2) 887251881Speter 888251881Speter-- STMT_DELETE_WC_LOCK_ORPHAN 889251881SpeterDELETE FROM wc_lock 890251881SpeterWHERE wc_id = ?1 AND local_dir_relpath = ?2 891251881SpeterAND NOT EXISTS (SELECT 1 FROM nodes 892251881Speter WHERE nodes.wc_id = ?1 893251881Speter AND nodes.local_relpath = wc_lock.local_dir_relpath) 894251881Speter 895251881Speter-- STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE 896251881SpeterDELETE FROM wc_lock 897251881SpeterWHERE wc_id = ?1 898251881Speter AND (local_dir_relpath = ?2 899251881Speter OR IS_STRICT_DESCENDANT_OF(local_dir_relpath, ?2)) 900251881Speter AND NOT EXISTS (SELECT 1 FROM nodes 901251881Speter WHERE nodes.wc_id = ?1 902251881Speter AND nodes.local_relpath = wc_lock.local_dir_relpath) 903251881Speter 904251881Speter-- STMT_APPLY_CHANGES_TO_BASE_NODE 905251881Speter/* translated_size and last_mod_time are not mentioned here because they will 906251881Speter be tweaked after the working-file is installed. When we replace an existing 907251881Speter BASE node (read: bump), preserve its file_external status. */ 908251881SpeterINSERT OR REPLACE INTO nodes ( 909251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 910251881Speter revision, presence, depth, kind, changed_revision, changed_date, 911251881Speter changed_author, checksum, properties, dav_cache, symlink_target, 912251881Speter inherited_props, file_external ) 913251881SpeterVALUES (?1, ?2, 0, 914251881Speter ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, 915251881Speter (SELECT file_external FROM nodes 916251881Speter WHERE wc_id = ?1 917251881Speter AND local_relpath = ?2 918251881Speter AND op_depth = 0)) 919251881Speter 920251881Speter-- STMT_INSTALL_WORKING_NODE_FOR_DELETE 921251881SpeterINSERT OR REPLACE INTO nodes ( 922251881Speter wc_id, local_relpath, op_depth, 923251881Speter parent_relpath, presence, kind) 924251881SpeterVALUES(?1, ?2, ?3, ?4, MAP_BASE_DELETED, ?5) 925251881Speter 926251881Speter-- STMT_DELETE_NO_LOWER_LAYER 927251881SpeterDELETE FROM nodes 928251881Speter WHERE wc_id = ?1 929251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 930251881Speter AND op_depth = ?3 931251881Speter AND NOT EXISTS (SELECT 1 FROM nodes n 932251881Speter WHERE n.wc_id = ?1 933251881Speter AND n.local_relpath = nodes.local_relpath 934251881Speter AND n.op_depth = ?4 935251881Speter AND n.presence IN (MAP_NORMAL, MAP_INCOMPLETE)) 936251881Speter 937251881Speter-- STMT_REPLACE_WITH_BASE_DELETED 938251881SpeterINSERT OR REPLACE INTO nodes (wc_id, local_relpath, op_depth, parent_relpath, 939251881Speter kind, moved_to, presence) 940251881SpeterSELECT wc_id, local_relpath, op_depth, parent_relpath, 941251881Speter kind, moved_to, MAP_BASE_DELETED 942251881Speter FROM nodes 943251881Speter WHERE wc_id = ?1 944251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 945251881Speter AND op_depth = ?3 946251881Speter 947251881Speter/* If this query is updated, STMT_INSERT_DELETE_LIST should too. */ 948251881Speter-- STMT_INSERT_DELETE_FROM_NODE_RECURSIVE 949251881SpeterINSERT INTO nodes ( 950251881Speter wc_id, local_relpath, op_depth, parent_relpath, presence, kind) 951251881SpeterSELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, MAP_BASE_DELETED, 952251881Speter kind 953251881SpeterFROM nodes 954251881SpeterWHERE wc_id = ?1 955251881Speter AND (local_relpath = ?2 956251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 957251881Speter AND op_depth = ?3 958251881Speter AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) 959251881Speter AND file_external IS NULL 960251881Speter 961251881Speter-- STMT_INSERT_WORKING_NODE_FROM_BASE_COPY 962251881SpeterINSERT INTO nodes ( 963251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path, 964251881Speter revision, presence, depth, kind, changed_revision, changed_date, 965251881Speter changed_author, checksum, properties, translated_size, last_mod_time, 966251881Speter symlink_target ) 967251881SpeterSELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id, 968251881Speter repos_path, revision, presence, depth, kind, changed_revision, 969251881Speter changed_date, changed_author, checksum, properties, translated_size, 970251881Speter last_mod_time, symlink_target 971251881SpeterFROM nodes 972251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 973251881Speter 974251881Speter-- STMT_INSERT_DELETE_FROM_BASE 975251881SpeterINSERT INTO nodes ( 976251881Speter wc_id, local_relpath, op_depth, parent_relpath, presence, kind) 977251881SpeterSELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, 978251881Speter MAP_BASE_DELETED, kind 979251881SpeterFROM nodes 980251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 981251881Speter 982251881Speter/* Not valid on the wc-root */ 983251881Speter-- STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE 984251881SpeterUPDATE nodes SET op_depth = ?3 + 1 985251881SpeterWHERE wc_id = ?1 986251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 987251881Speter AND op_depth = ?3 988251881Speter 989251881Speter-- STMT_UPDATE_OP_DEPTH_RECURSIVE 990251881SpeterUPDATE nodes SET op_depth = ?4, moved_here = NULL 991251881SpeterWHERE wc_id = ?1 992251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 993251881Speter AND op_depth = ?3 994251881Speter 995251881Speter-- STMT_DOES_NODE_EXIST 996251881SpeterSELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2 997251881SpeterLIMIT 1 998251881Speter 999251881Speter-- STMT_HAS_SERVER_EXCLUDED_DESCENDANTS 1000251881SpeterSELECT local_relpath FROM nodes 1001251881SpeterWHERE wc_id = ?1 1002251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1003251881Speter AND op_depth = 0 AND presence = MAP_SERVER_EXCLUDED 1004251881SpeterLIMIT 1 1005251881Speter 1006251881Speter/* Select all excluded nodes. Not valid on the WC-root */ 1007251881Speter-- STMT_SELECT_ALL_EXCLUDED_DESCENDANTS 1008251881SpeterSELECT local_relpath FROM nodes 1009251881SpeterWHERE wc_id = ?1 1010251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1011251881Speter AND op_depth = 0 1012251881Speter AND (presence = MAP_SERVER_EXCLUDED OR presence = MAP_EXCLUDED) 1013251881Speter 1014251881Speter/* Creates a copy from one top level NODE to a different location */ 1015251881Speter-- STMT_INSERT_WORKING_NODE_COPY_FROM 1016251881SpeterINSERT OR REPLACE INTO nodes ( 1017251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, 1018251881Speter repos_path, revision, presence, depth, moved_here, kind, changed_revision, 1019251881Speter changed_date, changed_author, checksum, properties, translated_size, 1020251881Speter last_mod_time, symlink_target, moved_to ) 1021251881SpeterSELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/, 1022251881Speter repos_id, repos_path, revision, ?6 /*presence*/, depth, 1023251881Speter ?7/*moved_here*/, kind, changed_revision, changed_date, 1024251881Speter changed_author, checksum, properties, translated_size, 1025251881Speter last_mod_time, symlink_target, 1026251881Speter (SELECT dst.moved_to FROM nodes AS dst 1027251881Speter WHERE dst.wc_id = ?1 1028251881Speter AND dst.local_relpath = ?3 1029251881Speter AND dst.op_depth = ?4) 1030251881SpeterFROM nodes_current 1031251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1032251881Speter 1033251881Speter-- STMT_INSERT_WORKING_NODE_COPY_FROM_DEPTH 1034251881SpeterINSERT OR REPLACE INTO nodes ( 1035251881Speter wc_id, local_relpath, op_depth, parent_relpath, repos_id, 1036251881Speter repos_path, revision, presence, depth, moved_here, kind, changed_revision, 1037251881Speter changed_date, changed_author, checksum, properties, translated_size, 1038251881Speter last_mod_time, symlink_target, moved_to ) 1039251881SpeterSELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/, 1040251881Speter repos_id, repos_path, revision, ?6 /*presence*/, depth, 1041251881Speter ?8 /*moved_here*/, kind, changed_revision, changed_date, 1042251881Speter changed_author, checksum, properties, translated_size, 1043251881Speter last_mod_time, symlink_target, 1044251881Speter (SELECT dst.moved_to FROM nodes AS dst 1045251881Speter WHERE dst.wc_id = ?1 1046251881Speter AND dst.local_relpath = ?3 1047251881Speter AND dst.op_depth = ?4) 1048251881SpeterFROM nodes 1049251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?7 1050251881Speter 1051251881Speter-- STMT_UPDATE_BASE_REVISION 1052251881SpeterUPDATE nodes SET revision = ?3 1053251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1054251881Speter 1055251881Speter-- STMT_UPDATE_BASE_REPOS 1056251881SpeterUPDATE nodes SET repos_id = ?3, repos_path = ?4 1057251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0 1058251881Speter 1059251881Speter-- STMT_ACTUAL_HAS_CHILDREN 1060251881SpeterSELECT 1 FROM actual_node 1061251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 1062251881SpeterLIMIT 1 1063251881Speter 1064251881Speter-- STMT_INSERT_EXTERNAL 1065251881SpeterINSERT OR REPLACE INTO externals ( 1066251881Speter wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath, 1067251881Speter repos_id, def_repos_relpath, def_operational_revision, def_revision) 1068251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10) 1069251881Speter 1070251881Speter-- STMT_SELECT_EXTERNAL_INFO 1071251881SpeterSELECT presence, kind, def_local_relpath, repos_id, 1072251881Speter def_repos_relpath, def_operational_revision, def_revision 1073251881SpeterFROM externals WHERE wc_id = ?1 AND local_relpath = ?2 1074251881SpeterLIMIT 1 1075251881Speter 1076251881Speter-- STMT_DELETE_FILE_EXTERNALS 1077251881SpeterDELETE FROM nodes 1078251881SpeterWHERE wc_id = ?1 1079251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1080251881Speter AND op_depth = 0 1081251881Speter AND file_external IS NOT NULL 1082251881Speter 1083251881Speter-- STMT_DELETE_FILE_EXTERNAL_REGISTATIONS 1084251881SpeterDELETE FROM externals 1085251881SpeterWHERE wc_id = ?1 1086251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1087251881Speter AND kind != MAP_DIR 1088251881Speter 1089251881Speter-- STMT_DELETE_EXTERNAL_REGISTATIONS 1090251881SpeterDELETE FROM externals 1091251881SpeterWHERE wc_id = ?1 1092251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1093251881Speter 1094251881Speter/* Select all committable externals, i.e. only unpegged ones on the same 1095251881Speter * repository as the target path ?2, that are defined by WC ?1 to 1096251881Speter * live below the target path. It does not matter which ancestor has the 1097251881Speter * svn:externals definition, only the local path at which the external is 1098251881Speter * supposed to be checked out is queried. 1099251881Speter * Arguments: 1100251881Speter * ?1: wc_id. 1101251881Speter * ?2: the target path, local relpath inside ?1. 1102251881Speter * 1103251881Speter * ### NOTE: This statement deliberately removes file externals that live 1104251881Speter * inside an unversioned dir, because commit still breaks on those. 1105251881Speter * Once that's been fixed, the conditions below "--->8---" become obsolete. */ 1106251881Speter-- STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW 1107251881SpeterSELECT local_relpath, kind, def_repos_relpath, 1108251881Speter (SELECT root FROM repository AS r WHERE r.id = e.repos_id) 1109251881SpeterFROM externals e 1110251881SpeterWHERE wc_id = ?1 1111251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1112251881Speter AND def_revision IS NULL 1113251881Speter AND repos_id = (SELECT repos_id 1114251881Speter FROM nodes AS n 1115251881Speter WHERE n.wc_id = ?1 1116251881Speter AND n.local_relpath = '' 1117251881Speter AND n.op_depth = 0) 1118251881Speter AND ((kind='dir') 1119251881Speter OR EXISTS (SELECT 1 FROM nodes 1120251881Speter WHERE nodes.wc_id = e.wc_id 1121251881Speter AND nodes.local_relpath = e.parent_relpath)) 1122251881Speter 1123251881Speter-- STMT_SELECT_COMMITTABLE_EXTERNALS_IMMEDIATELY_BELOW 1124251881SpeterSELECT local_relpath, kind, def_repos_relpath, 1125251881Speter (SELECT root FROM repository AS r WHERE r.id = e.repos_id) 1126251881SpeterFROM externals e 1127251881SpeterWHERE wc_id = ?1 1128251881Speter AND IS_STRICT_DESCENDANT_OF(e.local_relpath, ?2) 1129251881Speter AND parent_relpath = ?2 1130251881Speter AND def_revision IS NULL 1131251881Speter AND repos_id = (SELECT repos_id 1132251881Speter FROM nodes AS n 1133251881Speter WHERE n.wc_id = ?1 1134251881Speter AND n.local_relpath = '' 1135251881Speter AND n.op_depth = 0) 1136251881Speter AND ((kind='dir') 1137251881Speter OR EXISTS (SELECT 1 FROM nodes 1138251881Speter WHERE nodes.wc_id = e.wc_id 1139251881Speter AND nodes.local_relpath = e.parent_relpath)) 1140251881Speter 1141251881Speter-- STMT_SELECT_EXTERNALS_DEFINED 1142251881SpeterSELECT local_relpath, def_local_relpath 1143251881SpeterFROM externals 1144251881Speter/* ### The Sqlite optimizer needs help here ### 1145251881Speter * WHERE wc_id = ?1 1146251881Speter * AND (def_local_relpath = ?2 1147251881Speter * OR IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) */ 1148251881SpeterWHERE (wc_id = ?1 AND def_local_relpath = ?2) 1149251881Speter OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(def_local_relpath, ?2)) 1150251881Speter 1151251881Speter-- STMT_DELETE_EXTERNAL 1152251881SpeterDELETE FROM externals 1153251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1154251881Speter 1155251881Speter-- STMT_SELECT_EXTERNAL_PROPERTIES 1156251881Speter/* ### It would be nice if Sqlite would handle 1157251881Speter * SELECT IFNULL((SELECT properties FROM actual_node a 1158251881Speter * WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1159251881Speter * properties), 1160251881Speter * local_relpath, depth 1161251881Speter * FROM nodes_current n 1162251881Speter * WHERE wc_id = ?1 1163251881Speter * AND (local_relpath = ?2 1164251881Speter * OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1165251881Speter * AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1166251881Speter * ### But it would take a double table scan execution plan for it. 1167251881Speter * ### Maybe there is something else going on? */ 1168251881SpeterSELECT IFNULL((SELECT properties FROM actual_node a 1169251881Speter WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1170251881Speter properties), 1171251881Speter local_relpath, depth 1172251881SpeterFROM nodes_current n 1173251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1174251881Speter AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1175251881SpeterUNION ALL 1176251881SpeterSELECT IFNULL((SELECT properties FROM actual_node a 1177251881Speter WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1178251881Speter properties), 1179251881Speter local_relpath, depth 1180251881SpeterFROM nodes_current n 1181251881SpeterWHERE wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1182251881Speter AND kind = MAP_DIR AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1183251881Speter 1184251881Speter-- STMT_SELECT_CURRENT_PROPS_RECURSIVE 1185251881Speter/* ### Ugly OR to make sqlite use the proper optimizations */ 1186251881SpeterSELECT IFNULL((SELECT properties FROM actual_node a 1187251881Speter WHERE a.wc_id = ?1 AND A.local_relpath = n.local_relpath), 1188251881Speter properties), 1189251881Speter local_relpath 1190251881SpeterFROM nodes_current n 1191251881SpeterWHERE (wc_id = ?1 AND local_relpath = ?2) 1192251881Speter OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1193251881Speter 1194251881Speter-- STMT_PRAGMA_LOCKING_MODE 1195251881SpeterPRAGMA locking_mode = exclusive 1196251881Speter 1197251881Speter/* ------------------------------------------------------------------------- */ 1198251881Speter 1199251881Speter/* these are used in entries.c */ 1200251881Speter 1201251881Speter-- STMT_INSERT_ACTUAL_NODE 1202251881SpeterINSERT OR REPLACE INTO actual_node ( 1203251881Speter wc_id, local_relpath, parent_relpath, properties, changelist, conflict_data) 1204251881SpeterVALUES (?1, ?2, ?3, ?4, ?5, ?6) 1205251881Speter 1206251881Speter/* ------------------------------------------------------------------------- */ 1207251881Speter 1208251881Speter/* these are used in upgrade.c */ 1209251881Speter 1210251881Speter-- STMT_UPDATE_ACTUAL_CONFLICT_DATA 1211251881SpeterUPDATE actual_node SET conflict_data = ?3 1212251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 1213251881Speter 1214251881Speter-- STMT_INSERT_ACTUAL_CONFLICT_DATA 1215251881SpeterINSERT INTO actual_node (wc_id, local_relpath, conflict_data, parent_relpath) 1216251881SpeterVALUES (?1, ?2, ?3, ?4) 1217251881Speter 1218251881Speter-- STMT_SELECT_ALL_FILES 1219251881SpeterSELECT local_relpath FROM nodes_current 1220251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND kind = MAP_FILE 1221251881Speter 1222251881Speter-- STMT_UPDATE_NODE_PROPS 1223251881SpeterUPDATE nodes SET properties = ?4 1224251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1225251881Speter 1226251881Speter-- STMT_PRAGMA_TABLE_INFO_NODES 1227251881SpeterPRAGMA table_info("NODES") 1228251881Speter 1229251881Speter/* -------------------------------------------------------------------------- 1230251881Speter * Complex queries for callback walks, caching results in a temporary table. 1231251881Speter * 1232251881Speter * These target table are then used for joins against NODES, or for reporting 1233251881Speter */ 1234251881Speter 1235251881Speter-- STMT_CREATE_TARGET_PROP_CACHE 1236251881SpeterDROP TABLE IF EXISTS target_prop_cache; 1237251881SpeterCREATE TEMPORARY TABLE target_prop_cache ( 1238251881Speter local_relpath TEXT NOT NULL PRIMARY KEY, 1239251881Speter kind TEXT NOT NULL, 1240251881Speter properties BLOB 1241251881Speter); 1242251881Speter/* ### Need index? 1243251881SpeterCREATE UNIQUE INDEX temp__node_props_cache_unique 1244251881Speter ON temp__node_props_cache (local_relpath) */ 1245251881Speter 1246251881Speter-- STMT_CACHE_TARGET_PROPS 1247251881SpeterINSERT INTO target_prop_cache(local_relpath, kind, properties) 1248251881Speter SELECT n.local_relpath, n.kind, 1249251881Speter IFNULL((SELECT properties FROM actual_node AS a 1250251881Speter WHERE a.wc_id = n.wc_id 1251251881Speter AND a.local_relpath = n.local_relpath), 1252251881Speter n.properties) 1253251881Speter FROM targets_list AS t 1254251881Speter JOIN nodes AS n 1255251881Speter ON n.wc_id = ?1 1256251881Speter AND n.local_relpath = t.local_relpath 1257251881Speter AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 1258251881Speter WHERE n3.wc_id = ?1 1259251881Speter AND n3.local_relpath = t.local_relpath) 1260251881Speter WHERE t.wc_id = ?1 1261251881Speter AND (presence=MAP_NORMAL OR presence=MAP_INCOMPLETE) 1262251881Speter ORDER BY t.local_relpath 1263251881Speter 1264251881Speter-- STMT_CACHE_TARGET_PRISTINE_PROPS 1265251881SpeterINSERT INTO target_prop_cache(local_relpath, kind, properties) 1266251881Speter SELECT n.local_relpath, n.kind, 1267251881Speter CASE n.presence 1268251881Speter WHEN MAP_BASE_DELETED 1269251881Speter THEN (SELECT properties FROM nodes AS p 1270251881Speter WHERE p.wc_id = n.wc_id 1271251881Speter AND p.local_relpath = n.local_relpath 1272251881Speter AND p.op_depth < n.op_depth 1273251881Speter ORDER BY p.op_depth DESC /* LIMIT 1 */) 1274251881Speter ELSE properties END 1275251881Speter FROM targets_list AS t 1276251881Speter JOIN nodes AS n 1277251881Speter ON n.wc_id = ?1 1278251881Speter AND n.local_relpath = t.local_relpath 1279251881Speter AND n.op_depth = (SELECT MAX(op_depth) FROM nodes AS n3 1280251881Speter WHERE n3.wc_id = ?1 1281251881Speter AND n3.local_relpath = t.local_relpath) 1282251881Speter WHERE t.wc_id = ?1 1283251881Speter AND (presence = MAP_NORMAL 1284251881Speter OR presence = MAP_INCOMPLETE 1285251881Speter OR presence = MAP_BASE_DELETED) 1286251881Speter ORDER BY t.local_relpath 1287251881Speter 1288251881Speter-- STMT_SELECT_ALL_TARGET_PROP_CACHE 1289251881SpeterSELECT local_relpath, properties FROM target_prop_cache 1290251881SpeterORDER BY local_relpath 1291251881Speter 1292251881Speter-- STMT_DROP_TARGET_PROP_CACHE 1293251881SpeterDROP TABLE target_prop_cache; 1294251881Speter 1295251881Speter-- STMT_CREATE_REVERT_LIST 1296251881SpeterDROP TABLE IF EXISTS revert_list; 1297251881SpeterCREATE TEMPORARY TABLE revert_list ( 1298251881Speter /* need wc_id if/when revert spans multiple working copies */ 1299251881Speter local_relpath TEXT NOT NULL, 1300251881Speter actual INTEGER NOT NULL, /* 1 if an actual row, 0 if a nodes row */ 1301251881Speter conflict_data BLOB, 1302251881Speter notify INTEGER, /* 1 if an actual row had props or tree conflict */ 1303251881Speter op_depth INTEGER, 1304251881Speter repos_id INTEGER, 1305251881Speter kind TEXT, 1306251881Speter PRIMARY KEY (local_relpath, actual) 1307251881Speter ); 1308251881SpeterDROP TRIGGER IF EXISTS trigger_revert_list_nodes; 1309251881SpeterCREATE TEMPORARY TRIGGER trigger_revert_list_nodes 1310251881SpeterBEFORE DELETE ON nodes 1311251881SpeterBEGIN 1312251881Speter INSERT OR REPLACE INTO revert_list(local_relpath, actual, op_depth, 1313251881Speter repos_id, kind) 1314251881Speter SELECT OLD.local_relpath, 0, OLD.op_depth, OLD.repos_id, OLD.kind; 1315251881SpeterEND; 1316251881SpeterDROP TRIGGER IF EXISTS trigger_revert_list_actual_delete; 1317251881SpeterCREATE TEMPORARY TRIGGER trigger_revert_list_actual_delete 1318251881SpeterBEFORE DELETE ON actual_node 1319251881SpeterBEGIN 1320251881Speter INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, 1321251881Speter notify) 1322251881Speter SELECT OLD.local_relpath, 1, OLD.conflict_data, 1323251881Speter CASE 1324251881Speter WHEN OLD.properties IS NOT NULL 1325251881Speter THEN 1 1326251881Speter WHEN NOT EXISTS(SELECT 1 FROM NODES n 1327251881Speter WHERE n.wc_id = OLD.wc_id 1328251881Speter AND n.local_relpath = OLD.local_relpath) 1329251881Speter THEN 1 1330251881Speter ELSE NULL 1331251881Speter END; 1332251881SpeterEND; 1333251881SpeterDROP TRIGGER IF EXISTS trigger_revert_list_actual_update; 1334251881SpeterCREATE TEMPORARY TRIGGER trigger_revert_list_actual_update 1335251881SpeterBEFORE UPDATE ON actual_node 1336251881SpeterBEGIN 1337251881Speter INSERT OR REPLACE INTO revert_list(local_relpath, actual, conflict_data, 1338251881Speter notify) 1339251881Speter SELECT OLD.local_relpath, 1, OLD.conflict_data, 1340251881Speter CASE 1341251881Speter WHEN OLD.properties IS NOT NULL 1342251881Speter THEN 1 1343251881Speter WHEN NOT EXISTS(SELECT 1 FROM NODES n 1344251881Speter WHERE n.wc_id = OLD.wc_id 1345251881Speter AND n.local_relpath = OLD.local_relpath) 1346251881Speter THEN 1 1347251881Speter ELSE NULL 1348251881Speter END; 1349251881SpeterEND 1350251881Speter 1351251881Speter-- STMT_DROP_REVERT_LIST_TRIGGERS 1352251881SpeterDROP TRIGGER trigger_revert_list_nodes; 1353251881SpeterDROP TRIGGER trigger_revert_list_actual_delete; 1354251881SpeterDROP TRIGGER trigger_revert_list_actual_update 1355251881Speter 1356251881Speter-- STMT_SELECT_REVERT_LIST 1357251881SpeterSELECT actual, notify, kind, op_depth, repos_id, conflict_data 1358251881SpeterFROM revert_list 1359251881SpeterWHERE local_relpath = ?1 1360251881SpeterORDER BY actual DESC 1361251881Speter 1362251881Speter-- STMT_SELECT_REVERT_LIST_COPIED_CHILDREN 1363251881SpeterSELECT local_relpath, kind 1364251881SpeterFROM revert_list 1365251881SpeterWHERE IS_STRICT_DESCENDANT_OF(local_relpath, ?1) 1366251881Speter AND op_depth >= ?2 1367251881Speter AND repos_id IS NOT NULL 1368251881SpeterORDER BY local_relpath 1369251881Speter 1370251881Speter-- STMT_DELETE_REVERT_LIST 1371251881SpeterDELETE FROM revert_list WHERE local_relpath = ?1 1372251881Speter 1373251881Speter-- STMT_SELECT_REVERT_LIST_RECURSIVE 1374251881SpeterSELECT DISTINCT local_relpath 1375251881SpeterFROM revert_list 1376251881SpeterWHERE (local_relpath = ?1 1377251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1)) 1378251881Speter AND (notify OR actual = 0) 1379251881SpeterORDER BY local_relpath 1380251881Speter 1381251881Speter-- STMT_DELETE_REVERT_LIST_RECURSIVE 1382251881SpeterDELETE FROM revert_list 1383251881SpeterWHERE (local_relpath = ?1 1384251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?1)) 1385251881Speter 1386251881Speter-- STMT_DROP_REVERT_LIST 1387251881SpeterDROP TABLE IF EXISTS revert_list 1388251881Speter 1389251881Speter-- STMT_CREATE_DELETE_LIST 1390251881SpeterDROP TABLE IF EXISTS delete_list; 1391251881SpeterCREATE TEMPORARY TABLE delete_list ( 1392251881Speter/* ### we should put the wc_id in here in case a delete spans multiple 1393251881Speter ### working copies. queries, etc will need to be adjusted. */ 1394251881Speter local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE 1395251881Speter ) 1396251881Speter 1397251881Speter/* This matches the selection in STMT_INSERT_DELETE_FROM_NODE_RECURSIVE. 1398251881Speter A subquery is used instead of nodes_current to avoid a table scan */ 1399251881Speter-- STMT_INSERT_DELETE_LIST 1400251881SpeterINSERT INTO delete_list(local_relpath) 1401251881SpeterSELECT local_relpath FROM nodes AS n 1402251881SpeterWHERE wc_id = ?1 1403251881Speter AND (local_relpath = ?2 1404251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1405251881Speter AND op_depth >= ?3 1406251881Speter AND op_depth = (SELECT MAX(s.op_depth) FROM nodes AS s 1407251881Speter WHERE s.wc_id = ?1 1408251881Speter AND s.local_relpath = n.local_relpath) 1409251881Speter AND presence NOT IN (MAP_BASE_DELETED, MAP_NOT_PRESENT, MAP_EXCLUDED, MAP_SERVER_EXCLUDED) 1410251881Speter AND file_external IS NULL 1411251881Speter 1412251881Speter-- STMT_SELECT_DELETE_LIST 1413251881SpeterSELECT local_relpath FROM delete_list 1414251881SpeterORDER BY local_relpath 1415251881Speter 1416251881Speter-- STMT_FINALIZE_DELETE 1417251881SpeterDROP TABLE IF EXISTS delete_list 1418251881Speter 1419251881Speter-- STMT_CREATE_UPDATE_MOVE_LIST 1420251881SpeterDROP TABLE IF EXISTS update_move_list; 1421251881SpeterCREATE TEMPORARY TABLE update_move_list ( 1422251881Speter/* ### we should put the wc_id in here in case a move update spans multiple 1423251881Speter ### working copies. queries, etc will need to be adjusted. */ 1424251881Speter local_relpath TEXT PRIMARY KEY NOT NULL UNIQUE, 1425251881Speter action INTEGER NOT NULL, 1426251881Speter kind INTEGER NOT NULL, 1427251881Speter content_state INTEGER NOT NULL, 1428251881Speter prop_state INTEGER NOT NULL 1429251881Speter ) 1430251881Speter 1431251881Speter-- STMT_INSERT_UPDATE_MOVE_LIST 1432251881SpeterINSERT INTO update_move_list(local_relpath, action, kind, content_state, 1433251881Speter prop_state) 1434251881SpeterVALUES (?1, ?2, ?3, ?4, ?5) 1435251881Speter 1436251881Speter-- STMT_SELECT_UPDATE_MOVE_LIST 1437251881SpeterSELECT local_relpath, action, kind, content_state, prop_state 1438251881SpeterFROM update_move_list 1439251881SpeterORDER BY local_relpath 1440251881Speter 1441251881Speter-- STMT_FINALIZE_UPDATE_MOVE 1442251881SpeterDROP TABLE IF EXISTS update_move_list 1443251881Speter 1444251881Speter/* ------------------------------------------------------------------------- */ 1445251881Speter 1446251881Speter/* Queries for revision status. */ 1447251881Speter 1448251881Speter-- STMT_SELECT_MIN_MAX_REVISIONS 1449251881SpeterSELECT MIN(revision), MAX(revision), 1450251881Speter MIN(changed_revision), MAX(changed_revision) FROM nodes 1451251881Speter WHERE wc_id = ?1 1452251881Speter AND (local_relpath = ?2 1453251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1454251881Speter AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1455251881Speter AND file_external IS NULL 1456251881Speter AND op_depth = 0 1457251881Speter 1458251881Speter-- STMT_HAS_SPARSE_NODES 1459251881SpeterSELECT 1 FROM nodes 1460251881SpeterWHERE wc_id = ?1 1461251881Speter AND (local_relpath = ?2 1462251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1463251881Speter AND op_depth = 0 1464251881Speter AND (presence IN (MAP_SERVER_EXCLUDED, MAP_EXCLUDED) 1465251881Speter OR depth NOT IN (MAP_DEPTH_INFINITY, MAP_DEPTH_UNKNOWN)) 1466251881Speter AND file_external IS NULL 1467251881SpeterLIMIT 1 1468251881Speter 1469251881Speter-- STMT_SUBTREE_HAS_TREE_MODIFICATIONS 1470251881SpeterSELECT 1 FROM nodes 1471251881SpeterWHERE wc_id = ?1 1472251881Speter AND (local_relpath = ?2 1473251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1474251881Speter AND op_depth > 0 1475251881SpeterLIMIT 1 1476251881Speter 1477251881Speter-- STMT_SUBTREE_HAS_PROP_MODIFICATIONS 1478251881SpeterSELECT 1 FROM actual_node 1479251881SpeterWHERE wc_id = ?1 1480251881Speter AND (local_relpath = ?2 1481251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1482251881Speter AND properties IS NOT NULL 1483251881SpeterLIMIT 1 1484251881Speter 1485251881Speter-- STMT_HAS_SWITCHED 1486251881SpeterSELECT 1 1487251881SpeterFROM nodes 1488251881SpeterWHERE wc_id = ?1 1489251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1490251881Speter AND op_depth = 0 1491251881Speter AND file_external IS NULL 1492251881Speter AND presence IN (MAP_NORMAL, MAP_INCOMPLETE) 1493251881Speter AND repos_path IS NOT RELPATH_SKIP_JOIN(?2, ?3, local_relpath) 1494251881SpeterLIMIT 1 1495251881Speter 1496251881Speter-- STMT_SELECT_BASE_FILES_RECURSIVE 1497251881SpeterSELECT local_relpath, translated_size, last_mod_time FROM nodes AS n 1498251881SpeterWHERE wc_id = ?1 1499251881Speter AND (local_relpath = ?2 1500251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1501251881Speter AND op_depth = 0 1502251881Speter AND kind=MAP_FILE 1503251881Speter AND presence=MAP_NORMAL 1504251881Speter AND file_external IS NULL 1505251881Speter 1506251881Speter/* ### FIXME: op-depth? What about multiple moves? */ 1507251881Speter-- STMT_SELECT_MOVED_FROM_RELPATH 1508251881SpeterSELECT local_relpath, op_depth FROM nodes 1509251881SpeterWHERE wc_id = ?1 AND moved_to = ?2 AND op_depth > 0 1510251881Speter 1511251881Speter-- STMT_UPDATE_MOVED_TO_RELPATH 1512251881SpeterUPDATE nodes SET moved_to = ?4 1513251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1514251881Speter 1515251881Speter-- STMT_CLEAR_MOVED_TO_RELPATH 1516251881SpeterUPDATE nodes SET moved_to = NULL 1517251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = ?3 1518251881Speter 1519251881Speter-- STMT_CLEAR_MOVED_HERE_RECURSIVE 1520251881SpeterUPDATE nodes SET moved_here = NULL 1521251881SpeterWHERE wc_id = ?1 1522251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1523251881Speter AND op_depth = ?3 1524251881Speter 1525251881Speter/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1. 1526251881Speter * Each row returns a moved-here path (always a child of ?2) in the first 1527251881Speter * column, and its matching moved-away (deleted) path in the second column. */ 1528251881Speter-- STMT_SELECT_MOVED_HERE_CHILDREN 1529251881SpeterSELECT moved_to, local_relpath FROM nodes 1530251881SpeterWHERE wc_id = ?1 AND op_depth > 0 1531251881Speter AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1532251881Speter 1533251881Speter-- STMT_SELECT_MOVED_FOR_DELETE 1534251881SpeterSELECT local_relpath, moved_to, op_depth FROM nodes 1535251881SpeterWHERE wc_id = ?1 1536251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1537251881Speter AND moved_to IS NOT NULL 1538251881Speter AND op_depth >= (SELECT MAX(op_depth) FROM nodes o 1539251881Speter WHERE o.wc_id = ?1 1540251881Speter AND o.local_relpath = ?2) 1541251881Speter 1542251881Speter-- STMT_UPDATE_MOVED_TO_DESCENDANTS 1543251881SpeterUPDATE nodes SET moved_to = RELPATH_SKIP_JOIN(?2, ?3, moved_to) 1544251881Speter WHERE wc_id = ?1 1545251881Speter AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1546251881Speter 1547251881Speter-- STMT_CLEAR_MOVED_TO_DESCENDANTS 1548251881SpeterUPDATE nodes SET moved_to = NULL 1549251881Speter WHERE wc_id = ?1 1550251881Speter AND IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1551251881Speter 1552251881Speter 1553251881Speter/* This statement returns pairs of move-roots below the path ?2 in WC_ID ?1, 1554251881Speter * where the source of the move is within the subtree rooted at path ?2, and 1555251881Speter * the destination of the move is outside the subtree rooted at path ?2. */ 1556251881Speter-- STMT_SELECT_MOVED_PAIR2 1557251881SpeterSELECT local_relpath, moved_to, op_depth FROM nodes 1558251881SpeterWHERE wc_id = ?1 1559251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1560251881Speter AND moved_to IS NOT NULL 1561251881Speter AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1562251881Speter AND op_depth >= (SELECT MAX(op_depth) FROM nodes o 1563251881Speter WHERE o.wc_id = ?1 1564251881Speter AND o.local_relpath = ?2) 1565251881Speter 1566251881Speter-- STMT_SELECT_MOVED_PAIR3 1567251881SpeterSELECT local_relpath, moved_to, op_depth, kind FROM nodes 1568251881SpeterWHERE wc_id = ?1 1569251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1570251881Speter AND op_depth > ?3 1571251881Speter AND moved_to IS NOT NULL 1572251881Speter 1573251881Speter-- STMT_SELECT_MOVED_OUTSIDE 1574251881SpeterSELECT local_relpath, moved_to FROM nodes 1575251881SpeterWHERE wc_id = ?1 1576251881Speter AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1577251881Speter AND op_depth >= ?3 1578251881Speter AND moved_to IS NOT NULL 1579251881Speter AND NOT IS_STRICT_DESCENDANT_OF(moved_to, ?2) 1580251881Speter 1581251881Speter-- STMT_SELECT_OP_DEPTH_MOVED_PAIR 1582251881SpeterSELECT n.local_relpath, n.moved_to, 1583251881Speter (SELECT o.repos_path FROM nodes AS o 1584251881Speter WHERE o.wc_id = n.wc_id 1585251881Speter AND o.local_relpath = n.local_relpath 1586251881Speter AND o.op_depth < ?3 ORDER BY o.op_depth DESC LIMIT 1) 1587251881SpeterFROM nodes AS n 1588251881SpeterWHERE n.wc_id = ?1 1589251881Speter AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 1590251881Speter AND n.op_depth = ?3 1591251881Speter AND n.moved_to IS NOT NULL 1592251881Speter 1593251881Speter-- STMT_SELECT_MOVED_DESCENDANTS 1594251881SpeterSELECT n.local_relpath, h.moved_to 1595251881SpeterFROM nodes n, nodes h 1596251881SpeterWHERE n.wc_id = ?1 1597251881Speter AND h.wc_id = ?1 1598251881Speter AND IS_STRICT_DESCENDANT_OF(n.local_relpath, ?2) 1599251881Speter AND h.local_relpath = n.local_relpath 1600251881Speter AND n.op_depth = ?3 1601251881Speter AND h.op_depth = (SELECT MIN(o.op_depth) 1602251881Speter FROM nodes o 1603251881Speter WHERE o.wc_id = ?1 1604251881Speter AND o.local_relpath = n.local_relpath 1605251881Speter AND o.op_depth > ?3) 1606251881Speter AND h.moved_to IS NOT NULL 1607251881Speter 1608251881Speter-- STMT_COMMIT_UPDATE_ORIGIN 1609251881Speter/* Note that the only reason this SUBSTR() trick is valid is that you 1610251881Speter can move neither the working copy nor the repository root. 1611251881Speter 1612251881Speter SUBSTR(local_relpath, LENGTH(?2)+1) includes the '/' of the path */ 1613251881SpeterUPDATE nodes SET repos_id = ?4, 1614251881Speter repos_path = ?5 || SUBSTR(local_relpath, LENGTH(?2)+1), 1615251881Speter revision = ?6 1616251881SpeterWHERE wc_id = ?1 1617251881Speter AND (local_relpath = ?2 1618251881Speter OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2)) 1619251881Speter AND op_depth = ?3 1620251881Speter 1621251881Speter-- STMT_HAS_LAYER_BETWEEN 1622251881SpeterSELECT 1 FROM NODES 1623251881SpeterWHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth > ?3 AND op_depth < ?4 1624251881Speter 1625251881Speter-- STMT_SELECT_REPOS_PATH_REVISION 1626251881SpeterSELECT local_relpath, repos_path, revision FROM nodes 1627251881SpeterWHERE wc_id = ?1 1628251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1629251881Speter AND op_depth = 0 1630251881SpeterORDER BY local_relpath 1631251881Speter 1632251881Speter-- STMT_SELECT_HAS_NON_FILE_CHILDREN 1633251881SpeterSELECT 1 FROM nodes 1634251881SpeterWHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = 0 AND kind != MAP_FILE 1635251881Speter 1636251881Speter-- STMT_SELECT_HAS_GRANDCHILDREN 1637251881SpeterSELECT 1 FROM nodes 1638251881SpeterWHERE wc_id = ?1 1639251881Speter AND IS_STRICT_DESCENDANT_OF(parent_relpath, ?2) 1640251881Speter AND op_depth = 0 1641251881Speter AND file_external IS NULL 1642251881Speter 1643251881Speter/* ------------------------------------------------------------------------- */ 1644251881Speter 1645251881Speter/* Queries for verification. */ 1646251881Speter 1647251881Speter-- STMT_SELECT_ALL_NODES 1648251881SpeterSELECT op_depth, local_relpath, parent_relpath, file_external FROM nodes 1649251881SpeterWHERE wc_id = ?1 1650251881Speter 1651251881Speter/* ------------------------------------------------------------------------- */ 1652251881Speter 1653251881Speter/* Queries for cached inherited properties. */ 1654251881Speter 1655251881Speter/* Select the inherited properties of a single base node. */ 1656251881Speter-- STMT_SELECT_IPROPS 1657251881SpeterSELECT inherited_props FROM nodes 1658251881SpeterWHERE wc_id = ?1 1659251881Speter AND local_relpath = ?2 1660251881Speter AND op_depth = 0 1661251881Speter 1662251881Speter/* Update the inherited properties of a single base node. */ 1663251881Speter-- STMT_UPDATE_IPROP 1664251881SpeterUPDATE nodes 1665251881SpeterSET inherited_props = ?3 1666251881SpeterWHERE (wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0) 1667251881Speter 1668251881Speter/* Select a single path if its base node has cached inherited properties. */ 1669251881Speter-- STMT_SELECT_IPROPS_NODE 1670251881SpeterSELECT local_relpath, repos_path FROM nodes 1671251881SpeterWHERE wc_id = ?1 1672251881Speter AND local_relpath = ?2 1673251881Speter AND op_depth = 0 1674251881Speter AND (inherited_props not null) 1675251881Speter 1676251881Speter/* Select all paths whose base nodes are below a given path, which 1677251881Speter have cached inherited properties. */ 1678251881Speter-- STMT_SELECT_IPROPS_RECURSIVE 1679251881SpeterSELECT local_relpath, repos_path FROM nodes 1680251881SpeterWHERE wc_id = ?1 1681251881Speter AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2) 1682251881Speter AND op_depth = 0 1683251881Speter AND (inherited_props not null) 1684251881Speter 1685251881Speter-- STMT_SELECT_IPROPS_CHILDREN 1686251881SpeterSELECT local_relpath, repos_path FROM nodes 1687251881SpeterWHERE wc_id = ?1 1688251881Speter AND parent_relpath = ?2 1689251881Speter AND op_depth = 0 1690251881Speter AND (inherited_props not null) 1691251881Speter 1692251881Speter/* ------------------------------------------------------------------------- */ 1693251881Speter 1694251881Speter/* Grab all the statements related to the schema. */ 1695251881Speter 1696251881Speter-- include: wc-metadata 1697251881Speter-- include: wc-checks 1698