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 }