X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fdb.cpp;h=4da0a0a89becb427a0c4991e632c47e76cf30c3e;hb=f16a3d114562ca32e9416948a245905ca34465ee;hp=33d88d4f369e2819a585a32fb771f99d8ffccef8;hpb=6a2b68fa99bfd87e9b67edddef025b53188633ae;p=nageru diff --git a/futatabi/db.cpp b/futatabi/db.cpp index 33d88d4..4da0a0a 100644 --- a/futatabi/db.cpp +++ b/futatabi/db.cpp @@ -20,11 +20,15 @@ DB::DB(const string &filename) )", nullptr, nullptr, nullptr); // Ignore errors. + sqlite3_exec(db, "CREATE UNIQUE INDEX only_one_state ON state (1);", nullptr, nullptr, nullptr); // Ignore errors. + sqlite3_exec(db, R"( - CREATE TABLE IF NOT EXISTS settings (settings BLOB); + CREATE TABLE IF NOT EXISTS settings (settings BLOB, uniqifier NOT NULL DEFAULT 1 UNIQUE); )", nullptr, nullptr, nullptr); // Ignore errors. + sqlite3_exec(db, "CREATE UNIQUE INDEX only_one_settings ON settings (1);", nullptr, nullptr, nullptr); // Ignore errors. + sqlite3_exec(db, R"( DROP TABLE file; )", @@ -92,16 +96,10 @@ void DB::store_state(const StateProto &state) exit(1); } - ret = sqlite3_exec(db, "DELETE FROM state", nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - fprintf(stderr, "DELETE: %s\n", sqlite3_errmsg(db)); - exit(1); - } - sqlite3_stmt *stmt; - ret = sqlite3_prepare_v2(db, "INSERT INTO state VALUES (?)", -1, &stmt, 0); + ret = sqlite3_prepare_v2(db, "REPLACE INTO state VALUES (?)", -1, &stmt, 0); if (ret != SQLITE_OK) { - fprintf(stderr, "INSERT prepare: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "REPLACE prepare: %s\n", sqlite3_errmsg(db)); exit(1); } @@ -109,13 +107,13 @@ void DB::store_state(const StateProto &state) ret = sqlite3_step(stmt); if (ret == SQLITE_ROW) { - fprintf(stderr, "INSERT step: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "REPLACE step: %s\n", sqlite3_errmsg(db)); exit(1); } ret = sqlite3_finalize(stmt); if (ret != SQLITE_OK) { - fprintf(stderr, "INSERT finalize: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "REPLACE finalize: %s\n", sqlite3_errmsg(db)); exit(1); } @@ -169,16 +167,10 @@ void DB::store_settings(const SettingsProto &settings) exit(1); } - ret = sqlite3_exec(db, "DELETE FROM settings", nullptr, nullptr, nullptr); - if (ret != SQLITE_OK) { - fprintf(stderr, "DELETE: %s\n", sqlite3_errmsg(db)); - exit(1); - } - sqlite3_stmt *stmt; - ret = sqlite3_prepare_v2(db, "INSERT INTO settings VALUES (?)", -1, &stmt, 0); + ret = sqlite3_prepare_v2(db, "REPLACE INTO settings VALUES (?)", -1, &stmt, 0); if (ret != SQLITE_OK) { - fprintf(stderr, "INSERT prepare: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "REPLACE prepare: %s\n", sqlite3_errmsg(db)); exit(1); } @@ -186,13 +178,13 @@ void DB::store_settings(const SettingsProto &settings) ret = sqlite3_step(stmt); if (ret == SQLITE_ROW) { - fprintf(stderr, "INSERT step: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "REPLACE step: %s\n", sqlite3_errmsg(db)); exit(1); } ret = sqlite3_finalize(stmt); if (ret != SQLITE_OK) { - fprintf(stderr, "INSERT finalize: %s\n", sqlite3_errmsg(db)); + fprintf(stderr, "REPLACE finalize: %s\n", sqlite3_errmsg(db)); exit(1); } @@ -299,13 +291,13 @@ void DB::store_frame_file(const string &filename, size_t size, const vector