mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-18 11:46:23 -07:00
Fully refactor all (or at least most) uses of ExecSQL, QuerySQL, and QueryRowSQL, QueryContextSQL, etc with their replacement functions
This commit is contained in:
parent
10e0da4492
commit
7ceda2b218
17 changed files with 79 additions and 52 deletions
|
@ -88,7 +88,7 @@ func RunSQLFile(path string, db *gcsql.GCDB) error {
|
|||
for _, statement := range sqlArr {
|
||||
statement = strings.TrimSpace(statement)
|
||||
if len(statement) > 0 {
|
||||
if _, err = db.ExecSQL(statement); err != nil {
|
||||
if _, err = db.Exec(nil, statement); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ func (dbu *GCDatabaseUpdater) Init(options *common.MigrationOptions) error {
|
|||
|
||||
func (dbu *GCDatabaseUpdater) IsMigrated() (bool, error) {
|
||||
var currentDatabaseVersion int
|
||||
err := dbu.db.QueryRowSQL(`SELECT version FROM DBPREFIXdatabase_version WHERE component = 'gochan'`, nil,
|
||||
err := dbu.db.QueryRow(nil, "SELECT version FROM DBPREFIXdatabase_version WHERE component = 'gochan'", nil,
|
||||
[]any{¤tDatabaseVersion})
|
||||
if err != nil {
|
||||
return false, err
|
||||
|
|
|
@ -16,7 +16,7 @@ func (m *Pre2021Migrator) MigrateAnnouncements() error {
|
|||
errEv := common.LogError()
|
||||
defer errEv.Discard()
|
||||
|
||||
rows, err := m.db.QuerySQL(announcementsQuery)
|
||||
rows, err := m.db.Query(nil, announcementsQuery)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get announcements")
|
||||
return err
|
||||
|
@ -49,7 +49,7 @@ func (m *Pre2021Migrator) MigrateAnnouncements() error {
|
|||
errEv.Err(err).Caller().Str("staff", announcement.oldPoster).Msg("Failed to get staff ID")
|
||||
return err
|
||||
}
|
||||
if _, err = gcsql.ExecSQL(
|
||||
if _, err = gcsql.Exec(nil,
|
||||
"INSERT INTO DBPREFIXannouncements(staff_id,subject,message,timestamp) values(?,?,?,?)",
|
||||
announcement.StaffID, announcement.Subject, announcement.Message, announcement.Timestamp,
|
||||
); err != nil {
|
||||
|
|
|
@ -27,6 +27,6 @@ func TestMigrateAnnouncements(t *testing.T) {
|
|||
}
|
||||
|
||||
var numAnnouncements int
|
||||
assert.NoError(t, gcsql.QueryRowSQL("SELECT COUNT(*) FROM DBPREFIXannouncements WHERE staff_id > 0", nil, []any{&numAnnouncements}))
|
||||
assert.NoError(t, gcsql.QueryRow(nil, "SELECT COUNT(*) FROM DBPREFIXannouncements WHERE staff_id > 0", nil, []any{&numAnnouncements}))
|
||||
assert.Equal(t, 2, numAnnouncements, "Expected to have two announcement")
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ func (m *Pre2021Migrator) migrateBansInPlace() error {
|
|||
for _, stmt := range statements {
|
||||
stmt = strings.TrimSpace(stmt)
|
||||
if strings.HasPrefix(stmt, "CREATE TABLE DBPREFIXip_ban") || strings.HasPrefix(stmt, "CREATE TABLE DBPREFIXfilter") {
|
||||
_, err = gcsql.ExecSQL(stmt)
|
||||
_, err = gcsql.Exec(nil, stmt)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().
|
||||
Str("statement", stmt).
|
||||
|
@ -99,7 +99,7 @@ func (m *Pre2021Migrator) migrateBansToNewDB() error {
|
|||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
rows, err := m.db.QuerySQL(bansQuery)
|
||||
rows, err := m.db.Query(nil, bansQuery)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get bans")
|
||||
return err
|
||||
|
|
|
@ -42,7 +42,7 @@ func validateBanMigration(t *testing.T) {
|
|||
assert.NotZero(t, bans[0].StaffID, "Expected ban staff ID field to be set")
|
||||
|
||||
var numInvalidBans int
|
||||
assert.NoError(t, gcsql.QueryRowSQL("SELECT COUNT(*) FROM DBPREFIXip_ban WHERE message = ?", []any{"Full ban on 8.8.0.0/16"}, []any{&numInvalidBans}))
|
||||
assert.NoError(t, gcsql.QueryRow(nil, "SELECT COUNT(*) FROM DBPREFIXip_ban WHERE message = ?", []any{"Full ban on 8.8.0.0/16"}, []any{&numInvalidBans}))
|
||||
assert.Equal(t, 0, numInvalidBans, "Expected the invalid test to not be migrated")
|
||||
|
||||
filters, err := gcsql.GetAllFilters(gcsql.TrueOrFalse)
|
||||
|
|
|
@ -19,7 +19,7 @@ func TestMigratePosts(t *testing.T) {
|
|||
}
|
||||
|
||||
var numThreads int
|
||||
if !assert.NoError(t, migrator.db.QueryRowSQL("SELECT COUNT(*) FROM DBPREFIXposts WHERE parentid = 0 AND deleted_timestamp IS NULL", nil, []any{&numThreads}), "Failed to get number of threads") {
|
||||
if !assert.NoError(t, migrator.db.QueryRow(nil, "SELECT COUNT(*) FROM DBPREFIXposts WHERE parentid = 0 AND deleted_timestamp IS NULL", nil, []any{&numThreads}), "Failed to get number of threads") {
|
||||
t.FailNow()
|
||||
}
|
||||
assert.Equal(t, 2, numThreads, "Expected to have two threads pre-migration")
|
||||
|
@ -32,27 +32,27 @@ func TestMigratePosts(t *testing.T) {
|
|||
|
||||
func validatePostMigration(t *testing.T) {
|
||||
var numThreads int
|
||||
if !assert.NoError(t, gcsql.QueryRowSQL("SELECT COUNT(*) FROM DBPREFIXthreads", nil, []any{&numThreads}), "Failed to get number of threads") {
|
||||
if !assert.NoError(t, gcsql.QueryRow(nil, "SELECT COUNT(*) FROM DBPREFIXthreads", nil, []any{&numThreads}), "Failed to get number of threads") {
|
||||
t.FailNow()
|
||||
}
|
||||
assert.Equal(t, 2, numThreads, "Expected to have two threads pre-migration")
|
||||
|
||||
var numUploadPosts int
|
||||
assert.NoError(t, gcsql.QueryRowSQL("SELECT COUNT(*) FROM DBPREFIXfiles", nil, []any{&numUploadPosts}))
|
||||
assert.NoError(t, gcsql.QueryRow(nil, "SELECT COUNT(*) FROM DBPREFIXfiles", nil, []any{&numUploadPosts}))
|
||||
assert.Equal(t, 1, numUploadPosts, "Expected to have 1 upload post")
|
||||
|
||||
var ip string
|
||||
assert.NoError(t, gcsql.QueryRowSQL("SELECT IP_NTOA FROM DBPREFIXposts WHERE id = 1", nil, []any{&ip}))
|
||||
assert.NoError(t, gcsql.QueryRow(nil, "SELECT IP_NTOA FROM DBPREFIXposts WHERE id = 1", nil, []any{&ip}))
|
||||
assert.Equal(t, "192.168.56.1", ip, "Expected to have the correct IP address")
|
||||
|
||||
var numMigratedThreads int
|
||||
if !assert.NoError(t, gcsql.QueryRowSQL("SELECT COUNT(*) FROM DBPREFIXthreads", nil, []any{&numMigratedThreads}), "Failed to get number of migrated threads") {
|
||||
if !assert.NoError(t, gcsql.QueryRow(nil, "SELECT COUNT(*) FROM DBPREFIXthreads", nil, []any{&numMigratedThreads}), "Failed to get number of migrated threads") {
|
||||
t.FailNow()
|
||||
}
|
||||
assert.Equal(t, 2, numMigratedThreads, "Expected to have three migrated threads")
|
||||
|
||||
var locked bool
|
||||
if !assert.NoError(t, gcsql.QueryRowSQL("SELECT locked FROM DBPREFIXthreads WHERE id = 1", nil, []any{&locked})) {
|
||||
if !assert.NoError(t, gcsql.QueryRow(nil, "SELECT locked FROM DBPREFIXthreads WHERE id = 1", nil, []any{&locked})) {
|
||||
t.FailNow()
|
||||
}
|
||||
assert.True(t, locked, "Expected thread ID 1 to be locked")
|
||||
|
|
|
@ -72,12 +72,12 @@ func (m *Pre2021Migrator) renameTablesForInPlace() error {
|
|||
var err error
|
||||
errEv := common.LogError()
|
||||
defer errEv.Discard()
|
||||
if _, err = m.db.ExecSQL("DROP TABLE DBPREFIXinfo"); err != nil {
|
||||
if _, err = m.db.Exec(nil, "DROP TABLE DBPREFIXinfo"); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Error dropping info table")
|
||||
return err
|
||||
}
|
||||
for _, table := range renameTables {
|
||||
if _, err = m.db.ExecSQL(fmt.Sprintf(renameTableStatementTemplate, table, table)); err != nil {
|
||||
if _, err = m.db.Exec(nil, fmt.Sprintf(renameTableStatementTemplate, table, table)); err != nil {
|
||||
errEv.Caller().Err(err).
|
||||
Str("table", table).
|
||||
Msg("Error renaming table")
|
||||
|
|
|
@ -26,13 +26,13 @@ func (m *Pre2021Migrator) getMigrationUser(errEv *zerolog.Event) (*gcsql.Staff,
|
|||
Username: "pre2021-migration" + gcutil.RandomString(8),
|
||||
AddedOn: time.Now(),
|
||||
}
|
||||
_, err := gcsql.ExecSQL("INSERT INTO DBPREFIXstaff(username,password_checksum,global_rank,is_active) values(?,'',0,0)", user.Username)
|
||||
_, err := gcsql.Exec(nil, "INSERT INTO DBPREFIXstaff(username,password_checksum,global_rank,is_active) values(?,'',0,0)", user.Username)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Str("username", user.Username).Msg("Failed to create migration user")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = gcsql.QueryRowSQL("SELECT id FROM DBPREFIXstaff WHERE username = ?", []any{user.Username}, []any{&user.ID}); err != nil {
|
||||
if err = gcsql.QueryRow(nil, "SELECT id FROM DBPREFIXstaff WHERE username = ?", []any{user.Username}, []any{&user.ID}); err != nil {
|
||||
errEv.Err(err).Caller().Str("username", user.Username).Msg("Failed to get migration user ID")
|
||||
return nil, err
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ func (m *Pre2021Migrator) MigrateStaff() error {
|
|||
return err
|
||||
}
|
||||
|
||||
rows, err := m.db.QuerySQL(staffQuery)
|
||||
rows, err := m.db.Query(nil, staffQuery)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get ban rows")
|
||||
return err
|
||||
|
@ -73,7 +73,7 @@ func (m *Pre2021Migrator) MigrateStaff() error {
|
|||
staff.ID = newStaff.ID
|
||||
} else if errors.Is(err, gcsql.ErrUnrecognizedUsername) {
|
||||
// staff doesn't exist, create it (with invalid checksum to be updated by the admin)
|
||||
if _, err := gcsql.ExecSQL(
|
||||
if _, err := gcsql.Exec(nil,
|
||||
"INSERT INTO DBPREFIXstaff(username,password_checksum,global_rank,added_on,last_login,is_active) values(?,'',?,?,?,1)",
|
||||
staff.Username, staff.Rank, staff.AddedOn, staff.LastLogin,
|
||||
); err != nil {
|
||||
|
@ -102,7 +102,7 @@ func (m *Pre2021Migrator) MigrateStaff() error {
|
|||
Msg("Failed to get board ID")
|
||||
return err
|
||||
}
|
||||
if _, err = gcsql.ExecSQL("INSERT INTO DBPREFIXboard_staff(board_id,staff_id) VALUES(?,?)", boardID, staff.ID); err != nil {
|
||||
if _, err = gcsql.Exec(nil, "INSERT INTO DBPREFIXboard_staff(board_id,staff_id) VALUES(?,?)", boardID, staff.ID); err != nil {
|
||||
errEv.Err(err).Caller().
|
||||
Str("username", staff.Username).
|
||||
Str("board", board).
|
||||
|
|
|
@ -125,16 +125,19 @@ func getAllPostsToDelete(postIDs []any, fileOnly bool) ([]delPost, []any, error)
|
|||
query = "SELECT post_id, thread_id, op_id, is_top_post, filename, dir FROM DBPREFIXv_posts_to_delete WHERE post_id IN " +
|
||||
setPart + " OR thread_id IN (SELECT thread_id from DBPREFIXposts op WHERE op_id IN " + setPart + " AND is_top_post)"
|
||||
}
|
||||
rows, err := gcsql.QuerySQL(query, params...)
|
||||
rows, cancel, err := gcsql.QueryTimeoutSQL(nil, query, params...)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
defer func() {
|
||||
rows.Close()
|
||||
cancel()
|
||||
}()
|
||||
var posts []delPost
|
||||
var postIDsAny []any
|
||||
for rows.Next() {
|
||||
var post delPost
|
||||
if err = rows.Scan(&post.postID, &post.threadID, &post.opID, &post.isOP, &post.filename, &post.boardDir); err != nil {
|
||||
rows.Close()
|
||||
return nil, nil, err
|
||||
}
|
||||
posts = append(posts, post)
|
||||
|
@ -258,7 +261,7 @@ func validatePostPasswords(posts []any, passwordMD5 string) (bool, error) {
|
|||
params = append(params, posts[p])
|
||||
}
|
||||
|
||||
err := gcsql.QueryRowSQL(queryPosts, params, []any{&count})
|
||||
err := gcsql.QueryRow(nil, queryPosts, params, []any{&count})
|
||||
return count == len(posts), err
|
||||
}
|
||||
|
||||
|
@ -281,21 +284,24 @@ func markPostsAsDeleted(posts []any, request *http.Request, writer http.Response
|
|||
defer cancel()
|
||||
|
||||
tx, err := gcsql.BeginContextTx(ctx)
|
||||
opts := &gcsql.RequestOptions{Context: ctx, Tx: tx, Cancel: cancel}
|
||||
|
||||
wantsJSON := serverutil.IsRequestingJSON(request)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Unable to start deletion transaction")
|
||||
serveError(writer, "Unable to delete posts", http.StatusInternalServerError, wantsJSON, errEv.Err(err).Caller())
|
||||
return false
|
||||
}
|
||||
defer tx.Rollback()
|
||||
const postsError = "Unable to mark post(s) as deleted"
|
||||
const threadsError = "Unable to mark thread(s) as deleted"
|
||||
if _, err = gcsql.ExecTxSQL(tx, deletePostsSQL, posts...); err != nil {
|
||||
const postsError = "Unable to delete post(s)"
|
||||
const threadsError = "Unable to delete thread(s)"
|
||||
if _, err = gcsql.Exec(opts, deletePostsSQL, posts...); err != nil {
|
||||
serveError(writer, postsError, http.StatusInternalServerError, wantsJSON, errEv.Err(err).Caller())
|
||||
return false
|
||||
}
|
||||
|
||||
if _, err = gcsql.ExecTxSQL(tx, deleteThreadSQL, posts...); err != nil {
|
||||
if _, err = gcsql.Exec(opts, deleteThreadSQL, posts...); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Unable to mark thread(s) as deleted")
|
||||
serveError(writer, threadsError, http.StatusInternalServerError, wantsJSON, errEv.Err(err).Caller())
|
||||
return false
|
||||
}
|
||||
|
@ -351,7 +357,7 @@ func deletePostFiles(posts []delPost, deleteIDs []any, permDelete bool, request
|
|||
http.StatusInternalServerError, wantsJSON, errEv.Array("errors", errArr))
|
||||
return false
|
||||
}
|
||||
_, err = gcsql.ExecSQL(deleteFilesSQL, deleteIDs...)
|
||||
_, err = gcsql.ExecTimeoutSQL(nil, deleteFilesSQL, deleteIDs...)
|
||||
if err != nil {
|
||||
serveError(writer, "Unable to delete file entries from database",
|
||||
http.StatusInternalServerError, wantsJSON, errEv.Err(err).Caller())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue