Mercurial > paster
comparison database.c @ 21:21c103c33ac9
pasterd: improve verbosity, closes #2472
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 06 Feb 2020 20:10:00 +0100 |
parents | 98ef2713eb0d |
children | f4e8a7920b94 |
comparison
equal
deleted
inserted
replaced
20:85a22b9abaec | 21:21c103c33ac9 |
---|---|
136 bool | 136 bool |
137 database_open(const char *path) | 137 database_open(const char *path) |
138 { | 138 { |
139 assert(path); | 139 assert(path); |
140 | 140 |
141 log_debug("opening database: %s\n", path); | 141 log_info("database: opening %s", path); |
142 | 142 |
143 if (sqlite3_open(path, &db) != SQLITE_OK) { | 143 if (sqlite3_open(path, &db) != SQLITE_OK) { |
144 log_warn("unable to open %s: %s\n", path, sqlite3_errmsg(db)); | 144 log_warn("database: unable to open %s: %s", path, sqlite3_errmsg(db)); |
145 return false; | 145 return false; |
146 } | 146 } |
147 | 147 |
148 if (sqlite3_exec(db, sql_init, NULL, NULL, NULL) != SQLITE_OK) { | 148 if (sqlite3_exec(db, sql_init, NULL, NULL, NULL) != SQLITE_OK) { |
149 log_warn("unable to initialize %s: %s\n", path, sqlite3_errmsg(db)); | 149 log_warn("database: unable to initialize %s: %s", path, sqlite3_errmsg(db)); |
150 return false; | 150 return false; |
151 } | 151 } |
152 | |
153 log_debug("successfully opened database: %s\n", path); | |
154 | 152 |
155 return true; | 153 return true; |
156 } | 154 } |
157 | 155 |
158 bool | 156 bool |
162 assert(max); | 160 assert(max); |
163 | 161 |
164 sqlite3_stmt *stmt = NULL; | 162 sqlite3_stmt *stmt = NULL; |
165 | 163 |
166 memset(pastes, 0, *max * sizeof (struct paste)); | 164 memset(pastes, 0, *max * sizeof (struct paste)); |
165 log_debug("database: accessing most recents"); | |
167 | 166 |
168 if (sqlite3_prepare(db, sql_recents, -1, &stmt, NULL) != SQLITE_OK || | 167 if (sqlite3_prepare(db, sql_recents, -1, &stmt, NULL) != SQLITE_OK || |
169 sqlite3_bind_int64(stmt, 1, *max) != SQLITE_OK) | 168 sqlite3_bind_int64(stmt, 1, *max) != SQLITE_OK) |
170 goto sqlite_err; | 169 goto sqlite_err; |
171 | 170 |
172 size_t i = 0; | 171 size_t i = 0; |
173 | 172 |
174 for (; i < *max && sqlite3_step(stmt) == SQLITE_ROW; ++i) | 173 for (; i < *max && sqlite3_step(stmt) == SQLITE_ROW; ++i) |
175 convert(stmt, &pastes[i]); | 174 convert(stmt, &pastes[i]); |
176 | 175 |
176 log_debug("database: found %zu pastes", i); | |
177 sqlite3_finalize(stmt); | 177 sqlite3_finalize(stmt); |
178 *max = i; | 178 *max = i; |
179 | 179 |
180 | |
180 return true; | 181 return true; |
181 | 182 |
182 sqlite_err: | 183 sqlite_err: |
183 log_warn("database error (recents): %s\n", sqlite3_errmsg(db)); | 184 log_warn("database: error (recents): %s\n", sqlite3_errmsg(db)); |
184 | 185 |
185 if (stmt) | 186 if (stmt) |
186 sqlite3_finalize(stmt); | 187 sqlite3_finalize(stmt); |
187 | 188 |
188 return (*max = 0); | 189 return (*max = 0); |
193 { | 194 { |
194 assert(paste); | 195 assert(paste); |
195 assert(uuid); | 196 assert(uuid); |
196 | 197 |
197 memset(paste, 0, sizeof (struct paste)); | 198 memset(paste, 0, sizeof (struct paste)); |
199 log_debug("database: accessing paste with uuid: %s", uuid); | |
198 | 200 |
199 sqlite3_stmt* stmt = NULL; | 201 sqlite3_stmt* stmt = NULL; |
200 | 202 |
201 if (sqlite3_prepare(db, sql_get, -1, &stmt, NULL) != SQLITE_OK || | 203 if (sqlite3_prepare(db, sql_get, -1, &stmt, NULL) != SQLITE_OK || |
202 sqlite3_bind_text(stmt, 1, uuid, -1, NULL) != SQLITE_OK) | 204 sqlite3_bind_text(stmt, 1, uuid, -1, NULL) != SQLITE_OK) |
219 | 221 |
220 sqlite_err: | 222 sqlite_err: |
221 if (stmt) | 223 if (stmt) |
222 sqlite3_finalize(stmt); | 224 sqlite3_finalize(stmt); |
223 | 225 |
224 log_warn("database error (get): %s", sqlite3_errmsg(db)); | 226 log_warn("database: error (get): %s", sqlite3_errmsg(db)); |
225 | 227 |
226 return false; | 228 return false; |
227 } | 229 } |
228 | 230 |
229 bool | 231 bool |
230 database_insert(struct paste *paste) | 232 database_insert(struct paste *paste) |
231 { | 233 { |
232 assert(paste); | 234 assert(paste); |
233 | 235 |
234 sqlite3_stmt* stmt = NULL; | 236 sqlite3_stmt* stmt = NULL; |
237 log_debug("database: creating new paste"); | |
235 | 238 |
236 if (sqlite3_exec(db, "BEGIN EXCLUSIVE TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) { | 239 if (sqlite3_exec(db, "BEGIN EXCLUSIVE TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) { |
237 log_warn("could not lock database: %s\n", sqlite3_errmsg(db)); | 240 log_warn("database: could not lock database: %s", sqlite3_errmsg(db)); |
238 return false; | 241 return false; |
239 } | 242 } |
240 | 243 |
241 if (sqlite3_prepare(db, sql_insert, -1, &stmt, NULL) != SQLITE_OK) | 244 if (sqlite3_prepare(db, sql_insert, -1, &stmt, NULL) != SQLITE_OK) |
242 goto sqlite_err; | 245 goto sqlite_err; |
256 goto sqlite_err; | 259 goto sqlite_err; |
257 | 260 |
258 sqlite3_exec(db, "COMMIT", NULL, NULL, NULL); | 261 sqlite3_exec(db, "COMMIT", NULL, NULL, NULL); |
259 sqlite3_finalize(stmt); | 262 sqlite3_finalize(stmt); |
260 | 263 |
261 log_debug("new paste (%s) from %s expires in one %lld seconds", | 264 log_info("database: new paste (%s) from %s expires in one %lld seconds", |
262 paste->uuid, paste->author, paste->duration); | 265 paste->uuid, paste->author, paste->duration); |
263 | 266 |
264 return true; | 267 return true; |
265 | 268 |
266 sqlite_err: | 269 sqlite_err: |
267 log_warn("database error (insert): %s", sqlite3_errmsg(db)); | 270 log_warn("database: error (insert): %s", sqlite3_errmsg(db)); |
268 sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL); | 271 sqlite3_exec(db, "ROLLBACK", NULL, NULL, NULL); |
269 | 272 |
270 if (stmt) | 273 if (stmt) |
271 sqlite3_finalize(stmt); | 274 sqlite3_finalize(stmt); |
272 | 275 |
277 } | 280 } |
278 | 281 |
279 void | 282 void |
280 database_clear(void) | 283 database_clear(void) |
281 { | 284 { |
285 log_debug("database: clearing deprecated pastes"); | |
286 | |
282 if (sqlite3_exec(db, sql_clear, NULL, NULL, NULL) != SQLITE_OK) | 287 if (sqlite3_exec(db, sql_clear, NULL, NULL, NULL) != SQLITE_OK) |
283 log_warn("database error (clear): %s\n", sqlite3_errmsg(db)); | 288 log_warn("database: error (clear): %s\n", sqlite3_errmsg(db)); |
284 } | 289 } |
285 | 290 |
286 void | 291 void |
287 database_finish(void) | 292 database_finish(void) |
288 { | 293 { |
289 if (db) | 294 log_debug("database: closing"); |
295 | |
296 if (db) { | |
290 sqlite3_close(db); | 297 sqlite3_close(db); |
291 } | 298 db = NULL; |
299 } | |
300 } |