GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/history_sql.cc
Date: 2024-04-28 02:33:07
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