소스 검색

Ignore "mix of collations" error on invite SELECT

This adds the `isIgnorableError` method and calls it when error checking
in `GetUserInvite()`, returning "not found" if the rror comes up.
pull/252/head
Matt Baer 4 년 전
부모
커밋
51700cc7da
3개의 변경된 파일28개의 추가작업 그리고 3개의 파일을 삭제
  1. +13
    -1
      database-no-sqlite.go
  2. +12
    -0
      database-sqlite.go
  3. +3
    -2
      database.go

+ 13
- 1
database-no-sqlite.go 파일 보기

@@ -1,7 +1,7 @@
// +build !sqlite,!wflib

/*
* Copyright © 2019 A Bunch Tell LLC.
* Copyright © 2019-2020 A Bunch Tell LLC.
*
* This file is part of WriteFreely.
*
@@ -28,3 +28,15 @@ func (db *datastore) isDuplicateKeyErr(err error) bool {

return false
}

func (db *datastore) isIgnorableError(err error) bool {
if db.driverName == driverMySQL {
if mysqlErr, ok := err.(*mysql.MySQLError); ok {
return mysqlErr.Number == mySQLErrCollationMix
}
} else {
log.Error("isIgnorableError: failed check for unrecognized driver '%s'", db.driverName)
}

return false
}

+ 12
- 0
database-sqlite.go 파일 보기

@@ -48,3 +48,15 @@ func (db *datastore) isDuplicateKeyErr(err error) bool {

return false
}

func (db *datastore) isIgnorableError(err error) bool {
if db.driverName == driverMySQL {
if mysqlErr, ok := err.(*mysql.MySQLError); ok {
return mysqlErr.Number == mySQLErrCollationMix
}
} else {
log.Error("isIgnorableError: failed check for unrecognized driver '%s'", db.driverName)
}

return false
}

+ 3
- 2
database.go 파일 보기

@@ -1,5 +1,5 @@
/*
* Copyright © 2018 A Bunch Tell LLC.
* Copyright © 2018-2020 A Bunch Tell LLC.
*
* This file is part of WriteFreely.
*
@@ -37,6 +37,7 @@ import (

const (
mySQLErrDuplicateKey = 1062
mySQLErrCollationMix = 1267

driverMySQL = "mysql"
driverSQLite = "sqlite3"
@@ -2281,7 +2282,7 @@ func (db *datastore) GetUserInvite(id string) (*Invite, error) {
var i Invite
err := db.QueryRow("SELECT id, max_uses, created, expires, inactive FROM userinvites WHERE id = ?", id).Scan(&i.ID, &i.MaxUses, &i.Created, &i.Expires, &i.Inactive)
switch {
case err == sql.ErrNoRows:
case err == sql.ErrNoRows, db.isIgnorableError(err):
return nil, impart.HTTPError{http.StatusNotFound, "Invite doesn't exist."}
case err != nil:
log.Error("Failed selecting invite: %v", err)


불러오는 중...
취소
저장