mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-18 11:46:23 -07:00
Fix database locked error in announcement migration
This commit is contained in:
parent
cbd1dd8a99
commit
a38a519e4e
3 changed files with 22 additions and 31 deletions
|
@ -2,12 +2,16 @@ package pre2021
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/gochan-org/gochan/cmd/gochan-migration/internal/common"
|
||||
"github.com/gochan-org/gochan/pkg/gcsql"
|
||||
)
|
||||
|
||||
type migrationAnnouncement struct {
|
||||
gcsql.Announcement
|
||||
oldPoster string
|
||||
}
|
||||
|
||||
func (m *Pre2021Migrator) MigrateAnnouncements() error {
|
||||
errEv := common.LogError()
|
||||
defer errEv.Discard()
|
||||
|
@ -23,29 +27,33 @@ func (m *Pre2021Migrator) MigrateAnnouncements() error {
|
|||
return err
|
||||
}
|
||||
|
||||
var oldAnnouncements []migrationAnnouncement
|
||||
|
||||
for rows.Next() {
|
||||
var id int
|
||||
var subject, message, staff string
|
||||
var timestamp time.Time
|
||||
if err = rows.Scan(&id, &subject, &message, &staff, ×tamp); err != nil {
|
||||
var announcement migrationAnnouncement
|
||||
|
||||
if err = rows.Scan(&announcement.ID, &announcement.Subject, &announcement.Message, &announcement.oldPoster, &announcement.Timestamp); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to scan announcement row")
|
||||
return err
|
||||
}
|
||||
staffID, err := gcsql.GetStaffID(staff)
|
||||
oldAnnouncements = append(oldAnnouncements, announcement)
|
||||
}
|
||||
for _, announcement := range oldAnnouncements {
|
||||
announcement.StaffID, err = gcsql.GetStaffID(announcement.oldPoster)
|
||||
if errors.Is(err, gcsql.ErrUnrecognizedUsername) {
|
||||
// user doesn't exist, use migration user
|
||||
common.LogWarning().Str("staff", staff).Msg("Staff username not found in database")
|
||||
message += "\n(originally by " + staff + ")"
|
||||
staffID = m.migrationUser.ID
|
||||
common.LogWarning().Str("staff", announcement.oldPoster).Msg("Staff username not found in database")
|
||||
announcement.Message += "\n(originally by " + announcement.oldPoster + ")"
|
||||
announcement.StaffID = m.migrationUser.ID
|
||||
} else if err != nil {
|
||||
errEv.Err(err).Caller().Str("staff", staff).Msg("Failed to get staff ID")
|
||||
errEv.Err(err).Caller().Str("staff", announcement.oldPoster).Msg("Failed to get staff ID")
|
||||
return err
|
||||
}
|
||||
if _, err = gcsql.ExecSQL(
|
||||
"INSERT INTO DBPREFIXannouncements(staff_id,subject,message,timestamp) values(?,?,?,?)",
|
||||
staffID, subject, message, timestamp,
|
||||
announcement.StaffID, announcement.Subject, announcement.Message, announcement.Timestamp,
|
||||
); err != nil {
|
||||
errEv.Err(err).Caller().Str("staff", staff).Msg("Failed to migrate announcement")
|
||||
errEv.Err(err).Caller().Str("staff", announcement.oldPoster).Msg("Failed to migrate announcement")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,23 +25,6 @@ timestamp, expires, permaban, reason, type, staff_note, appeal_at, can_appeal FR
|
|||
)
|
||||
|
||||
var (
|
||||
boardAlterStatements = []string{
|
||||
"ALTER TABLE DBPREFIXboards RENAME COLUMN section TO section_id",
|
||||
"ALTER TABLE DBPREFIXboards RENAME COLUMN list_order TO navbar_position",
|
||||
"ALTER TABLE DBPREFIXboards RENAME COLUMN created_on TO created_at",
|
||||
"ALTER TABLE DBPREFIXboards RENAME COLUMN anonymous TO anonymous_name",
|
||||
"ALTER TABLE DBPREFIXboards RENAME COLUMN forced_anon TO force_anonymous",
|
||||
"ALTER TABLE DBPREFIXboards RENAME COLUMN embeds_allowed TO allow_embeds",
|
||||
"ALTER TABLE DBPREFIXboards ADD COLUMN uri VARCHAR(45) NOT NULL DEFAULT ''",
|
||||
"ALTER TABLE DBPREFIXboards ADD COLUMN min_message_length SMALLINT NOT NULL DEFAULT 0",
|
||||
"ALTER TABLE DBPREFIXboards ADD COLUMN max_threads SMALLINT NOT NULL DEFAULT 65535",
|
||||
// the following statements don't work in SQLite since it doesn't support adding foreign keys after table creation.
|
||||
// "in-place" migration support for SQLite may be removed
|
||||
"ALTER TABLE DBPREFIXboards ADD CONSTRAINT boards_section_id_fk FOREIGN KEY (section_id) REFERENCES DBPREFIXsections(id)",
|
||||
"ALTER TABLE DBPREFIXboards ADD CONSTRAINT boards_dir_unique UNIQUE (dir)",
|
||||
"ALTER TABLE DBPREFIXboards ADD CONSTRAINT boards_uri_unique UNIQUE (uri)",
|
||||
}
|
||||
|
||||
// tables to be renamed to _tmp_DBPREFIX* to work around SQLite's lack of support for changing/removing columns
|
||||
renameTables = []string{
|
||||
"DBPREFIXannouncements", "DBPREFIXappeals", "DBPREFIXbanlist", "DBPREFIXboards", "DBPREFIXembeds", "DBPREFIXlinks",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue