From 5de4d2086bba965333b2a70beeea532e9f2daece Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Thu, 9 Apr 2020 13:54:26 -0400 Subject: [PATCH 1/3] Optimize Drafts retrieval This adds a database index to speed up retrieval of Drafts. It is untested with SQLite. --- migrations/migrations.go | 1 + migrations/v8.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 migrations/v8.go diff --git a/migrations/migrations.go b/migrations/migrations.go index 31ae43c..da2a443 100644 --- a/migrations/migrations.go +++ b/migrations/migrations.go @@ -63,6 +63,7 @@ var migrations = []Migration{ New("support slack oauth", oauthSlack), // V4 -> v5 New("support ActivityPub mentions", supportActivityPubMentions), // V5 -> V6 New("support oauth attach", oauthAttach), // V6 -> V7 (v0.12.0) + New("optimize drafts retrieval", optimizeDrafts), // V7 -> V8 } // CurrentVer returns the current migration version the application is on diff --git a/migrations/v8.go b/migrations/v8.go new file mode 100644 index 0000000..5ef991f --- /dev/null +++ b/migrations/v8.go @@ -0,0 +1,29 @@ +/* + * Copyright © 2020 A Bunch Tell LLC. + * + * This file is part of WriteFreely. + * + * WriteFreely is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, included + * in the LICENSE file in this source code package. + */ + +package migrations + +func optimizeDrafts(db *datastore) error { + t, err := db.Begin() + + _, err = t.Exec(`ALTER TABLE posts ADD INDEX(owner_id, id)`) + if err != nil { + t.Rollback() + return err + } + + err = t.Commit() + if err != nil { + t.Rollback() + return err + } + + return nil +} From b9c467558c1a616d5a1bb3784e4e22c5402dad6f Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Wed, 6 May 2020 14:08:25 -0400 Subject: [PATCH 2/3] Return transaction Begin error in v9 migration --- migrations/v9.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/migrations/v9.go b/migrations/v9.go index 5ef991f..3766cbe 100644 --- a/migrations/v9.go +++ b/migrations/v9.go @@ -12,6 +12,10 @@ package migrations func optimizeDrafts(db *datastore) error { t, err := db.Begin() + if err != nil { + t.Rollback() + return err + } _, err = t.Exec(`ALTER TABLE posts ADD INDEX(owner_id, id)`) if err != nil { From 5fe1dd173172b9dd5eb87343ca680f4d5ba878dc Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Wed, 6 May 2020 14:08:48 -0400 Subject: [PATCH 3/3] Add SQLite query for v9 migration --- migrations/v9.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/migrations/v9.go b/migrations/v9.go index 3766cbe..c6b832e 100644 --- a/migrations/v9.go +++ b/migrations/v9.go @@ -17,7 +17,11 @@ func optimizeDrafts(db *datastore) error { return err } - _, err = t.Exec(`ALTER TABLE posts ADD INDEX(owner_id, id)`) + if db.driverName == driverSQLite { + _, err = t.Exec(`CREATE INDEX key_owner_post_id ON posts (owner_id, id)`) + } else { + _, err = t.Exec(`ALTER TABLE posts ADD INDEX(owner_id, id)`) + } if err != nil { t.Rollback() return err