diff 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
line wrap: on
line diff
--- a/src/libmlk-rpg/rpg/save.c	Mon Oct 04 13:30:09 2021 +0200
+++ b/src/libmlk-rpg/rpg/save.c	Wed Oct 06 13:54:16 2021 +0200
@@ -210,10 +210,10 @@
 save_exec(struct save *db, const char *sql, const char *args, ...)
 {
 	assert(save_ok(db));
-	assert(sql && args);
+	assert(sql);
 
 	struct save_stmt stmt;
-	int ret;
+	enum save_stmt_errno ret;
 	va_list ap;
 
 	va_start(ap, args);
@@ -226,7 +226,7 @@
 	ret = save_stmt_next(&stmt, NULL);
 	save_stmt_finish(&stmt);
 
-	return ret;
+	return ret == SAVE_STMT_ERROR ? -1 : 0;
 }
 
 void
@@ -278,6 +278,7 @@
 		ret = SAVE_STMT_DONE;
 		break;
 	default:
+		errorf("%s", sqlite3_errmsg(stmt->parent->handle));
 		break;
 	}
 
@@ -292,3 +293,27 @@
 	sqlite3_finalize(stmt->handle);
 	memset(stmt, 0, sizeof (*stmt));
 }
+
+int
+save_tx_begin(struct save *s)
+{
+	assert(save_ok(s));
+
+	return save_exec(s, "BEGIN EXCLUSIVE TRANSACTION", NULL);
+}
+
+void
+save_tx_rollback(struct save *s)
+{
+	assert(save_ok(s));
+
+	(void)save_exec(s, "ROLLBACK", NULL);
+}
+
+void
+save_tx_commit(struct save *s)
+{
+	assert(save_ok(s));
+
+	(void)save_exec(s, "COMMIT", NULL);
+}