comparison src/libmlk-rpg/rpg/save.c @ 330:e0657709fbe3

rpg: add support for basic quests
author David Demelier <markand@malikania.fr>
date Wed, 06 Oct 2021 13:54:16 +0200
parents ea4a3af71c18
children 7d7991f97acf
comparison
equal deleted inserted replaced
329:ea4a3af71c18 330:e0657709fbe3
208 208
209 int 209 int
210 save_exec(struct save *db, const char *sql, const char *args, ...) 210 save_exec(struct save *db, const char *sql, const char *args, ...)
211 { 211 {
212 assert(save_ok(db)); 212 assert(save_ok(db));
213 assert(sql && args); 213 assert(sql);
214 214
215 struct save_stmt stmt; 215 struct save_stmt stmt;
216 int ret; 216 enum save_stmt_errno ret;
217 va_list ap; 217 va_list ap;
218 218
219 va_start(ap, args); 219 va_start(ap, args);
220 ret = prepare(db, &stmt, sql, args, ap); 220 ret = prepare(db, &stmt, sql, args, ap);
221 va_end(ap); 221 va_end(ap);
224 return -1; 224 return -1;
225 225
226 ret = save_stmt_next(&stmt, NULL); 226 ret = save_stmt_next(&stmt, NULL);
227 save_stmt_finish(&stmt); 227 save_stmt_finish(&stmt);
228 228
229 return ret; 229 return ret == SAVE_STMT_ERROR ? -1 : 0;
230 } 230 }
231 231
232 void 232 void
233 save_finish(struct save *db) 233 save_finish(struct save *db)
234 { 234 {
276 break; 276 break;
277 case SQLITE_DONE: 277 case SQLITE_DONE:
278 ret = SAVE_STMT_DONE; 278 ret = SAVE_STMT_DONE;
279 break; 279 break;
280 default: 280 default:
281 errorf("%s", sqlite3_errmsg(stmt->parent->handle));
281 break; 282 break;
282 } 283 }
283 284
284 return ret; 285 return ret;
285 } 286 }
290 assert(stmt); 291 assert(stmt);
291 292
292 sqlite3_finalize(stmt->handle); 293 sqlite3_finalize(stmt->handle);
293 memset(stmt, 0, sizeof (*stmt)); 294 memset(stmt, 0, sizeof (*stmt));
294 } 295 }
296
297 int
298 save_tx_begin(struct save *s)
299 {
300 assert(save_ok(s));
301
302 return save_exec(s, "BEGIN EXCLUSIVE TRANSACTION", NULL);
303 }
304
305 void
306 save_tx_rollback(struct save *s)
307 {
308 assert(save_ok(s));
309
310 (void)save_exec(s, "ROLLBACK", NULL);
311 }
312
313 void
314 save_tx_commit(struct save *s)
315 {
316 assert(save_ok(s));
317
318 (void)save_exec(s, "COMMIT", NULL);
319 }