mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-09-13 09:26:23 -07:00
replace hacky interfaceSlice function in gcsql with []any{...}
This commit is contained in:
parent
48fc697f8e
commit
692602402c
11 changed files with 59 additions and 83 deletions
|
@ -74,11 +74,11 @@ func CheckIPBan(ip string, boardID int) (*IPBan, error) {
|
|||
(expires_at > CURRENT_TIMESTAMP OR permanent)
|
||||
ORDER BY id DESC LIMIT 1`
|
||||
var ban IPBan
|
||||
err := QueryRowSQL(query, interfaceSlice(ip, ip, boardID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{ip, ip, boardID}, []any{
|
||||
&ban.ID, &ban.StaffID, &ban.BoardID, &ban.BannedForPostID, &ban.CopyPostText,
|
||||
&ban.IsThreadBan, &ban.IsActive, &ban.RangeStart, &ban.RangeEnd, &ban.IssuedAt,
|
||||
&ban.AppealAt, &ban.ExpiresAt, &ban.Permanent, &ban.StaffNote, &ban.Message,
|
||||
&ban.CanAppeal))
|
||||
&ban.CanAppeal})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, nil
|
||||
} else if err != nil {
|
||||
|
@ -90,11 +90,11 @@ func CheckIPBan(ip string, boardID int) (*IPBan, error) {
|
|||
func GetIPBanByID(id int) (*IPBan, error) {
|
||||
const query = ipBanQueryBase + " WHERE id = ?"
|
||||
var ban IPBan
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{id}, []any{
|
||||
&ban.ID, &ban.StaffID, &ban.BoardID, &ban.BannedForPostID, &ban.CopyPostText,
|
||||
&ban.IsThreadBan, &ban.IsActive, &ban.RangeStart, &ban.RangeEnd, &ban.IssuedAt,
|
||||
&ban.AppealAt, &ban.ExpiresAt, &ban.Permanent, &ban.StaffNote, &ban.Message,
|
||||
&ban.CanAppeal))
|
||||
&ban.CanAppeal})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -428,9 +428,9 @@ func CheckFileChecksumBan(checksum string, boardID int) (*FileBan, error) {
|
|||
FROM DBPREFIXfile_ban
|
||||
WHERE checksum = ? AND (board_id IS NULL OR board_id = ?) ORDER BY id DESC LIMIT 1`
|
||||
var ban FileBan
|
||||
err := QueryRowSQL(query, interfaceSlice(checksum, boardID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{checksum, boardID}, []any{
|
||||
&ban.ID, &ban.BoardID, &ban.StaffID, &ban.StaffNote, &ban.IssuedAt, &ban.Checksum,
|
||||
))
|
||||
})
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ var (
|
|||
func DoesBoardExistByID(ID int) bool {
|
||||
const query = `SELECT COUNT(id) FROM DBPREFIXboards WHERE id = ?`
|
||||
var count int
|
||||
QueryRowSQL(query, interfaceSlice(ID), interfaceSlice(&count))
|
||||
QueryRowSQL(query, []any{ID}, []any{&count})
|
||||
return count > 0
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ func DoesBoardExistByID(ID int) bool {
|
|||
func DoesBoardExistByDir(dir string) bool {
|
||||
const query = `SELECT COUNT(dir) FROM DBPREFIXboards WHERE dir = ?`
|
||||
var count int
|
||||
QueryRowSQL(query, interfaceSlice(dir), interfaceSlice(&count))
|
||||
QueryRowSQL(query, []any{dir}, []any{&count})
|
||||
return count > 0
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,7 @@ func GetAllBoards(onlyNonHidden bool) ([]Board, error) {
|
|||
func GetBoardDir(id int) (string, error) {
|
||||
const query = `SELECT dir FROM DBPREFIXboards WHERE id = ?`
|
||||
var dir string
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(&dir))
|
||||
err := QueryRowSQL(query, []any{id}, []any{&dir})
|
||||
return dir, err
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,7 @@ func GetBoardDirFromPostID(postID int) (string, error) {
|
|||
WHERE posts.id = ?
|
||||
) as threads ON threads.board_id = board.id`
|
||||
var boardURI string
|
||||
err := QueryRowSQL(query, interfaceSlice(postID), interfaceSlice(&boardURI))
|
||||
err := QueryRowSQL(query, []any{postID}, []any{&boardURI})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
err = ErrBoardDoesNotExist
|
||||
}
|
||||
|
@ -109,13 +109,12 @@ func GetBoardDirFromPostID(postID int) (string, error) {
|
|||
func getBoardBase(where string, whereParameters []interface{}) (*Board, error) {
|
||||
query := selectBoardsBaseSQL + where
|
||||
board := new(Board)
|
||||
err := QueryRowSQL(query, whereParameters, interfaceSlice(
|
||||
err := QueryRowSQL(query, whereParameters, []any{
|
||||
&board.ID, &board.SectionID, &board.URI, &board.Dir, &board.NavbarPosition, &board.Title, &board.Subtitle,
|
||||
&board.Description, &board.MaxFilesize, &board.MaxThreads, &board.DefaultStyle, &board.Locked,
|
||||
&board.CreatedAt, &board.AnonymousName, &board.ForceAnonymous, &board.AutosageAfter, &board.NoImagesAfter,
|
||||
&board.MaxMessageLength, &board.MinMessageLength, &board.AllowEmbeds, &board.RedirectToThread, &board.RequireFile,
|
||||
&board.EnableCatalog,
|
||||
))
|
||||
&board.EnableCatalog})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, ErrBoardDoesNotExist
|
||||
}
|
||||
|
@ -124,18 +123,18 @@ func getBoardBase(where string, whereParameters []interface{}) (*Board, error) {
|
|||
|
||||
// GetBoardFromID returns the board corresponding to a given id
|
||||
func GetBoardFromID(id int) (*Board, error) {
|
||||
return getBoardBase("WHERE DBPREFIXboards.id = ?", interfaceSlice(id))
|
||||
return getBoardBase("WHERE DBPREFIXboards.id = ?", []any{id})
|
||||
}
|
||||
|
||||
// GetBoardFromDir returns the board corresponding to a given dir
|
||||
func GetBoardFromDir(dir string) (*Board, error) {
|
||||
return getBoardBase("WHERE DBPREFIXboards.dir = ?", interfaceSlice(dir))
|
||||
return getBoardBase("WHERE DBPREFIXboards.dir = ?", []any{dir})
|
||||
}
|
||||
|
||||
// GetIDFromDir returns the id of the board with the given dir value
|
||||
func GetBoardIDFromDir(dir string) (id int, err error) {
|
||||
const query = `SELECT id FROM DBPREFIXboards WHERE dir = ?`
|
||||
err = QueryRowSQL(query, interfaceSlice(dir), interfaceSlice(&id))
|
||||
err = QueryRowSQL(query, []any{dir}, []any{&id})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return 0, ErrBoardDoesNotExist
|
||||
}
|
||||
|
@ -259,10 +258,7 @@ func CreateBoard(board *Board, appendToAllBoards bool) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = QueryRowSQL(
|
||||
`SELECT id FROM DBPREFIXboards WHERE dir = ?`,
|
||||
interfaceSlice(board.Dir), interfaceSlice(&board.ID),
|
||||
); err != nil {
|
||||
if err = QueryRowSQL(`SELECT id FROM DBPREFIXboards WHERE dir = ?`, []any{board.Dir}, []any{&board.ID}); err != nil {
|
||||
return err
|
||||
}
|
||||
board.CreatedAt = time.Now()
|
||||
|
@ -276,7 +272,7 @@ func CreateBoard(board *Board, appendToAllBoards bool) error {
|
|||
func createDefaultBoardIfNoneExist() error {
|
||||
const query = `SELECT COUNT(id) FROM DBPREFIXboards`
|
||||
var count int
|
||||
QueryRowSQL(query, interfaceSlice(), interfaceSlice(&count))
|
||||
QueryRowSQL(query, nil, []any{&count})
|
||||
if count > 0 {
|
||||
return nil
|
||||
}
|
||||
|
@ -289,7 +285,7 @@ func createDefaultBoardIfNoneExist() error {
|
|||
func getBoardIDFromURI(uri string) (int, error) {
|
||||
const sql = `SELECT id FROM DBPREFIXboards WHERE uri = ?`
|
||||
var id int
|
||||
err := QueryRowSQL(sql, interfaceSlice(uri), interfaceSlice(&id))
|
||||
err := QueryRowSQL(sql, []any{uri}, []any{&id})
|
||||
return id, err
|
||||
}
|
||||
|
||||
|
|
|
@ -34,21 +34,6 @@ func setupSQLConfig(dbDriver string, dbName string, dbPrefix string) *config.SQL
|
|||
}
|
||||
}
|
||||
|
||||
func initMock(t *testing.T, dbDriver string) (sqlmock.Sqlmock, error) {
|
||||
t.Helper()
|
||||
err := Close()
|
||||
assert.NoError(t, err)
|
||||
|
||||
gcdb, err = setupDBConn(setupSQLConfig(dbDriver, "gochan", ""))
|
||||
if !assert.NoError(t, err) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var mock sqlmock.Sqlmock
|
||||
gcdb.db, mock, err = sqlmock.New()
|
||||
return mock, err
|
||||
}
|
||||
|
||||
func TestOpenMySQL(t *testing.T) {
|
||||
var err error
|
||||
gcdb, err = setupDBConn(setupSQLConfig("mysql", "gochan", ""))
|
||||
|
|
|
@ -38,12 +38,12 @@ func GetPostFromID(id int, onlyNotDeleted bool) (*Post, error) {
|
|||
query += " AND is_deleted = FALSE"
|
||||
}
|
||||
post := new(Post)
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{id}, []any{
|
||||
&post.ID, &post.ThreadID, &post.IsTopPost, &post.IP, &post.CreatedOn, &post.Name,
|
||||
&post.Tripcode, &post.IsRoleSignature, &post.Email, &post.Subject, &post.Message,
|
||||
&post.MessageRaw, &post.Password, &post.DeletedAt, &post.IsDeleted,
|
||||
&post.BannedMessage, &post.Flag, &post.Country,
|
||||
))
|
||||
})
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, ErrPostDoesNotExist
|
||||
|
||||
|
@ -93,7 +93,7 @@ func GetTopPostInThread(postID int) (int, error) {
|
|||
SELECT thread_id FROM DBPREFIXposts WHERE id = ?
|
||||
) AND is_top_post = TRUE ORDER BY id ASC LIMIT 1`
|
||||
var id int
|
||||
err := QueryRowSQL(query, interfaceSlice(postID), interfaceSlice(&id))
|
||||
err := QueryRowSQL(query, []any{postID}, []any{&id})
|
||||
return id, err
|
||||
}
|
||||
|
||||
|
@ -126,12 +126,12 @@ func GetTopPostIDsInThreadIDs(threads ...interface{}) (map[interface{}]int, erro
|
|||
func GetThreadTopPost(threadID int) (*Post, error) {
|
||||
const query = selectPostsBaseSQL + "WHERE thread_id = ? AND is_top_post = TRUE LIMIT 1"
|
||||
post := new(Post)
|
||||
err := QueryRowSQL(query, interfaceSlice(threadID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{threadID}, []any{
|
||||
&post.ID, &post.ThreadID, &post.IsTopPost, &post.IP, &post.CreatedOn, &post.Name,
|
||||
&post.Tripcode, &post.IsRoleSignature, &post.Email, &post.Subject, &post.Message,
|
||||
&post.MessageRaw, &post.Password, &post.DeletedAt, &post.IsDeleted,
|
||||
&post.BannedMessage, &post.Flag, &post.Country,
|
||||
))
|
||||
})
|
||||
return post, err
|
||||
}
|
||||
|
||||
|
@ -176,7 +176,7 @@ func GetBoardTopPosts(boardID int) ([]*Post, error) {
|
|||
func GetPostPassword(id int) (string, error) {
|
||||
const query = `SELECT password FROM DBPREFIXposts WHERE id = ?`
|
||||
var passwordChecksum string
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(&passwordChecksum))
|
||||
err := QueryRowSQL(query, []any{id}, []any{&passwordChecksum})
|
||||
return passwordChecksum, err
|
||||
}
|
||||
|
||||
|
@ -197,7 +197,7 @@ func PermanentlyRemoveDeletedPosts() error {
|
|||
func SinceLastPost(postIP string) (int, error) {
|
||||
const query = `SELECT COALESCE(MAX(created_on), '1970-01-01 00:00:00') FROM DBPREFIXposts WHERE ip = ?`
|
||||
var whenStr string
|
||||
err := QueryRowSQL(query, interfaceSlice(postIP), interfaceSlice(&whenStr))
|
||||
err := QueryRowSQL(query, []any{postIP}, []any{&whenStr})
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ func SinceLastThread(postIP string) (int, error) {
|
|||
const query = `SELECT COALESCE(MAX(created_on), '1970-01-01 00:00:00') FROM DBPREFIXposts WHERE ip = ? AND is_top_post`
|
||||
var whenStr string
|
||||
|
||||
err := QueryRowSQL(query, interfaceSlice(postIP), interfaceSlice(&whenStr))
|
||||
err := QueryRowSQL(query, []any{postIP}, []any{&whenStr})
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ func (p *Post) UpdateContents(email string, subject string, message template.HTM
|
|||
func (p *Post) GetBoardID() (int, error) {
|
||||
const query = `SELECT board_id FROM DBPREFIXthreads where id = ?`
|
||||
var boardID int
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ThreadID), interfaceSlice(&boardID))
|
||||
err := QueryRowSQL(query, []any{p.ThreadID}, []any{&boardID})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
err = ErrBoardDoesNotExist
|
||||
}
|
||||
|
@ -253,20 +253,20 @@ func (p *Post) GetBoardID() (int, error) {
|
|||
func (p *Post) GetBoardDir() (string, error) {
|
||||
const query = "SELECT dir FROM DBPREFIXboards" + boardFromPostIdSuffixSQL
|
||||
var dir string
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(&dir))
|
||||
err := QueryRowSQL(query, []any{p.ID}, []any{&dir})
|
||||
return dir, err
|
||||
}
|
||||
|
||||
func (p *Post) GetBoard() (*Board, error) {
|
||||
const query = selectBoardsBaseSQL + boardFromPostIdSuffixSQL
|
||||
board := new(Board)
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{p.ID}, []any{
|
||||
&board.ID, &board.SectionID, &board.URI, &board.Dir, &board.NavbarPosition, &board.Title, &board.Subtitle,
|
||||
&board.Description, &board.MaxFilesize, &board.MaxThreads, &board.DefaultStyle, &board.Locked,
|
||||
&board.CreatedAt, &board.AnonymousName, &board.ForceAnonymous, &board.AutosageAfter, &board.NoImagesAfter,
|
||||
&board.MaxMessageLength, &board.MinMessageLength, &board.AllowEmbeds, &board.RedirectToThread, &board.RequireFile,
|
||||
&board.EnableCatalog,
|
||||
))
|
||||
})
|
||||
return board, err
|
||||
}
|
||||
|
||||
|
@ -286,7 +286,7 @@ func (p *Post) TopPostID() (int, error) {
|
|||
}
|
||||
const query = `SELECT id FROM DBPREFIXposts WHERE thread_id = ? and is_top_post = TRUE ORDER BY id ASC LIMIT 1`
|
||||
var topPostID int
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ThreadID), interfaceSlice(&topPostID))
|
||||
err := QueryRowSQL(query, []any{p.ThreadID}, []any{&topPostID})
|
||||
return topPostID, err
|
||||
}
|
||||
|
||||
|
@ -308,10 +308,10 @@ func (p *Post) GetUpload() (*Upload, error) {
|
|||
file_size, is_spoilered, thumbnail_width, thumbnail_height, width, height
|
||||
FROM DBPREFIXfiles WHERE post_id = ?`
|
||||
upload := new(Upload)
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{p.ID}, []any{
|
||||
&upload.ID, &upload.PostID, &upload.FileOrder, &upload.OriginalFilename, &upload.Filename, &upload.Checksum,
|
||||
&upload.FileSize, &upload.IsSpoilered, &upload.ThumbnailWidth, &upload.ThumbnailHeight, &upload.Width, &upload.Height,
|
||||
))
|
||||
})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, nil
|
||||
}
|
||||
|
@ -372,7 +372,7 @@ func (p *Post) Insert(bumpThread bool, boardID int, locked bool, stickied bool,
|
|||
} else {
|
||||
var threadIsLocked bool
|
||||
if err = QueryRowTxSQL(tx, "SELECT locked FROM DBPREFIXthreads WHERE id = ?",
|
||||
interfaceSlice(p.ThreadID), interfaceSlice(&threadIsLocked)); err != nil {
|
||||
[]any{p.ThreadID}, []any{&threadIsLocked}); err != nil {
|
||||
return err
|
||||
}
|
||||
if threadIsLocked {
|
||||
|
@ -420,7 +420,7 @@ func (p *Post) WebPath() string {
|
|||
SELECT id, thread_id FROM DBPREFIXposts WHERE is_top_post
|
||||
) op on op.thread_id = DBPREFIXposts.thread_id
|
||||
WHERE DBPREFIXposts.id = ?`
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(&opID, &boardDir))
|
||||
err := QueryRowSQL(query, []any{p.ID}, []any{&opID, &boardDir})
|
||||
if err != nil {
|
||||
return webRoot
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ func CheckPostReports(postID int, reason string) (bool, bool, error) {
|
|||
WHERE post_id = ? AND (reason = ? OR is_cleared = 2)`
|
||||
var num int
|
||||
var isCleared interface{}
|
||||
err := QueryRowSQL(sql, interfaceSlice(postID, reason), interfaceSlice(&num, &isCleared))
|
||||
err := QueryRowSQL(sql, []any{postID, reason}, []any{&num, &isCleared})
|
||||
isClearedInt, _ := isCleared.(int64)
|
||||
return num > 0, isClearedInt == 2, err
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ func GetAllSections(onlyNonHidden bool) ([]Section, error) {
|
|||
func getOrCreateDefaultSectionID() (sectionID int, err error) {
|
||||
const query = `SELECT id FROM DBPREFIXsections WHERE name = 'Main'`
|
||||
var id int
|
||||
err = QueryRowSQL(query, interfaceSlice(), interfaceSlice(&id))
|
||||
err = QueryRowSQL(query, nil, []any{&id})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
var section *Section
|
||||
if section, err = NewSection("Main", "main", false, -1); err != nil {
|
||||
|
@ -60,9 +60,9 @@ func getOrCreateDefaultSectionID() (sectionID int, err error) {
|
|||
func GetSectionFromID(id int) (*Section, error) {
|
||||
const query = `SELECT id, name, abbreviation, position, hidden FROM DBPREFIXsections WHERE id = ?`
|
||||
var section Section
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{id}, []any{
|
||||
§ion.ID, §ion.Name, §ion.Abbreviation, §ion.Position, §ion.Hidden,
|
||||
))
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ var (
|
|||
func createDefaultAdminIfNoStaff() error {
|
||||
const query = `SELECT COUNT(id) FROM DBPREFIXstaff`
|
||||
var count int
|
||||
err := QueryRowSQL(query, interfaceSlice(), interfaceSlice(&count))
|
||||
err := QueryRowSQL(query, nil, []any{&count})
|
||||
if err != nil && !errors.Is(err, sql.ErrNoRows) {
|
||||
return err
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ func (s *Staff) ClearSessions() error {
|
|||
var err error
|
||||
if s.ID == 0 {
|
||||
// ID field not set, get it from the DB
|
||||
if err = QueryRowSQL(query, interfaceSlice(s.Username), interfaceSlice(&s.ID)); err != nil {
|
||||
if err = QueryRowSQL(query, []any{s.Username}, []any{&s.ID}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ func DeactivateStaff(username string) error {
|
|||
func GetStaffUsernameFromID(id int) (string, error) {
|
||||
const query = `SELECT username FROM DBPREFIXstaff WHERE id = ?`
|
||||
var username string
|
||||
err := QueryRowSQL(query, interfaceSlice(id), interfaceSlice(&username))
|
||||
err := QueryRowSQL(query, []any{id}, []any{&username})
|
||||
return username, err
|
||||
}
|
||||
|
||||
|
@ -153,8 +153,8 @@ func GetStaffBySession(session string) (*Staff, error) {
|
|||
ON sessions.staff_id = staff.id
|
||||
WHERE sessions.data = ?`
|
||||
staff := new(Staff)
|
||||
err := QueryRowSQL(query, interfaceSlice(session), interfaceSlice(
|
||||
&staff.ID, &staff.Username, &staff.PasswordChecksum, &staff.Rank, &staff.AddedOn, &staff.LastLogin))
|
||||
err := QueryRowSQL(query, []any{session}, []any{
|
||||
&staff.ID, &staff.Username, &staff.PasswordChecksum, &staff.Rank, &staff.AddedOn, &staff.LastLogin})
|
||||
return staff, err
|
||||
}
|
||||
|
||||
|
@ -166,10 +166,10 @@ func GetStaffByUsername(username string, onlyActive bool) (*Staff, error) {
|
|||
query += ` AND is_active = TRUE`
|
||||
}
|
||||
staff := new(Staff)
|
||||
err := QueryRowSQL(query, interfaceSlice(username), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{username}, []any{
|
||||
&staff.ID, &staff.Username, &staff.PasswordChecksum, &staff.Rank, &staff.AddedOn,
|
||||
&staff.LastLogin, &staff.IsActive,
|
||||
))
|
||||
})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, ErrUnrecognizedUsername
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ func createThread(tx *sql.Tx, boardID int, locked bool, stickied bool, anchored
|
|||
const lockedQuery = `SELECT locked FROM DBPREFIXboards WHERE id = ?`
|
||||
const insertQuery = `INSERT INTO DBPREFIXthreads (board_id, locked, stickied, anchored, cyclical) VALUES (?,?,?,?,?)`
|
||||
var boardIsLocked bool
|
||||
if err = QueryRowTxSQL(tx, lockedQuery, interfaceSlice(boardID), interfaceSlice(&boardIsLocked)); err != nil {
|
||||
if err = QueryRowTxSQL(tx, lockedQuery, []any{boardID}, []any{&boardIsLocked}); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if boardIsLocked {
|
||||
|
@ -32,7 +32,7 @@ func createThread(tx *sql.Tx, boardID int, locked bool, stickied bool, anchored
|
|||
if _, err = ExecTxSQL(tx, insertQuery, boardID, locked, stickied, anchored, cyclical); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
QueryRowTxSQL(tx, "SELECT MAX(id) FROM DBPREFIXthreads", nil, interfaceSlice(&threadID))
|
||||
QueryRowTxSQL(tx, "SELECT MAX(id) FROM DBPREFIXthreads", nil, []any{&threadID})
|
||||
return threadID, err
|
||||
}
|
||||
|
||||
|
@ -40,10 +40,10 @@ func createThread(tx *sql.Tx, boardID int, locked bool, stickied bool, anchored
|
|||
func GetThread(threadID int) (*Thread, error) {
|
||||
const query = selectThreadsBaseSQL + `WHERE id = ?`
|
||||
thread := new(Thread)
|
||||
err := QueryRowSQL(query, interfaceSlice(threadID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{threadID}, []any{
|
||||
&thread.ID, &thread.BoardID, &thread.Locked, &thread.Stickied, &thread.Anchored, &thread.Cyclical,
|
||||
&thread.LastBump, &thread.DeletedAt, &thread.IsDeleted,
|
||||
))
|
||||
})
|
||||
return thread, err
|
||||
}
|
||||
|
||||
|
@ -51,10 +51,10 @@ func GetThread(threadID int) (*Thread, error) {
|
|||
func GetPostThread(opID int) (*Thread, error) {
|
||||
const query = selectThreadsBaseSQL + `WHERE id = (SELECT thread_id FROM DBPREFIXposts WHERE id = ? LIMIT 1)`
|
||||
thread := new(Thread)
|
||||
err := QueryRowSQL(query, interfaceSlice(opID), interfaceSlice(
|
||||
err := QueryRowSQL(query, []any{opID}, []any{
|
||||
&thread.ID, &thread.BoardID, &thread.Locked, &thread.Stickied, &thread.Anchored, &thread.Cyclical,
|
||||
&thread.LastBump, &thread.DeletedAt, &thread.IsDeleted,
|
||||
))
|
||||
})
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
err = ErrThreadDoesNotExist
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ func GetPostThread(opID int) (*Thread, error) {
|
|||
func GetTopPostThreadID(opID int) (int, error) {
|
||||
const query = `SELECT thread_id FROM DBPREFIXposts WHERE id = ? and is_top_post`
|
||||
var threadID int
|
||||
err := QueryRowSQL(query, interfaceSlice(opID), interfaceSlice(&threadID))
|
||||
err := QueryRowSQL(query, []any{opID}, []any{&threadID})
|
||||
if err == sql.ErrNoRows {
|
||||
err = ErrThreadDoesNotExist
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ func GetThreadReplyCountFromOP(opID int) (int, error) {
|
|||
const query = `SELECT COUNT(*) FROM DBPREFIXposts WHERE thread_id = (
|
||||
SELECT thread_id FROM DBPREFIXposts WHERE id = ?) AND is_deleted = FALSE AND is_top_post = FALSE`
|
||||
var num int
|
||||
err := QueryRowSQL(query, interfaceSlice(opID), interfaceSlice(&num))
|
||||
err := QueryRowSQL(query, []any{opID}, []any{&num})
|
||||
return num, err
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ func (t *Thread) GetReplyFileCount() (int, error) {
|
|||
const query = `SELECT COUNT(filename) FROM DBPREFIXfiles WHERE post_id IN (
|
||||
SELECT id FROM DBPREFIXposts WHERE thread_id = ? AND is_deleted = FALSE)`
|
||||
var fileCount int
|
||||
err := QueryRowSQL(query, interfaceSlice(t.ID), interfaceSlice(&fileCount))
|
||||
err := QueryRowSQL(query, []any{t.ID}, []any{&fileCount})
|
||||
return fileCount, err
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,7 @@ func (t *Thread) GetReplyFileCount() (int, error) {
|
|||
func (t *Thread) GetReplyCount() (int, error) {
|
||||
const query = `SELECT COUNT(*) FROM DBPREFIXposts WHERE thread_id = ? AND is_top_post = FALSE AND is_deleted = FALSE`
|
||||
var numReplies int
|
||||
err := QueryRowSQL(query, interfaceSlice(t.ID), interfaceSlice(&numReplies))
|
||||
err := QueryRowSQL(query, []any{t.ID}, []any{&numReplies})
|
||||
return numReplies, err
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ func GetThreadFiles(post *Post) ([]Upload, error) {
|
|||
func (p *Post) nextFileOrder() (int, error) {
|
||||
const query = `SELECT COALESCE(MAX(file_order) + 1, 0) FROM DBPREFIXfiles WHERE post_id = ?`
|
||||
var next int
|
||||
err := QueryRowSQL(query, interfaceSlice(p.ID), interfaceSlice(&next))
|
||||
err := QueryRowSQL(query, []any{p.ID}, []any{&next})
|
||||
return next, err
|
||||
}
|
||||
|
||||
|
|
|
@ -296,7 +296,7 @@ func getLatestID(tableName string, tx *sql.Tx) (id int, err error) {
|
|||
}
|
||||
err = stmt.QueryRow().Scan(&id)
|
||||
} else {
|
||||
err = QueryRowSQL(query, nil, interfaceSlice(&id))
|
||||
err = QueryRowSQL(query, nil, []any{&id})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -359,11 +359,6 @@ func doesGochanPrefixTableExist() (bool, error) {
|
|||
return count > 0, nil
|
||||
}
|
||||
|
||||
// interfaceSlice creates a new interface slice from an arbitrary collection of values
|
||||
func interfaceSlice(args ...any) []any {
|
||||
return args
|
||||
}
|
||||
|
||||
/* func errFilterDuplicatePrimaryKey(err error) (isPKerror bool, nonPKerror error) {
|
||||
if err == nil {
|
||||
return false, nil
|
||||
|
|
|
@ -75,7 +75,7 @@ func tcPrepareContextSQL(t *testing.T, mock sqlmock.Sqlmock, tC *testCase[prepar
|
|||
}
|
||||
|
||||
func TestPrepareContextSQL(t *testing.T) {
|
||||
_, err := PrepareContextSQL(nil, "", nil)
|
||||
_, err := PrepareContextSQL(context.Background(), "", nil)
|
||||
if !assert.Error(t, err) {
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue