Directory: | cvmfs/ |
---|---|
File: | cvmfs/history_sql.cc |
Date: | 2025-06-29 02:35:41 |
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 | 2122 | bool HistoryDatabase::CreateEmptyDatabase() { | |
36 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2122 times.
|
2122 | assert(read_write()); |
37 | |||
38 |
3/6✓ Branch 2 taken 2122 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2122 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2122 times.
✗ Branch 9 not taken.
|
4244 | sqlite::Sql sql_foreign_keys(sqlite_db(), "PRAGMA foreign_keys = ON;"); |
39 |
2/4✓ Branch 1 taken 2122 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2122 times.
|
2122 | if (!sql_foreign_keys.Execute()) |
40 | ✗ | return false; | |
41 | |||
42 |
6/13✓ Branch 1 taken 2122 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2122 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2122 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2122 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2122 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2122 times.
✗ Branch 14 not taken.
|
2122 | return CreateBranchesTable() && CreateTagsTable() && CreateRecycleBinTable(); |
43 | 2122 | } | |
44 | |||
45 | |||
46 | 2122 | bool HistoryDatabase::CreateTagsTable() { | |
47 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2122 times.
|
2122 | assert(read_write()); |
48 |
3/6✓ Branch 2 taken 2122 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2122 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2122 times.
✗ Branch 9 not taken.
|
4244 | 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 2122 times.
✗ Branch 2 not taken.
|
4244 | .Execute(); |
56 | } | ||
57 | |||
58 | |||
59 | 2214 | bool HistoryDatabase::CreateRecycleBinTable() { | |
60 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2214 times.
|
2214 | assert(read_write()); |
61 |
3/6✓ Branch 2 taken 2214 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2214 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2214 times.
✗ Branch 9 not taken.
|
4428 | 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 2214 times.
✗ Branch 2 not taken.
|
4428 | .Execute(); |
65 | } | ||
66 | |||
67 | |||
68 | 2260 | bool HistoryDatabase::CreateBranchesTable() { | |
69 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2260 times.
|
2260 | 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 2260 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2260 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2260 times.
✗ Branch 9 not taken.
|
4520 | " CHECK ((branch = '') OR (parent IS NOT NULL)));"); |
78 |
1/2✓ Branch 1 taken 2260 times.
✗ Branch 2 not taken.
|
2260 | bool retval = sql_create.Execute(); |
79 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2260 times.
|
2260 | 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 2260 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2260 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2260 times.
✗ Branch 9 not taken.
|
4520 | "VALUES ('', NULL, 0);"); |
86 |
1/2✓ Branch 1 taken 2260 times.
✗ Branch 2 not taken.
|
2260 | retval = sql_init.Execute(); |
87 | 2260 | return retval; | |
88 | 2260 | } | |
89 | |||
90 | |||
91 | 2122 | bool HistoryDatabase::InsertInitialValues(const std::string &repository_name) { | |
92 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2122 times.
|
2122 | assert(read_write()); |
93 |
1/2✓ Branch 2 taken 2122 times.
✗ Branch 3 not taken.
|
2122 | return this->SetProperty(kFqrnKey, repository_name); |
94 | } | ||
95 | |||
96 | |||
97 | 3654 | bool HistoryDatabase::ContainsRecycleBin() const { | |
98 |
3/4✓ Branch 1 taken 3654 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3470 times.
✓ Branch 5 taken 184 times.
|
3654 | return schema_version() >= 1.0 - kSchemaEpsilon && schema_revision() >= 2; |
99 | } | ||
100 | |||
101 | |||
102 | 934 | bool HistoryDatabase::CheckSchemaCompatibility() { | |
103 |
1/2✓ Branch 1 taken 934 times.
✗ Branch 2 not taken.
|
1868 | return !((schema_version() < kLatestSupportedSchema - kSchemaEpsilon) |
104 |
1/2✓ Branch 1 taken 934 times.
✗ Branch 2 not taken.
|
1868 | || (schema_version() > kLatestSchema + kSchemaEpsilon)); |
105 | } | ||
106 | |||
107 | |||
108 | 368 | bool HistoryDatabase::LiveSchemaUpgradeIfNecessary() { | |
109 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 368 times.
|
368 | assert(read_write()); |
110 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 368 times.
|
368 | assert(IsEqualSchema(schema_version(), 1.0)); |
111 | |||
112 |
3/6✓ Branch 2 taken 368 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 368 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 368 times.
✗ Branch 9 not taken.
|
736 | sqlite::Sql sql_foreign_keys(sqlite_db(), "PRAGMA foreign_keys = ON;"); |
113 |
2/4✓ Branch 1 taken 368 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 368 times.
|
368 | if (!sql_foreign_keys.Execute()) |
114 | ✗ | return false; | |
115 |
2/2✓ Branch 1 taken 230 times.
✓ Branch 2 taken 138 times.
|
368 | if (schema_revision() == kLatestSchemaRevision) { |
116 | 230 | return true; | |
117 | } | ||
118 | |||
119 |
1/2✓ Branch 2 taken 138 times.
✗ Branch 3 not taken.
|
276 | LogCvmfs(kLogHistory, kLogDebug, |
120 | "upgrading history schema revision " | ||
121 | "%.2f (Rev: %d) to %.2f (Rev: %d)", | ||
122 | 138 | schema_version(), schema_revision(), kLatestSchema, | |
123 | kLatestSchemaRevision); | ||
124 | |||
125 |
1/2✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
|
138 | const bool success = UpgradeSchemaRevision_10_1() |
126 |
2/4✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 138 times.
✗ Branch 4 not taken.
|
138 | && UpgradeSchemaRevision_10_2() |
127 |
3/6✓ Branch 0 taken 138 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 138 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 138 times.
✗ Branch 6 not taken.
|
276 | && UpgradeSchemaRevision_10_3(); |
128 | |||
129 |
3/6✓ Branch 0 taken 138 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 138 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 138 times.
✗ Branch 6 not taken.
|
138 | return success && StoreSchemaRevision(); |
130 | 368 | } | |
131 | |||
132 | |||
133 | 138 | bool HistoryDatabase::UpgradeSchemaRevision_10_1() { | |
134 |
2/2✓ Branch 1 taken 92 times.
✓ Branch 2 taken 46 times.
|
138 | if (schema_revision() > 0) { |
135 | 92 | return true; | |
136 | } | ||
137 | |||
138 |
3/6✓ Branch 2 taken 46 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 9 not taken.
|
92 | sqlite::Sql sql_upgrade(sqlite_db(), "ALTER TABLE tags ADD size INTEGER;"); |
139 |
2/4✓ Branch 1 taken 46 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 46 times.
|
46 | if (!sql_upgrade.Execute()) { |
140 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to upgrade tags table"); | |
141 | ✗ | return false; | |
142 | } | ||
143 | |||
144 | 46 | set_schema_revision(1); | |
145 | 46 | return true; | |
146 | 46 | } | |
147 | |||
148 | |||
149 | 138 | bool HistoryDatabase::UpgradeSchemaRevision_10_2() { | |
150 |
2/2✓ Branch 1 taken 46 times.
✓ Branch 2 taken 92 times.
|
138 | if (schema_revision() > 1) { |
151 | 46 | return true; | |
152 | } | ||
153 | |||
154 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 92 times.
|
92 | if (!CreateRecycleBinTable()) { |
155 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to upgrade history database"); | |
156 | ✗ | return false; | |
157 | } | ||
158 | |||
159 | 92 | set_schema_revision(2); | |
160 | 92 | return true; | |
161 | } | ||
162 | |||
163 | |||
164 | 138 | bool HistoryDatabase::UpgradeSchemaRevision_10_3() { | |
165 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 138 times.
|
138 | if (schema_revision() > 2) { |
166 | ✗ | return true; | |
167 | } | ||
168 | |||
169 |
2/4✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 138 times.
|
138 | 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 138 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 138 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 138 times.
✗ Branch 9 not taken.
|
276 | "ALTER TABLE tags ADD branch TEXT REFERENCES branches (branch);"); |
177 |
2/4✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 138 times.
|
138 | if (!sql_upgrade.Execute()) { |
178 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to upgrade tags table"); | |
179 | ✗ | return false; | |
180 | } | ||
181 | |||
182 |
3/6✓ Branch 2 taken 138 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 138 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 138 times.
✗ Branch 9 not taken.
|
276 | sqlite::Sql sql_fill(sqlite_db(), "UPDATE tags SET branch = '';"); |
183 |
2/4✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 138 times.
|
138 | 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 138 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 138 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 138 times.
✗ Branch 9 not taken.
|
276 | sqlite::Sql sql_flush(sqlite_db(), "DELETE FROM recycle_bin; VACUUM;"); |
190 |
2/4✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 138 times.
|
138 | if (!sql_flush.Execute()) { |
191 | ✗ | LogCvmfs(kLogHistory, kLogStderr, "failed to flush recycle bin table"); | |
192 | ✗ | return false; | |
193 | } | ||
194 | |||
195 | 138 | set_schema_revision(3); | |
196 | 138 | return true; | |
197 | 138 | } | |
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 | 2490 | SqlInsertTag::SqlInsertTag(const HistoryDatabase *database) { | |
243 |
39/81✓ Branch 0 taken 46 times.
✓ Branch 1 taken 2444 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 2444 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 2444 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
2490 | MAKE_STATEMENTS("INSERT INTO tags (@DB_FIELDS@) VALUES (@DB_PLACEHOLDERS@);"); |
244 |
6/21✓ Branch 2 taken 2490 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2490 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2490 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 2490 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 28 taken 2490 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2490 times.
✗ Branch 32 not taken.
|
2490 | DEFERRED_INITS(database); |
245 | 2490 | } | |
246 | |||
247 | |||
248 | 195004 | bool SqlInsertTag::BindTag(const History::Tag &tag) { | |
249 |
3/9✓ Branch 1 taken 195004 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 195004 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 195004 times.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
390008 | return BindText(1, tag.name) && BindTextTransient(2, tag.root_hash.ToString()) |
250 |
0/2✗ Branch 0 not taken.
✗ Branch 1 not taken.
|
195004 | && // temporary (ToString) |
251 |
4/9✓ Branch 1 taken 195004 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 195004 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 195004 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 195004 times.
✗ Branch 9 not taken.
|
195004 | 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 195004 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 195004 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 195004 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 195004 times.
✗ Branch 9 not taken.
|
195004 | BindInt64(5, 0) && BindText(6, tag.description) |
256 |
7/16✓ Branch 1 taken 195004 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 195004 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 195004 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 195004 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 195004 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 195004 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 195004 times.
✗ Branch 16 not taken.
|
585012 | && BindInt64(7, tag.size) && BindText(8, tag.branch); |
257 | } | ||
258 | |||
259 | |||
260 | //------------------------------------------------------------------------------ | ||
261 | |||
262 | |||
263 | 2490 | SqlRemoveTag::SqlRemoveTag(const HistoryDatabase *database) { | |
264 |
2/4✓ Branch 1 taken 2490 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2490 times.
✗ Branch 5 not taken.
|
2490 | DeferredInit(database->sqlite_db(), "DELETE FROM tags WHERE name = :name;"); |
265 | 2490 | } | |
266 | |||
267 | 552 | bool SqlRemoveTag::BindName(const std::string &name) { | |
268 | 552 | return BindText(1, name); | |
269 | } | ||
270 | |||
271 | |||
272 | //------------------------------------------------------------------------------ | ||
273 | |||
274 | |||
275 | 3056 | SqlFindTag::SqlFindTag(const HistoryDatabase *database) { | |
276 |
39/81✓ Branch 0 taken 46 times.
✓ Branch 1 taken 3010 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 3010 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 3010 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
3056 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags WHERE name = :name;"); |
277 |
13/21✓ Branch 2 taken 3056 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✓ Branch 6 taken 3010 times.
✓ Branch 7 taken 46 times.
✓ Branch 8 taken 3010 times.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 46 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 92 times.
✓ Branch 18 taken 2918 times.
✓ Branch 21 taken 92 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 92 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 2918 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2918 times.
✗ Branch 32 not taken.
|
3056 | DEFERRED_INITS(database); |
278 | 3056 | } | |
279 | |||
280 | 2710 | bool SqlFindTag::BindName(const std::string &name) { return BindText(1, name); } | |
281 | |||
282 | |||
283 | //------------------------------------------------------------------------------ | ||
284 | |||
285 | |||
286 | 3056 | 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 46 times.
✓ Branch 1 taken 3010 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 3010 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 3010 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
3056 | 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 3056 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✓ Branch 6 taken 3010 times.
✓ Branch 7 taken 46 times.
✓ Branch 8 taken 3010 times.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 46 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 92 times.
✓ Branch 18 taken 2918 times.
✓ Branch 21 taken 92 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 92 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 2918 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2918 times.
✗ Branch 32 not taken.
|
3056 | DEFERRED_INITS(database); |
296 | 3056 | } | |
297 | |||
298 | 226 | bool SqlFindTagByDate::BindTimestamp(const time_t timestamp) { | |
299 | 226 | return BindInt64(1, timestamp); | |
300 | } | ||
301 | |||
302 | |||
303 | //------------------------------------------------------------------------------ | ||
304 | |||
305 | |||
306 | 2490 | 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 46 times.
✓ Branch 1 taken 2444 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 2444 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 2444 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
2490 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags " |
310 | "WHERE (branch = :branch) " | ||
311 | "ORDER BY revision DESC LIMIT 1;"); | ||
312 |
6/21✓ Branch 2 taken 2490 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2490 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2490 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 2490 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 28 taken 2490 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2490 times.
✗ Branch 32 not taken.
|
2490 | DEFERRED_INITS(database); |
313 | 2490 | } | |
314 | |||
315 | 138 | bool SqlFindBranchHead::BindBranchName(const std::string &branch_name) { | |
316 | 138 | return BindText(1, branch_name); | |
317 | } | ||
318 | |||
319 | |||
320 | //------------------------------------------------------------------------------ | ||
321 | |||
322 | |||
323 | 3056 | SqlCountTags::SqlCountTags(const HistoryDatabase *database) { | |
324 |
2/4✓ Branch 1 taken 3056 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3056 times.
✗ Branch 5 not taken.
|
3056 | DeferredInit(database->sqlite_db(), "SELECT count(*) FROM tags;"); |
325 | 3056 | } | |
326 | |||
327 | 1334 | unsigned SqlCountTags::RetrieveCount() const { | |
328 | 1334 | const int64_t count = RetrieveInt64(0); | |
329 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1334 times.
|
1334 | assert(count >= 0); |
330 | 1334 | return static_cast<uint64_t>(count); | |
331 | } | ||
332 | |||
333 | |||
334 | //------------------------------------------------------------------------------ | ||
335 | |||
336 | |||
337 | 3056 | SqlListTags::SqlListTags(const HistoryDatabase *database) { | |
338 |
39/81✓ Branch 0 taken 46 times.
✓ Branch 1 taken 3010 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 3010 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 3010 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
3056 | MAKE_STATEMENTS( |
339 | "SELECT @DB_FIELDS@ FROM tags ORDER BY timestamp DESC, revision DESC;"); | ||
340 |
13/21✓ Branch 2 taken 3056 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✓ Branch 6 taken 3010 times.
✓ Branch 7 taken 46 times.
✓ Branch 8 taken 3010 times.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 46 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 92 times.
✓ Branch 18 taken 2918 times.
✓ Branch 21 taken 92 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 92 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 2918 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2918 times.
✗ Branch 32 not taken.
|
3056 | DEFERRED_INITS(database); |
341 | 3056 | } | |
342 | |||
343 | |||
344 | //------------------------------------------------------------------------------ | ||
345 | |||
346 | |||
347 | 3056 | SqlGetHashes::SqlGetHashes(const HistoryDatabase *database) { | |
348 |
2/4✓ Branch 1 taken 3056 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3056 times.
✗ Branch 5 not taken.
|
3056 | DeferredInit(database->sqlite_db(), "SELECT DISTINCT hash FROM tags " |
349 | "ORDER BY timestamp, revision ASC"); | ||
350 | 3056 | } | |
351 | |||
352 | 92046 | shash::Any SqlGetHashes::RetrieveHash() const { | |
353 |
1/2✓ Branch 3 taken 92046 times.
✗ Branch 4 not taken.
|
184092 | return shash::MkFromHexPtr(shash::HexPtr(RetrieveString(0)), |
354 | 184092 | shash::kSuffixCatalog); | |
355 | } | ||
356 | |||
357 | |||
358 | //------------------------------------------------------------------------------ | ||
359 | |||
360 | |||
361 | 2490 | SqlRollbackTag::SqlRollbackTag(const HistoryDatabase *database) { | |
362 |
39/81✓ Branch 0 taken 46 times.
✓ Branch 1 taken 2444 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 2444 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 2444 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
2490 | MAKE_STATEMENTS("DELETE FROM tags WHERE @ROLLBACK_COND@;"); |
363 |
6/21✓ Branch 2 taken 2490 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2490 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2490 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 2490 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 28 taken 2490 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2490 times.
✗ Branch 32 not taken.
|
2490 | DEFERRED_INITS(database); |
364 | 2490 | } | |
365 | |||
366 | |||
367 | //------------------------------------------------------------------------------ | ||
368 | |||
369 | |||
370 | 3056 | SqlListRollbackTags::SqlListRollbackTags(const HistoryDatabase *database) { | |
371 |
39/81✓ Branch 0 taken 46 times.
✓ Branch 1 taken 3010 times.
✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 46 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 46 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 46 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 46 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 46 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 46 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 46 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 46 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 46 times.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 60 taken 46 times.
✓ Branch 61 taken 3010 times.
✓ Branch 63 taken 46 times.
✗ Branch 64 not taken.
✓ Branch 67 taken 46 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 46 times.
✗ Branch 72 not taken.
✓ Branch 75 taken 46 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 46 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✓ Branch 83 taken 46 times.
✗ Branch 84 not taken.
✓ Branch 87 taken 46 times.
✗ Branch 88 not taken.
✓ Branch 91 taken 46 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 46 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 46 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 46 times.
✗ Branch 101 not taken.
✓ Branch 120 taken 46 times.
✓ Branch 121 taken 3010 times.
✓ Branch 123 taken 46 times.
✗ Branch 124 not taken.
✓ Branch 127 taken 46 times.
✗ Branch 128 not taken.
✓ Branch 131 taken 46 times.
✗ Branch 132 not taken.
✓ Branch 135 taken 46 times.
✗ Branch 136 not taken.
✓ Branch 139 taken 46 times.
✗ Branch 140 not taken.
✓ Branch 143 taken 46 times.
✗ Branch 144 not taken.
✓ Branch 147 taken 46 times.
✗ Branch 148 not taken.
✓ Branch 151 taken 46 times.
✗ Branch 152 not taken.
✓ Branch 154 taken 46 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 46 times.
✗ Branch 158 not taken.
✓ Branch 160 taken 46 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.
|
3056 | MAKE_STATEMENTS("SELECT @DB_FIELDS@ FROM tags " |
372 | "WHERE @ROLLBACK_COND@ " | ||
373 | "ORDER BY revision DESC;"); | ||
374 |
13/21✓ Branch 2 taken 3056 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 46 times.
✓ Branch 6 taken 3010 times.
✓ Branch 7 taken 46 times.
✓ Branch 8 taken 3010 times.
✓ Branch 11 taken 46 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 46 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 92 times.
✓ Branch 18 taken 2918 times.
✓ Branch 21 taken 92 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 92 times.
✗ Branch 25 not taken.
✓ Branch 28 taken 2918 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2918 times.
✗ Branch 32 not taken.
|
3056 | DEFERRED_INITS(database); |
375 | 3056 | } | |
376 | |||
377 | |||
378 | //------------------------------------------------------------------------------ | ||
379 | |||
380 | |||
381 | 3056 | SqlListBranches::SqlListBranches(const HistoryDatabase *database) { | |
382 |
2/2✓ Branch 1 taken 138 times.
✓ Branch 2 taken 2918 times.
|
3056 | if (database->schema_revision() < 3) |
383 |
2/4✓ Branch 1 taken 138 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 138 times.
✗ Branch 5 not taken.
|
138 | DeferredInit(database->sqlite_db(), "SELECT '', NULL, 0;"); |
384 | else | ||
385 |
2/4✓ Branch 1 taken 2918 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2918 times.
✗ Branch 5 not taken.
|
2918 | DeferredInit(database->sqlite_db(), |
386 | "SELECT branch, parent, initial_revision FROM branches;"); | ||
387 | 3056 | } | |
388 | |||
389 | |||
390 | 1242 | History::Branch SqlListBranches::RetrieveBranch() const { | |
391 |
1/2✓ Branch 1 taken 1242 times.
✗ Branch 2 not taken.
|
1242 | const std::string branch = RetrieveString(0); |
392 |
1/2✓ Branch 1 taken 1242 times.
✗ Branch 2 not taken.
|
1242 | const std::string parent = (RetrieveType(1) == SQLITE_NULL) |
393 | ? "" | ||
394 |
6/11✓ Branch 0 taken 460 times.
✓ Branch 1 taken 782 times.
✓ Branch 4 taken 460 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 782 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 460 times.
✓ Branch 10 taken 782 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
|
1242 | : RetrieveString(1); |
395 |
1/2✓ Branch 1 taken 1242 times.
✗ Branch 2 not taken.
|
1242 | const unsigned initial_revision = RetrieveInt64(2); |
396 |
1/2✓ Branch 1 taken 1242 times.
✗ Branch 2 not taken.
|
2484 | return History::Branch(branch, parent, initial_revision); |
397 | 1242 | } | |
398 | |||
399 | |||
400 | //------------------------------------------------------------------------------ | ||
401 | |||
402 | |||
403 | 2490 | SqlInsertBranch::SqlInsertBranch(const HistoryDatabase *database) { | |
404 |
2/4✓ Branch 1 taken 2490 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2490 times.
✗ Branch 5 not taken.
|
2490 | DeferredInit(database->sqlite_db(), |
405 | "INSERT INTO branches (branch, parent, initial_revision) " | ||
406 | "VALUES (:branch, :parent, :initial_revision);"); | ||
407 | 2490 | } | |
408 | |||
409 | |||
410 | 828 | bool SqlInsertBranch::BindBranch(const History::Branch &branch) { | |
411 |
1/2✓ Branch 2 taken 782 times.
✗ Branch 3 not taken.
|
1610 | return BindText(1, branch.branch) && BindText(2, branch.parent) |
412 |
3/4✓ Branch 0 taken 782 times.
✓ Branch 1 taken 46 times.
✓ Branch 3 taken 782 times.
✗ Branch 4 not taken.
|
1610 | && BindInt64(3, branch.initial_revision); |
413 | } | ||
414 | |||
415 | |||
416 | //------------------------------------------------------------------------------ | ||
417 | |||
418 | |||
419 | 5454 | bool SqlRecycleBin::CheckSchema(const HistoryDatabase *database) const { | |
420 | 5454 | return (database->IsEqualSchema(database->schema_version(), 1.0)) | |
421 |
2/4✓ Branch 0 taken 5454 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 5454 times.
✗ Branch 4 not taken.
|
5454 | && (database->schema_revision() >= 2); |
422 | } | ||
423 | |||
424 | |||
425 | //------------------------------------------------------------------------------ | ||
426 | |||
427 | |||
428 | 2964 | SqlRecycleBinList::SqlRecycleBinList(const HistoryDatabase *database) { | |
429 |
2/4✓ Branch 1 taken 2964 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2964 times.
|
2964 | assert(CheckSchema(database)); |
430 |
2/4✓ Branch 1 taken 2964 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2964 times.
✗ Branch 5 not taken.
|
2964 | DeferredInit(database->sqlite_db(), "SELECT hash, flags FROM recycle_bin;"); |
431 | 2964 | } | |
432 | |||
433 | |||
434 | 46 | shash::Any SqlRecycleBinList::RetrieveHash() { | |
435 | 46 | const unsigned int flags = RetrieveInt64(1); | |
436 | 46 | shash::Suffix suffix = shash::kSuffixNone; | |
437 |
1/2✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
|
46 | if (flags & SqlRecycleBin::kFlagCatalog) { |
438 | 46 | suffix = shash::kSuffixCatalog; | |
439 | } | ||
440 | |||
441 |
1/2✓ Branch 3 taken 46 times.
✗ Branch 4 not taken.
|
46 | return shash::MkFromHexPtr(shash::HexPtr(RetrieveString(0)), suffix); |
442 | } | ||
443 | |||
444 | |||
445 | //------------------------------------------------------------------------------ | ||
446 | |||
447 | |||
448 | 2490 | SqlRecycleBinFlush::SqlRecycleBinFlush(const HistoryDatabase *database) { | |
449 |
2/4✓ Branch 1 taken 2490 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2490 times.
|
2490 | assert(CheckSchema(database)); |
450 |
2/4✓ Branch 1 taken 2490 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2490 times.
✗ Branch 5 not taken.
|
2490 | DeferredInit(database->sqlite_db(), "DELETE FROM recycle_bin;"); |
451 | 2490 | } | |
452 | |||
453 | |||
454 | }; /* namespace history */ | ||
455 |