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