| Directory: | cvmfs/ |
|---|---|
| File: | cvmfs/history_sql.cc |
| Date: | 2025-11-02 02:35:35 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 163 | 179 | 91.1% |
| Branches: | 489 | 1012 | 48.3% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /** | ||
| 2 | * This file is part of the CernVM File System. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #include "history_sql.h" | ||
| 6 | |||
| 7 | #include <cassert> | ||
| 8 | |||
| 9 | #include "util/string.h" | ||
| 10 | |||
| 11 | namespace history { | ||
| 12 | |||
| 13 | const float HistoryDatabase::kLatestSchema = 1.0; | ||
| 14 | const float HistoryDatabase::kLatestSupportedSchema = 1.0; | ||
| 15 | const unsigned HistoryDatabase::kLatestSchemaRevision = 3; | ||
| 16 | |||
| 17 | /** | ||
| 18 | * Database Schema ChangeLog: | ||
| 19 | * | ||
| 20 | * Schema Version 1.0 | ||
| 21 | * -> Revision 3: deprecate (flush) table 'recycle_bin' | ||
| 22 | * add table 'branches' | ||
| 23 | * add column 'branch' to table tags | ||
| 24 | * -> Revision 2: add table 'recycle_bin' | ||
| 25 | * -> Revision 1: add field 'size' | ||
| 26 | * | ||
| 27 | */ | ||
| 28 | |||
| 29 | const std::string HistoryDatabase::kFqrnKey = "fqrn"; | ||
| 30 | |||
| 31 | |||
| 32 | /** | ||
| 33 | * This method creates a new database file and initializes the database schema. | ||
| 34 | */ | ||
| 35 | 2902 | bool HistoryDatabase::CreateEmptyDatabase() { | |
| 36 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2902 times.
|
2902 | assert(read_write()); |
| 37 | |||
| 38 |
3/6✓ Branch 2 taken 2902 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2902 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2902 times.
✗ Branch 9 not taken.
|
5804 | sqlite::Sql sql_foreign_keys(sqlite_db(), "PRAGMA foreign_keys = ON;"); |
| 39 |
2/4✓ Branch 1 taken 2902 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2902 times.
|
2902 | if (!sql_foreign_keys.Execute()) |
| 40 | ✗ | return false; | |
| 41 | |||
| 42 |
6/13✓ Branch 1 taken 2902 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2902 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2902 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2902 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2902 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2902 times.
✗ Branch 14 not taken.
|
2902 | return CreateBranchesTable() && CreateTagsTable() && CreateRecycleBinTable(); |
| 43 | 2902 | } | |
| 44 | |||
| 45 | |||
| 46 | 2902 | bool HistoryDatabase::CreateTagsTable() { | |
| 47 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2902 times.
|
2902 | assert(read_write()); |
| 48 |
3/6✓ Branch 2 taken 2902 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2902 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2902 times.
✗ Branch 9 not taken.
|
5804 | return sqlite::Sql( |
| 49 | sqlite_db(), | ||
| 50 | "CREATE TABLE tags (name TEXT, hash TEXT, revision INTEGER, " | ||
| 51 | " timestamp INTEGER, channel INTEGER, description TEXT, size " | ||
| 52 | "INTEGER, " | ||
| 53 | " branch TEXT, CONSTRAINT pk_tags PRIMARY KEY (name), " | ||
| 54 | " FOREIGN KEY (branch) REFERENCES branches (branch));") | ||
| 55 |
1/2✓ Branch 1 taken 2902 times.
✗ Branch 2 not taken.
|
5804 | .Execute(); |
| 56 | } | ||
| 57 | |||
| 58 | |||
| 59 | 2990 | bool HistoryDatabase::CreateRecycleBinTable() { | |
| 60 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2990 times.
|
2990 | assert(read_write()); |
| 61 |
3/6✓ Branch 2 taken 2990 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2990 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2990 times.
✗ Branch 9 not taken.
|
5980 | return sqlite::Sql(sqlite_db(), |
| 62 | "CREATE TABLE recycle_bin (hash TEXT, flags INTEGER, " | ||
| 63 | " CONSTRAINT pk_hash PRIMARY KEY (hash))") | ||
| 64 |
1/2✓ Branch 1 taken 2990 times.
✗ Branch 2 not taken.
|
5980 | .Execute(); |
| 65 | } | ||
| 66 | |||
| 67 | |||
| 68 | 3034 | bool HistoryDatabase::CreateBranchesTable() { | |
| 69 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3034 times.
|
3034 | assert(read_write()); |
| 70 | |||
| 71 | sqlite::Sql sql_create(sqlite_db(), | ||
| 72 | "CREATE TABLE branches (branch TEXT, parent TEXT, " | ||
| 73 | "initial_revision INTEGER," | ||
| 74 | " CONSTRAINT pk_branch PRIMARY KEY (branch), " | ||
| 75 | " FOREIGN KEY (parent) REFERENCES branches (branch), " | ||
| 76 | " CHECK ((branch <> '') OR (parent IS NULL)), " | ||
| 77 |
3/6✓ Branch 2 taken 3034 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3034 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3034 times.
✗ Branch 9 not taken.
|
6068 | " CHECK ((branch = '') OR (parent IS NOT NULL)));"); |
| 78 |
1/2✓ Branch 1 taken 3034 times.
✗ Branch 2 not taken.
|
3034 | bool retval = sql_create.Execute(); |
| 79 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 3034 times.
|
3034 | if (!retval) |
| 80 | ✗ | return false; | |
| 81 | |||
| 82 | sqlite::Sql sql_init( | ||
| 83 | sqlite_db(), | ||
| 84 | "INSERT INTO branches (branch, parent, initial_revision) " | ||
| 85 |
3/6✓ Branch 2 taken 3034 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3034 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 3034 times.
✗ Branch 9 not taken.
|
6068 | "VALUES ('', NULL, 0);"); |
| 86 |
1/2✓ Branch 1 taken 3034 times.
✗ Branch 2 not taken.
|
3034 | retval = sql_init.Execute(); |
| 87 | 3034 | return retval; | |
| 88 | 3034 | } | |
| 89 | |||
| 90 | |||
| 91 | 2902 | bool HistoryDatabase::InsertInitialValues(const std::string &repository_name) { | |
| 92 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2902 times.
|
2902 | assert(read_write()); |
| 93 |
1/2✓ Branch 2 taken 2902 times.
✗ Branch 3 not taken.
|
2902 | return this->SetProperty(kFqrnKey, repository_name); |
| 94 | } | ||
| 95 | |||
| 96 | |||
| 97 | 4552 | bool HistoryDatabase::ContainsRecycleBin() const { | |
| 98 |
3/4✓ Branch 1 taken 4552 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4376 times.
✓ Branch 5 taken 176 times.
|
4552 | return schema_version() >= 1.0 - kSchemaEpsilon && schema_revision() >= 2; |
| 99 | } | ||
| 100 | |||
| 101 | |||
| 102 | 1078 | bool HistoryDatabase::CheckSchemaCompatibility() { | |
| 103 |
1/2✓ Branch 1 taken 1078 times.
✗ Branch 2 not taken.
|
2156 | return !((schema_version() < kLatestSupportedSchema - kSchemaEpsilon) |
| 104 |
1/2✓ Branch 1 taken 1078 times.
✗ Branch 2 not taken.
|
2156 | || (schema_version() > kLatestSchema + kSchemaEpsilon)); |
| 105 | } | ||
| 106 | |||
| 107 | |||
| 108 | 352 | bool HistoryDatabase::LiveSchemaUpgradeIfNecessary() { | |
| 109 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 352 times.
|
352 | assert(read_write()); |
| 110 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 352 times.
|
352 | assert(IsEqualSchema(schema_version(), 1.0)); |
| 111 | |||
| 112 |
3/6✓ Branch 2 taken 352 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 352 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 352 times.
✗ Branch 9 not taken.
|
704 | sqlite::Sql sql_foreign_keys(sqlite_db(), "PRAGMA foreign_keys = ON;"); |
| 113 |
2/4✓ Branch 1 taken 352 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 352 times.
|
352 | if (!sql_foreign_keys.Execute()) |
| 114 | ✗ | return false; | |
| 115 |
2/2✓ Branch 1 taken 220 times.
✓ Branch 2 taken 132 times.
|
352 | if (schema_revision() == kLatestSchemaRevision) { |
| 116 | 220 | return true; | |
| 117 | } | ||
| 118 | |||
| 119 |
1/2✓ Branch 2 taken 132 times.
✗ Branch 3 not taken.
|
264 | LogCvmfs(kLogHistory, kLogDebug, |
| 120 | "upgrading history schema revision " | ||
| 121 | "%.2f (Rev: %d) to %.2f (Rev: %d)", | ||
| 122 | 132 | schema_version(), schema_revision(), kLatestSchema, | |
| 123 | kLatestSchemaRevision); | ||
| 124 | |||
| 125 |
1/2✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
|
132 | const bool success = UpgradeSchemaRevision_10_1() |
| 126 |
2/4✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 132 times.
✗ Branch 4 not taken.
|
132 | && UpgradeSchemaRevision_10_2() |
| 127 |
3/6✓ Branch 0 taken 132 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 132 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 132 times.
✗ Branch 6 not taken.
|
264 | && UpgradeSchemaRevision_10_3(); |
| 128 | |||
| 129 |
3/6✓ Branch 0 taken 132 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 132 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 132 times.
✗ Branch 6 not taken.
|
132 | return success && StoreSchemaRevision(); |
| 130 | 352 | } | |
| 131 | |||
| 132 | |||
| 133 | 132 | bool HistoryDatabase::UpgradeSchemaRevision_10_1() { | |
| 134 |
2/2✓ Branch 1 taken 88 times.
✓ Branch 2 taken 44 times.
|
132 | if (schema_revision() > 0) { |
| 135 | 88 | return true; | |
| 136 | } | ||
| 137 | |||
| 138 |
3/6✓ Branch 2 taken 44 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 44 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 44 times.
✗ Branch 9 not taken.
|
88 | sqlite::Sql sql_upgrade(sqlite_db(), "ALTER TABLE tags ADD size INTEGER;"); |
| 139 |
2/4✓ Branch 1 taken 44 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 44 times.
|
44 | if (!sql_upgrade.Execute()) { |
| 140 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to upgrade tags table"); | |
| 141 | ✗ | return false; | |
| 142 | } | ||
| 143 | |||
| 144 | 44 | set_schema_revision(1); | |
| 145 | 44 | return true; | |
| 146 | 44 | } | |
| 147 | |||
| 148 | |||
| 149 | 132 | bool HistoryDatabase::UpgradeSchemaRevision_10_2() { | |
| 150 |
2/2✓ Branch 1 taken 44 times.
✓ Branch 2 taken 88 times.
|
132 | if (schema_revision() > 1) { |
| 151 | 44 | return true; | |
| 152 | } | ||
| 153 | |||
| 154 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 88 times.
|
88 | if (!CreateRecycleBinTable()) { |
| 155 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to upgrade history database"); | |
| 156 | ✗ | return false; | |
| 157 | } | ||
| 158 | |||
| 159 | 88 | set_schema_revision(2); | |
| 160 | 88 | return true; | |
| 161 | } | ||
| 162 | |||
| 163 | |||
| 164 | 132 | bool HistoryDatabase::UpgradeSchemaRevision_10_3() { | |
| 165 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 132 times.
|
132 | if (schema_revision() > 2) { |
| 166 | ✗ | return true; | |
| 167 | } | ||
| 168 | |||
| 169 |
2/4✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 132 times.
|
132 | if (!CreateBranchesTable()) { |
| 170 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to create branches table"); | |
| 171 | ✗ | return false; | |
| 172 | } | ||
| 173 | |||
| 174 | sqlite::Sql sql_upgrade( | ||
| 175 | sqlite_db(), | ||
| 176 |
3/6✓ Branch 2 taken 132 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 132 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 132 times.
✗ Branch 9 not taken.
|
264 | "ALTER TABLE tags ADD branch TEXT REFERENCES branches (branch);"); |
| 177 |
2/4✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 132 times.
|
132 | if (!sql_upgrade.Execute()) { |
| 178 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to upgrade tags table"); | |
| 179 | ✗ | return false; | |
| 180 | } | ||
| 181 | |||
| 182 |
3/6✓ Branch 2 taken 132 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 132 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 132 times.
✗ Branch 9 not taken.
|
264 | sqlite::Sql sql_fill(sqlite_db(), "UPDATE tags SET branch = '';"); |
| 183 |
2/4✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 132 times.
|
132 | if (!sql_fill.Execute()) { |
| 184 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to set branch default value"); | |
| 185 | ✗ | return false; | |
| 186 | } | ||
| 187 | |||
| 188 | // We keep the table in the schema for backwards compatibility | ||
| 189 |
3/6✓ Branch 2 taken 132 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 132 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 132 times.
✗ Branch 9 not taken.
|
264 | sqlite::Sql sql_flush(sqlite_db(), "DELETE FROM recycle_bin; VACUUM;"); |
| 190 |
2/4✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 132 times.
|
132 | if (!sql_flush.Execute()) { |
| 191 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to flush recycle bin table"); | |
| 192 | ✗ | return false; | |
| 193 | } | ||
| 194 | |||
| 195 | 132 | set_schema_revision(3); | |
| 196 | 132 | return true; | |
| 197 | 132 | } | |
| 198 | |||
| 199 | |||
| 200 | //------------------------------------------------------------------------------ | ||
| 201 | |||
| 202 | #define DB_FIELDS_V1R0 \ | ||
| 203 | "name, hash, revision, timestamp, channel, " \ | ||
| 204 | "description, 0, ''" | ||
| 205 | #define DB_FIELDS_V1R1 \ | ||
| 206 | "name, hash, revision, timestamp, channel, " \ | ||
| 207 | "description, size, ''" | ||
| 208 | #define DB_FIELDS_V1R3 \ | ||
| 209 | "name, hash, revision, timestamp, channel, " \ | ||
| 210 | "description, size, branch" | ||
| 211 | #define DB_PLACEHOLDERS \ | ||
| 212 | ":name, :hash, :revision, :timestamp, :channel, " \ | ||
| 213 | ":description, :size, :branch" | ||
| 214 | #define ROLLBACK_COND \ | ||
| 215 | "(revision > :target_rev OR " \ | ||
| 216 | " name = :target_name) " \ | ||
| 217 | "AND branch = ''" | ||
| 218 | |||
| 219 | #define MAKE_STATEMENT(STMT_TMPL, REV) \ | ||
| 220 | static const std::string REV = ReplaceAll( \ | ||
| 221 | ReplaceAll(ReplaceAll(STMT_TMPL, "@DB_FIELDS@", DB_FIELDS_##REV), \ | ||
| 222 | "@DB_PLACEHOLDERS@", DB_PLACEHOLDERS), \ | ||
| 223 | "@ROLLBACK_COND@", ROLLBACK_COND) | ||
| 224 | |||
| 225 | #define MAKE_STATEMENTS(STMT_TMPL) \ | ||
| 226 | MAKE_STATEMENT(STMT_TMPL, V1R0); \ | ||
| 227 | MAKE_STATEMENT(STMT_TMPL, V1R1); \ | ||
| 228 | MAKE_STATEMENT(STMT_TMPL, V1R3) | ||
| 229 | |||
| 230 | #define DEFERRED_INIT(DB, REV) DeferredInit((DB)->sqlite_db(), (REV).c_str()) | ||
| 231 | |||
| 232 | #define DEFERRED_INITS(DB) \ | ||
| 233 | if ((DB)->IsEqualSchema((DB)->schema_version(), 1.0f) \ | ||
| 234 | && (DB)->schema_revision() == 0) { \ | ||
| 235 | DEFERRED_INIT((DB), V1R0); \ | ||
| 236 | } else if ((DB)->schema_revision() < 3) { \ | ||
| 237 | DEFERRED_INIT((DB), V1R1); \ | ||
| 238 | } else { \ | ||
| 239 | DEFERRED_INIT((DB), V1R3); \ | ||
| 240 | } | ||
| 241 | |||
| 242 | 3254 | SqlInsertTag::SqlInsertTag(const HistoryDatabase *database) { | |
| 243 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3210 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3210 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3210 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3254 | MAKE_STATEMENTS("INSERT INTO tags (@DB_FIELDS@) VALUES (@DB_PLACEHOLDERS@);"); |
| 244 |
6/21✓ Branch 2 taken 3254 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3254 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3254 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 3254 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 28 taken 3254 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3254 times.
✗ Branch 32 not taken.
|
3254 | DEFERRED_INITS(database); |
| 245 | 3254 | } | |
| 246 | |||
| 247 | |||
| 248 | 186850 | bool SqlInsertTag::BindTag(const History::Tag &tag) { | |
| 249 |
3/9✓ Branch 1 taken 186850 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 186850 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 186850 times.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
373700 | return BindText(1, tag.name) && BindTextTransient(2, tag.root_hash.ToString()) |
| 250 |
0/2✗ Branch 0 not taken.
✗ Branch 1 not taken.
|
186850 | && // temporary (ToString) |
| 251 |
4/9✓ Branch 1 taken 186850 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 186850 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 186850 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 186850 times.
✗ Branch 9 not taken.
|
186850 | BindInt64(3, tag.revision) && BindInt64(4, tag.timestamp) && |
| 252 | // Channels are no longer supported: store 0 (i.e. kChannelTrunk) | ||
| 253 | // for backwards compatibility with existing databases | ||
| 254 | // | ||
| 255 |
4/8✓ Branch 1 taken 186850 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 186850 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 186850 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 186850 times.
✗ Branch 9 not taken.
|
186850 | BindInt64(5, 0) && BindText(6, tag.description) |
| 256 |
7/16✓ Branch 1 taken 186850 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 186850 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 186850 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 186850 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 186850 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 186850 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 186850 times.
✗ Branch 16 not taken.
|
560550 | && BindInt64(7, tag.size) && BindText(8, tag.branch); |
| 257 | } | ||
| 258 | |||
| 259 | |||
| 260 | //------------------------------------------------------------------------------ | ||
| 261 | |||
| 262 | |||
| 263 | 3254 | SqlRemoveTag::SqlRemoveTag(const HistoryDatabase *database) { | |
| 264 |
2/4✓ Branch 1 taken 3254 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3254 times.
✗ Branch 5 not taken.
|
3254 | DeferredInit(database->sqlite_db(), "DELETE FROM tags WHERE name = :name;"); |
| 265 | 3254 | } | |
| 266 | |||
| 267 | 528 | bool SqlRemoveTag::BindName(const std::string &name) { | |
| 268 | 528 | return BindText(1, name); | |
| 269 | } | ||
| 270 | |||
| 271 | |||
| 272 | //------------------------------------------------------------------------------ | ||
| 273 | |||
| 274 | |||
| 275 | 3980 | SqlFindTag::SqlFindTag(const HistoryDatabase *database) { | |
| 276 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3936 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3936 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3936 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3980 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags WHERE name = :name;"); |
| 277 |
13/21✓ Branch 2 taken 3980 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 44 times.
✓ Branch 6 taken 3936 times.
✓ Branch 7 taken 44 times.
✓ Branch 8 taken 3936 times.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 44 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 88 times.
✓ Branch 18 taken 3848 times.
✓ Branch 21 taken 88 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 88 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 3848 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3848 times.
✗ Branch 32 not taken.
|
3980 | DEFERRED_INITS(database); |
| 278 | 3980 | } | |
| 279 | |||
| 280 | 2616 | bool SqlFindTag::BindName(const std::string &name) { return BindText(1, name); } | |
| 281 | |||
| 282 | |||
| 283 | //------------------------------------------------------------------------------ | ||
| 284 | |||
| 285 | |||
| 286 | 3980 | SqlFindTagByDate::SqlFindTagByDate(const HistoryDatabase *database) { | |
| 287 | // figure out the tag that was HEAD to a given point in time | ||
| 288 | // | ||
| 289 | // conceptually goes back in the revision history | ORDER BY revision DESC | ||
| 290 | // and picks the first tag | LIMIT 1 | ||
| 291 | // that is older than the given timestamp | WHICH timestamp <= :ts | ||
| 292 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3936 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3936 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3936 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3980 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags " |
| 293 | "WHERE (branch = '') AND (timestamp <= :timestamp) " | ||
| 294 | "ORDER BY revision DESC LIMIT 1;"); | ||
| 295 |
13/21✓ Branch 2 taken 3980 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 44 times.
✓ Branch 6 taken 3936 times.
✓ Branch 7 taken 44 times.
✓ Branch 8 taken 3936 times.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 44 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 88 times.
✓ Branch 18 taken 3848 times.
✓ Branch 21 taken 88 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 88 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 3848 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3848 times.
✗ Branch 32 not taken.
|
3980 | DEFERRED_INITS(database); |
| 296 | 3980 | } | |
| 297 | |||
| 298 | 240 | bool SqlFindTagByDate::BindTimestamp(const time_t timestamp) { | |
| 299 | 240 | return BindInt64(1, timestamp); | |
| 300 | } | ||
| 301 | |||
| 302 | |||
| 303 | //------------------------------------------------------------------------------ | ||
| 304 | |||
| 305 | |||
| 306 | 3254 | SqlFindBranchHead::SqlFindBranchHead(const HistoryDatabase *database) { | |
| 307 | // One of the tags with the highest revision on a given branch | ||
| 308 | // Doesn't work on older database revisions | ||
| 309 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3210 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3210 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3210 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3254 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags " |
| 310 | "WHERE (branch = :branch) " | ||
| 311 | "ORDER BY revision DESC LIMIT 1;"); | ||
| 312 |
6/21✓ Branch 2 taken 3254 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3254 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3254 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 3254 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 28 taken 3254 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3254 times.
✗ Branch 32 not taken.
|
3254 | DEFERRED_INITS(database); |
| 313 | 3254 | } | |
| 314 | |||
| 315 | 132 | bool SqlFindBranchHead::BindBranchName(const std::string &branch_name) { | |
| 316 | 132 | return BindText(1, branch_name); | |
| 317 | } | ||
| 318 | |||
| 319 | |||
| 320 | //------------------------------------------------------------------------------ | ||
| 321 | |||
| 322 | |||
| 323 | 3980 | SqlCountTags::SqlCountTags(const HistoryDatabase *database) { | |
| 324 |
2/4✓ Branch 1 taken 3980 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3980 times.
✗ Branch 5 not taken.
|
3980 | DeferredInit(database->sqlite_db(), "SELECT count(*) FROM tags;"); |
| 325 | 3980 | } | |
| 326 | |||
| 327 | 1276 | unsigned SqlCountTags::RetrieveCount() const { | |
| 328 | 1276 | const int64_t count = RetrieveInt64(0); | |
| 329 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1276 times.
|
1276 | assert(count >= 0); |
| 330 | 1276 | return static_cast<uint64_t>(count); | |
| 331 | } | ||
| 332 | |||
| 333 | |||
| 334 | //------------------------------------------------------------------------------ | ||
| 335 | |||
| 336 | |||
| 337 | 3980 | SqlListTags::SqlListTags(const HistoryDatabase *database) { | |
| 338 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3936 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3936 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3936 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3980 | MAKE_STATEMENTS( |
| 339 | "SELECT @DB_FIELDS@ FROM tags ORDER BY timestamp DESC, revision DESC;"); | ||
| 340 |
13/21✓ Branch 2 taken 3980 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 44 times.
✓ Branch 6 taken 3936 times.
✓ Branch 7 taken 44 times.
✓ Branch 8 taken 3936 times.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 44 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 88 times.
✓ Branch 18 taken 3848 times.
✓ Branch 21 taken 88 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 88 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 3848 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3848 times.
✗ Branch 32 not taken.
|
3980 | DEFERRED_INITS(database); |
| 341 | 3980 | } | |
| 342 | |||
| 343 | |||
| 344 | //------------------------------------------------------------------------------ | ||
| 345 | |||
| 346 | |||
| 347 | 3980 | SqlGetHashes::SqlGetHashes(const HistoryDatabase *database) { | |
| 348 |
2/4✓ Branch 1 taken 3980 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3980 times.
✗ Branch 5 not taken.
|
3980 | DeferredInit(database->sqlite_db(), "SELECT DISTINCT hash FROM tags " |
| 349 | "ORDER BY timestamp, revision ASC"); | ||
| 350 | 3980 | } | |
| 351 | |||
| 352 | 88044 | shash::Any SqlGetHashes::RetrieveHash() const { | |
| 353 |
1/2✓ Branch 3 taken 88044 times.
✗ Branch 4 not taken.
|
176088 | return shash::MkFromHexPtr(shash::HexPtr(RetrieveString(0)), |
| 354 | 176088 | shash::kSuffixCatalog); | |
| 355 | } | ||
| 356 | |||
| 357 | |||
| 358 | //------------------------------------------------------------------------------ | ||
| 359 | |||
| 360 | |||
| 361 | 3254 | SqlRollbackTag::SqlRollbackTag(const HistoryDatabase *database) { | |
| 362 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3210 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3210 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3210 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3254 | MAKE_STATEMENTS("DELETE FROM tags WHERE @ROLLBACK_COND@;"); |
| 363 |
6/21✓ Branch 2 taken 3254 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 3254 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3254 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 3254 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 28 taken 3254 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3254 times.
✗ Branch 32 not taken.
|
3254 | DEFERRED_INITS(database); |
| 364 | 3254 | } | |
| 365 | |||
| 366 | |||
| 367 | //------------------------------------------------------------------------------ | ||
| 368 | |||
| 369 | |||
| 370 | 3980 | SqlListRollbackTags::SqlListRollbackTags(const HistoryDatabase *database) { | |
| 371 |
39/81✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3936 times.
✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 44 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 44 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 44 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 44 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 44 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 44 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 44 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 44 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 44 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 44 times.
✓ Branch 61 taken 3936 times.
✓ Branch 63 taken 44 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 44 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 44 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 44 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 44 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 44 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 44 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 44 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 44 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 44 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 44 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 44 times.
✓ Branch 121 taken 3936 times.
✓ Branch 123 taken 44 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 44 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 44 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 44 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 44 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 44 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 44 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 44 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 44 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 44 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 44 times.
✗ Branch 161 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
|
3980 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags " |
| 372 | "WHERE @ROLLBACK_COND@ " | ||
| 373 | "ORDER BY revision DESC;"); | ||
| 374 |
13/21✓ Branch 2 taken 3980 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 44 times.
✓ Branch 6 taken 3936 times.
✓ Branch 7 taken 44 times.
✓ Branch 8 taken 3936 times.
✓ Branch 11 taken 44 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 44 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 88 times.
✓ Branch 18 taken 3848 times.
✓ Branch 21 taken 88 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 88 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 3848 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3848 times.
✗ Branch 32 not taken.
|
3980 | DEFERRED_INITS(database); |
| 375 | 3980 | } | |
| 376 | |||
| 377 | |||
| 378 | //------------------------------------------------------------------------------ | ||
| 379 | |||
| 380 | |||
| 381 | 3980 | SqlListBranches::SqlListBranches(const HistoryDatabase *database) { | |
| 382 |
2/2✓ Branch 1 taken 132 times.
✓ Branch 2 taken 3848 times.
|
3980 | if (database->schema_revision() < 3) |
| 383 |
2/4✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 132 times.
✗ Branch 5 not taken.
|
132 | DeferredInit(database->sqlite_db(), "SELECT '', NULL, 0;"); |
| 384 | else | ||
| 385 |
2/4✓ Branch 1 taken 3848 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3848 times.
✗ Branch 5 not taken.
|
3848 | DeferredInit(database->sqlite_db(), |
| 386 | "SELECT branch, parent, initial_revision FROM branches;"); | ||
| 387 | 3980 | } | |
| 388 | |||
| 389 | |||
| 390 | 1188 | History::Branch SqlListBranches::RetrieveBranch() const { | |
| 391 |
1/2✓ Branch 1 taken 1188 times.
✗ Branch 2 not taken.
|
1188 | const std::string branch = RetrieveString(0); |
| 392 |
1/2✓ Branch 1 taken 1188 times.
✗ Branch 2 not taken.
|
1188 | const std::string parent = (RetrieveType(1) == SQLITE_NULL) |
| 393 | ? "" | ||
| 394 |
6/11✓ Branch 0 taken 440 times.
✓ Branch 1 taken 748 times.
✓ Branch 4 taken 440 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 748 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 440 times.
✓ Branch 10 taken 748 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
|
1188 | : RetrieveString(1); |
| 395 |
1/2✓ Branch 1 taken 1188 times.
✗ Branch 2 not taken.
|
1188 | const unsigned initial_revision = RetrieveInt64(2); |
| 396 |
1/2✓ Branch 1 taken 1188 times.
✗ Branch 2 not taken.
|
2376 | return History::Branch(branch, parent, initial_revision); |
| 397 | 1188 | } | |
| 398 | |||
| 399 | |||
| 400 | //------------------------------------------------------------------------------ | ||
| 401 | |||
| 402 | |||
| 403 | 3254 | SqlInsertBranch::SqlInsertBranch(const HistoryDatabase *database) { | |
| 404 |
2/4✓ Branch 1 taken 3254 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3254 times.
✗ Branch 5 not taken.
|
3254 | DeferredInit(database->sqlite_db(), |
| 405 | "INSERT INTO branches (branch, parent, initial_revision) " | ||
| 406 | "VALUES (:branch, :parent, :initial_revision);"); | ||
| 407 | 3254 | } | |
| 408 | |||
| 409 | |||
| 410 | 792 | bool SqlInsertBranch::BindBranch(const History::Branch &branch) { | |
| 411 |
1/2✓ Branch 2 taken 748 times.
✗ Branch 3 not taken.
|
1540 | return BindText(1, branch.branch) && BindText(2, branch.parent) |
| 412 |
3/4✓ Branch 0 taken 748 times.
✓ Branch 1 taken 44 times.
✓ Branch 3 taken 748 times.
✗ Branch 4 not taken.
|
1540 | && BindInt64(3, branch.initial_revision); |
| 413 | } | ||
| 414 | |||
| 415 | |||
| 416 | //------------------------------------------------------------------------------ | ||
| 417 | |||
| 418 | |||
| 419 | 7146 | bool SqlRecycleBin::CheckSchema(const HistoryDatabase *database) const { | |
| 420 | 7146 | return (database->IsEqualSchema(database->schema_version(), 1.0)) | |
| 421 |
2/4✓ Branch 0 taken 7146 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 7146 times.
✗ Branch 4 not taken.
|
7146 | && (database->schema_revision() >= 2); |
| 422 | } | ||
| 423 | |||
| 424 | |||
| 425 | //------------------------------------------------------------------------------ | ||
| 426 | |||
| 427 | |||
| 428 | 3892 | SqlRecycleBinList::SqlRecycleBinList(const HistoryDatabase *database) { | |
| 429 |
2/4✓ Branch 1 taken 3892 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 3892 times.
|
3892 | assert(CheckSchema(database)); |
| 430 |
2/4✓ Branch 1 taken 3892 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3892 times.
✗ Branch 5 not taken.
|
3892 | DeferredInit(database->sqlite_db(), "SELECT hash, flags FROM recycle_bin;"); |
| 431 | 3892 | } | |
| 432 | |||
| 433 | |||
| 434 | 44 | shash::Any SqlRecycleBinList::RetrieveHash() { | |
| 435 | 44 | const unsigned int flags = RetrieveInt64(1); | |
| 436 | 44 | shash::Suffix suffix = shash::kSuffixNone; | |
| 437 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | if (flags & SqlRecycleBin::kFlagCatalog) { |
| 438 | 44 | suffix = shash::kSuffixCatalog; | |
| 439 | } | ||
| 440 | |||
| 441 |
1/2✓ Branch 3 taken 44 times.
✗ Branch 4 not taken.
|
44 | return shash::MkFromHexPtr(shash::HexPtr(RetrieveString(0)), suffix); |
| 442 | } | ||
| 443 | |||
| 444 | |||
| 445 | //------------------------------------------------------------------------------ | ||
| 446 | |||
| 447 | |||
| 448 | 3254 | SqlRecycleBinFlush::SqlRecycleBinFlush(const HistoryDatabase *database) { | |
| 449 |
2/4✓ Branch 1 taken 3254 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 3254 times.
|
3254 | assert(CheckSchema(database)); |
| 450 |
2/4✓ Branch 1 taken 3254 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3254 times.
✗ Branch 5 not taken.
|
3254 | DeferredInit(database->sqlite_db(), "DELETE FROM recycle_bin;"); |
| 451 | 3254 | } | |
| 452 | |||
| 453 | |||
| 454 | }; /* namespace history */ | ||
| 455 |