aboutsummaryrefslogtreecommitdiff
path: root/src/db.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.c')
-rw-r--r--src/db.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/db.c b/src/db.c
index c52d763..0de40ea 100644
--- a/src/db.c
+++ b/src/db.c
@@ -8,6 +8,7 @@
#include "auth.h"
#include "config.h"
#include "log.h"
+#include "seed.h"
#include "util.h"
static const char SCHEMA_V1[] =
@@ -336,6 +337,31 @@ int db_migrate(sqlite3 *db, char **err)
}
/* Forward-only upgrades for existing databases. */
+
+/* v3: the moms starter rules missed 33xx sales, sent 2614 to box 10 and
+ had box 48 with the wrong sign. Rules were never editable, so replace
+ them with the corrected defaults for every org. */
+static int db_upgrade_v3(sqlite3 *db, char **err)
+{
+ if (db_exec(db, "DELETE FROM report_rules WHERE report='vat'", err) != 0)
+ return -1;
+ sqlite3_stmt *st = NULL;
+ if (sqlite3_prepare_v2(db, "SELECT id FROM orgs", -1, &st, NULL) !=
+ SQLITE_OK) {
+ set_err(err, "database error");
+ return -1;
+ }
+ while (sqlite3_step(st) == SQLITE_ROW) {
+ int64_t id = sqlite3_column_int64(st, 0);
+ if (seed_vat_rules(db, id, err) != 0) {
+ sqlite3_finalize(st);
+ return -1;
+ }
+ }
+ sqlite3_finalize(st);
+ return 0;
+}
+
static int db_upgrade(sqlite3 *db, int from, char **err)
{
if (db_exec(db, "BEGIN IMMEDIATE", err) != 0)
@@ -344,6 +370,10 @@ static int db_upgrade(sqlite3 *db, int from, char **err)
db_exec(db, "ROLLBACK", NULL);
return -1;
}
+ if (from < 3 && db_upgrade_v3(db, err) != 0) {
+ db_exec(db, "ROLLBACK", NULL);
+ return -1;
+ }
char *sql = sqlite3_mprintf(
"UPDATE meta SET value='%d' WHERE key='schema_version'",
BOKF_SCHEMA_VERSION);