wc-checks.h revision 299742
1/* This file is automatically generated from wc-checks.sql and .dist_sandbox/subversion-1.9.4/subversion/libsvn_wc/token-map.h. 2 * Do not edit this file -- edit the source and rerun gen-make.py */ 3 4#define STMT_VERIFICATION_TRIGGERS 0 5#define STMT_0_INFO {"STMT_VERIFICATION_TRIGGERS", NULL} 6#define STMT_0 \ 7 "CREATE TEMPORARY TRIGGER no_repository_updates BEFORE UPDATE ON repository " \ 8 "BEGIN " \ 9 " SELECT RAISE(FAIL, 'Updates to REPOSITORY are not allowed.'); " \ 10 "END; " \ 11 "CREATE TEMPORARY TRIGGER validation_01 BEFORE INSERT ON nodes " \ 12 "WHEN NOT ((new.local_relpath = '' AND new.parent_relpath IS NULL) " \ 13 " OR (relpath_depth(new.local_relpath) " \ 14 " = relpath_depth(new.parent_relpath) + 1)) " \ 15 "BEGIN " \ 16 " SELECT RAISE(FAIL, 'WC DB validity check 01 failed'); " \ 17 "END; " \ 18 "CREATE TEMPORARY TRIGGER validation_02 BEFORE INSERT ON nodes " \ 19 "WHEN NOT new.op_depth <= relpath_depth(new.local_relpath) " \ 20 "BEGIN " \ 21 " SELECT RAISE(FAIL, 'WC DB validity check 02 failed'); " \ 22 "END; " \ 23 "CREATE TEMPORARY TRIGGER validation_03 BEFORE INSERT ON nodes " \ 24 "WHEN NOT ( " \ 25 " (new.op_depth = relpath_depth(new.local_relpath)) " \ 26 " OR " \ 27 " (EXISTS (SELECT 1 FROM nodes " \ 28 " WHERE wc_id = new.wc_id AND op_depth = new.op_depth " \ 29 " AND local_relpath = new.parent_relpath)) " \ 30 " ) " \ 31 " AND NOT (new.file_external IS NOT NULL AND new.op_depth = 0) " \ 32 "BEGIN " \ 33 " SELECT RAISE(FAIL, 'WC DB validity check 03 failed'); " \ 34 "END; " \ 35 "CREATE TEMPORARY TRIGGER validation_04 BEFORE INSERT ON actual_node " \ 36 "WHEN NOT (new.local_relpath = '' " \ 37 " OR EXISTS (SELECT 1 FROM nodes " \ 38 " WHERE wc_id = new.wc_id " \ 39 " AND local_relpath = new.parent_relpath)) " \ 40 "BEGIN " \ 41 " SELECT RAISE(FAIL, 'WC DB validity check 04 failed'); " \ 42 "END; " \ 43 "" 44 45#define STMT_STATIC_VERIFY 1 46#define STMT_1_INFO {"STMT_STATIC_VERIFY", NULL} 47#define STMT_1 \ 48 "SELECT local_relpath, op_depth, 1, 'Invalid parent relpath set in NODES' " \ 49 "FROM nodes n WHERE local_relpath != '' " \ 50 " AND (parent_relpath IS NULL " \ 51 " OR NOT (((local_relpath) > (CASE (parent_relpath) WHEN '' THEN '' ELSE (parent_relpath) || '/' END)) AND ((local_relpath) < CASE (parent_relpath) WHEN '' THEN X'FFFF' ELSE (parent_relpath) || '0' END)) " \ 52 " OR relpath_depth(local_relpath) != relpath_depth(parent_relpath)+1) " \ 53 "UNION ALL " \ 54 "SELECT local_relpath, -1, 2, 'Invalid parent relpath set in ACTUAL' " \ 55 "FROM actual_node a WHERE local_relpath != '' " \ 56 " AND (parent_relpath IS NULL " \ 57 " OR NOT (((local_relpath) > (CASE (parent_relpath) WHEN '' THEN '' ELSE (parent_relpath) || '/' END)) AND ((local_relpath) < CASE (parent_relpath) WHEN '' THEN X'FFFF' ELSE (parent_relpath) || '0' END)) " \ 58 " OR relpath_depth(local_relpath) != relpath_depth(parent_relpath)+1) " \ 59 "UNION ALL " \ 60 "SELECT local_relpath, -1, 10, 'No ancestor in ACTUAL' " \ 61 "FROM actual_node a WHERE local_relpath != '' " \ 62 " AND NOT EXISTS(SELECT 1 from nodes i " \ 63 " WHERE i.wc_id=a.wc_id " \ 64 " AND i.local_relpath=a.parent_relpath) " \ 65 " AND NOT EXISTS(SELECT 1 from nodes i " \ 66 " WHERE i.wc_id=a.wc_id " \ 67 " AND i.local_relpath=a.local_relpath) " \ 68 "UNION ALL " \ 69 "SELECT a.local_relpath, -1, 11, 'Bad or Unneeded actual data' " \ 70 "FROM actual_node a " \ 71 "LEFT JOIN nodes n on n.wc_id = a.wc_id AND n.local_relpath = a.local_relpath " \ 72 " AND n.op_depth = (SELECT MAX(op_depth) from nodes i " \ 73 " WHERE i.wc_id=a.wc_id AND i.local_relpath=a.local_relpath) " \ 74 "WHERE (a.properties IS NOT NULL " \ 75 " AND (n.presence IS NULL " \ 76 " OR n.presence NOT IN ('normal', 'incomplete'))) " \ 77 " OR (a.changelist IS NOT NULL AND (n.kind IS NOT NULL AND n.kind != 'file')) " \ 78 " OR (a.conflict_data IS NULL AND a.properties IS NULL AND a.changelist IS NULL) " \ 79 " AND NOT EXISTS(SELECT 1 from nodes i " \ 80 " WHERE i.wc_id=a.wc_id " \ 81 " AND i.local_relpath=a.parent_relpath) " \ 82 "UNION ALL " \ 83 "SELECT local_relpath, op_depth, 20, 'No ancestor in NODES' " \ 84 "FROM nodes n WHERE local_relpath != '' " \ 85 " AND file_external IS NULL " \ 86 " AND NOT EXISTS(SELECT 1 from nodes i " \ 87 " WHERE i.wc_id=n.wc_id " \ 88 " AND i.local_relpath=n.parent_relpath " \ 89 " AND i.op_depth <= n.op_depth) " \ 90 "UNION ALL " \ 91 "SELECT local_relpath, op_depth, 21, 'Unneeded node data' " \ 92 "FROM nodes " \ 93 "WHERE presence NOT IN ('normal', 'incomplete') " \ 94 "AND (properties IS NOT NULL " \ 95 " OR checksum IS NOT NULL " \ 96 " OR depth IS NOT NULL " \ 97 " OR symlink_target IS NOT NULL " \ 98 " OR changed_revision IS NOT NULL " \ 99 " OR (changed_date IS NOT NULL AND changed_date != 0) " \ 100 " OR changed_author IS NOT NULL " \ 101 " OR translated_size IS NOT NULL " \ 102 " OR last_mod_time IS NOT NULL " \ 103 " OR dav_cache IS NOT NULL " \ 104 " OR file_external IS NOT NULL " \ 105 " OR inherited_props IS NOT NULL) " \ 106 "UNION ALL " \ 107 "SELECT local_relpath, op_depth, 22, 'Unneeded base-deleted node data' " \ 108 "FROM nodes " \ 109 "WHERE presence IN ('base-deleted') " \ 110 "AND (repos_id IS NOT NULL " \ 111 " OR repos_path IS NOT NULL " \ 112 " OR revision IS NOT NULL) " \ 113 "UNION ALL " \ 114 "SELECT local_relpath, op_depth, 23, 'Kind specific data invalid on normal' " \ 115 "FROM nodes " \ 116 "WHERE presence IN ('normal', 'incomplete') " \ 117 "AND (kind IS NULL " \ 118 " OR (repos_path IS NULL " \ 119 " AND (properties IS NOT NULL " \ 120 " OR changed_revision IS NOT NULL " \ 121 " OR changed_author IS NOT NULL " \ 122 " OR (changed_date IS NOT NULL AND changed_date != 0))) " \ 123 " OR (CASE WHEN kind = 'file' AND repos_path IS NOT NULL " \ 124 " THEN checksum IS NULL " \ 125 " ELSE checksum IS NOT NULL END) " \ 126 " OR (CASE WHEN kind = 'dir' THEN depth IS NULL " \ 127 " ELSE depth IS NOT NULL END) " \ 128 " OR (CASE WHEN kind = 'symlink' THEN symlink_target IS NULL " \ 129 " ELSE symlink_target IS NOT NULL END)) " \ 130 "UNION ALL " \ 131 "SELECT local_relpath, op_depth, 24, 'Invalid op-depth for local add' " \ 132 "FROM nodes " \ 133 "WHERE presence IN ('normal', 'incomplete') " \ 134 " AND repos_path IS NULL " \ 135 " AND op_depth != relpath_depth(local_relpath) " \ 136 "UNION ALL " \ 137 "SELECT local_relpath, op_depth, 25, 'Node missing op-depth ancestor' " \ 138 "FROM nodes n " \ 139 "WHERE op_depth < relpath_depth(local_relpath) " \ 140 " AND file_external IS NULL " \ 141 " AND NOT EXISTS(SELECT 1 FROM nodes p " \ 142 " WHERE p.wc_id=n.wc_id AND p.local_relpath=n.parent_relpath " \ 143 " AND p.op_depth=n.op_depth " \ 144 " AND (p.presence IN ('normal', 'incomplete') " \ 145 " OR (p.presence IN ('base-deleted', 'not-present') " \ 146 " AND n.presence = 'base-deleted'))) " \ 147 "UNION ALL " \ 148 "SELECT n.local_relpath, n.op_depth, 26, 'Copied descendant mismatch' " \ 149 "FROM nodes n " \ 150 "JOIN nodes p " \ 151 " ON p.wc_id=n.wc_id AND p.local_relpath=n.parent_relpath " \ 152 " AND n.op_depth=p.op_depth " \ 153 "WHERE n.op_depth > 0 AND n.presence IN ('normal', 'incomplete') " \ 154 " AND (n.repos_id != p.repos_id " \ 155 " OR n.repos_path != " \ 156 " (CASE WHEN (n.parent_relpath) = '' THEN (CASE WHEN (p.repos_path) = '' THEN (n.local_relpath) WHEN (n.local_relpath) = '' THEN (p.repos_path) ELSE (p.repos_path) || '/' || (n.local_relpath) END) WHEN (p.repos_path) = '' THEN (CASE WHEN (n.parent_relpath) = '' THEN (n.local_relpath) WHEN SUBSTR((n.local_relpath), 1, LENGTH(n.parent_relpath)) = (n.parent_relpath) THEN CASE WHEN LENGTH(n.parent_relpath) = LENGTH(n.local_relpath) THEN '' WHEN SUBSTR((n.local_relpath), LENGTH(n.parent_relpath)+1, 1) = '/' THEN SUBSTR((n.local_relpath), LENGTH(n.parent_relpath)+2) END END) WHEN SUBSTR((n.local_relpath), 1, LENGTH(n.parent_relpath)) = (n.parent_relpath) THEN CASE WHEN LENGTH(n.parent_relpath) = LENGTH(n.local_relpath) THEN (p.repos_path) WHEN SUBSTR((n.local_relpath), LENGTH(n.parent_relpath)+1, 1) = '/' THEN (p.repos_path) || SUBSTR((n.local_relpath), LENGTH(n.parent_relpath)+1) END END) " \ 157 " OR n.revision != p.revision " \ 158 " OR p.kind != 'dir' " \ 159 " OR n.moved_here IS NOT p.moved_here) " \ 160 "UNION ALL " \ 161 "SELECT n.local_relpath, n.op_depth, 27, 'Invalid op-root presence' " \ 162 "FROM nodes n " \ 163 "WHERE n.op_depth = relpath_depth(local_relpath) " \ 164 " AND presence NOT IN ('normal', 'incomplete', 'base-deleted') " \ 165 "UNION ALL " \ 166 "SELECT n.local_relpath, s.op_depth, 28, 'Incomplete shadowing' " \ 167 "FROM nodes n " \ 168 "JOIN nodes s ON s.wc_id=n.wc_id AND s.local_relpath=n.local_relpath " \ 169 " AND s.op_depth = relpath_depth(s.local_relpath) " \ 170 " AND s.op_depth = (SELECT MIN(op_depth) FROM nodes d " \ 171 " WHERE d.wc_id=s.wc_id AND d.local_relpath=s.local_relpath " \ 172 " AND d.op_depth > n.op_depth) " \ 173 "WHERE n.presence IN ('normal', 'incomplete') " \ 174 " AND EXISTS(SELECT 1 " \ 175 " FROM nodes dn " \ 176 " WHERE dn.wc_id=n.wc_id AND dn.op_depth=n.op_depth " \ 177 " AND dn.presence IN ('normal', 'incomplete') " \ 178 " AND (((dn.local_relpath) > (CASE (n.local_relpath) WHEN '' THEN '' ELSE (n.local_relpath) || '/' END)) AND ((dn.local_relpath) < CASE (n.local_relpath) WHEN '' THEN X'FFFF' ELSE (n.local_relpath) || '0' END)) " \ 179 " AND dn.file_external IS NULL " \ 180 " AND NOT EXISTS(SELECT 1 " \ 181 " FROM nodes ds " \ 182 " WHERE ds.wc_id=n.wc_id AND ds.op_depth=s.op_depth " \ 183 " AND ds.local_relpath=dn.local_relpath)) " \ 184 "UNION ALL " \ 185 "SELECT s.local_relpath, s.op_depth, 29, 'Invalid base-delete' " \ 186 "FROM nodes s " \ 187 "LEFT JOIN nodes n ON n.wc_id=s.wc_id AND n.local_relpath=s.local_relpath " \ 188 " AND n.op_depth = (SELECT MAX(op_depth) FROM nodes d " \ 189 " WHERE d.wc_id=s.wc_id AND d.local_relpath=s.local_relpath " \ 190 " AND d.op_depth < s.op_depth) " \ 191 "WHERE s.presence = 'base-deleted' " \ 192 " AND (n.presence IS NULL " \ 193 " OR n.presence NOT IN ('normal', 'incomplete') " \ 194 " ) " \ 195 "UNION ALL " \ 196 "SELECT n.local_relpath, n.op_depth, 30, 'Invalid data for BASE' " \ 197 "FROM nodes n " \ 198 "WHERE n.op_depth = 0 " \ 199 " AND (n.moved_to IS NOT NULL " \ 200 " OR n.moved_here IS NOT NULL) " \ 201 "UNION ALL " \ 202 "SELECT d.local_relpath, d.op_depth, 60, 'Moved here without origin' " \ 203 "FROM nodes d " \ 204 "WHERE d.op_depth = relpath_depth(d.local_relpath) " \ 205 " AND d.moved_here IS NOT NULL " \ 206 " AND NOT EXISTS(SELECT 1 FROM nodes s " \ 207 " WHERE s.wc_id = d.wc_id AND s.moved_to = d.local_relpath) " \ 208 "UNION ALL " \ 209 "SELECT s.local_relpath, s.op_depth, 61, 'Moved to without target' " \ 210 "FROM nodes s " \ 211 "WHERE s.moved_to IS NOT NULL " \ 212 " AND NOT EXISTS(SELECT 1 FROM nodes d " \ 213 " WHERE d.wc_id = s.wc_id AND d.local_relpath = s.moved_to " \ 214 " AND d.op_depth = relpath_depth(d.local_relpath) " \ 215 " AND d.moved_here =1 AND d.repos_path IS NOT NULL) " \ 216 "" 217 218#define WC_CHECKS_SQL_DECLARE_STATEMENTS(varname) \ 219 static const char * const varname[] = { \ 220 STMT_0, \ 221 STMT_1, \ 222 NULL \ 223 } 224 225#define WC_CHECKS_SQL_DECLARE_STATEMENT_INFO(varname) \ 226 static const char * const varname[][2] = { \ 227 STMT_0_INFO, \ 228 STMT_1_INFO, \ 229 {NULL, NULL} \ 230 } 231