Documentation ¶
Overview ¶
Пакет sddb содержит элементы для подключения к базе данных
Index ¶
- func CheckDbAlive()
- func CloseRows(r *sqlx.Rows) func()
- func CloseSdUsersDb() error
- func CommitIfActive(trans *TransactionType) (err error)
- func FatalDatabaseErrorIf(err error, format string, args ...interface{})
- func IsConnectionDead(conn *ConnectionType) bool
- func NamedExec(sql string, params interface{}) (res sql.Result, err error)
- func NamedReadQuery(sql string, params interface{}) (res *sqlx.Rows, err error)
- func NamedUpdateQuery(sql string, params interface{}) (res *sqlx.Rows, err error)
- func OpenSdUsersDb(dbName string)
- func PlayWithDb()
- func ReadQuery(sql string) (res *sqlx.Rows, err error)
- func RollbackIfActive(trans *TransactionType)
- func SetConnectionDead(conn *ConnectionType)
- func UncoalesceInt64(i int64) sql.NullInt64
- func WithTransaction(body func(tx *TransactionType) (err error)) (err error)
- type ConnectionType
- type FatalDatabaseErrorHandlerType
- type TransactionType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckDbAlive ¶
func CheckDbAlive()
CheckDbAlive должен вызываться в обработчиках страниц перед каждым взаимодействием с БД
func CloseRows ¶
CloseRows предназначены для использования с отсрочкой для закрытия строк в случае, если итерация строк идет неправильно
func CommitIfActive ¶
func CommitIfActive(trans *TransactionType) (err error)
CommitIfActive фиксирует транзакцию, если она всё ещё активна.
func FatalDatabaseErrorIf ¶
Функция FatalDatabaseErrorIf вызывается из обработчика запроса, чтобы сообщить, что мы больше не можем работать с этой базой данных и должны закрыться. Если это произойдет, мы сначала объявим эту базу данных мёртвой. Далее мы инициируем "льготное отключение". Наконец, мы организуем возврат статуса 500 клиенту. Но этот модуль ничего не знает об http, поэтому здесь у нас только заглушка. Фактический обработчик хранится в переменной FatalDatabaseErrorHandler и устанавливается позже в app.actualFatalDatabaseErrorHandler FatalDataBaseErrorIf считается потокобезопасным
func IsConnectionDead ¶
func IsConnectionDead(conn *ConnectionType) bool
IsConnectionDead следует вызывать перед каждым использованием соединения с бд, чтобы проверить, не умерло ли оно Если вы обнаружите, что он мёртв, верните статус 500
func NamedExec ¶
NamedExec похож на sqlx.NamedExec и также держит мьютекс. Используйте его всякий раз, когда выполняемый запрос может обновить базу данных
func NamedReadQuery ¶
NamedReadQuery предназначен для запросов, которые доступны только для чтения. Мы вводим его, когда инкапсулируем sql(x) соединение sdusers_db в модуль sddb.
func NamedUpdateQuery ¶
NamedUpdateQuery - это запрос в sdUsersDb, который обновляет базу данных. Поэтому мы держим наш мьютекс для обеспечения сериализации всех записей в области видимости экземпляров.
func OpenSdUsersDb ¶
func OpenSdUsersDb(dbName string)
OpenSdUsersDb открывает заданное имя базы данных
func PlayWithDb ¶
func PlayWithDb()
PlayWithDb используется для ручного тестирования функциональности БД
func ReadQuery ¶
ReadQuery предназначен для запросов, которые доступны только для чтения. Мы вводим его, когда инкапсулируем sql(x) соединение sdusers_db в модуль sddb.
func RollbackIfActive ¶
func RollbackIfActive(trans *TransactionType)
RollbackIfActive откатывает транзакцию, если она всё ещё активна. Отложите этот вопрос, если вы открываете какую-либо сделку Если откат не удался, приложение будет завершено изящно Если уже возникла паника из-за ошибки, не связанной с приложением (произошло что-то неожиданное), будет продолжать делать то же самое, просто регистрируя сбой для отката.
func SetConnectionDead ¶
func SetConnectionDead(conn *ConnectionType)
SetConnectionDead используется для объявления о том, что соединение с db разорвано. Мы делаем это, когда произошло что-то неправильное, например, ошибка при откате.
func UncoalesceInt64 ¶
UncoalesceInt64 converts 0 to an invalid sql.NullInt64
func WithTransaction ¶
func WithTransaction(body func(tx *TransactionType) (err error)) (err error)
WithTransaction открывает транзакцию в sdusers_db, затем запускает тело Затем, если ошибки нет, и транзакция всё ещё активна, фиксируем транзакцию и возвращаем ошибку фиксации Если во время выполнения тела произошла ошибка или паника, пытается откатить транзакцию, см. RollbackIfActive
Types ¶
type ConnectionType ¶
type ConnectionType struct { Db *sqlx.DB // Мы держим мьютекс для всех записей в базу данных. // Таким образом мы контролируем количество одновременных транзакций в базе данных. // Пока у нас только один экземпляр службы, // поэтому одновременных записей в базу данных будет не более одной. // Если у нас несколько экземпляров, то одновременных записей будет не больше, чем экземпляров сервиса. Mutex *sync.Mutex IsDead bool }
ConnectionType инкапсулирует соединение с некоторыми другими незначительными вещами, такими как нерабочее состояние пула соединений. Для любого экземпляра БД должен существовать только один экземпляр ConnectionType
func OpenDb ¶
func OpenDb(url, logFriendlyName string, withMutex bool) *ConnectionType
OpenDb получает соединение с db. Соединения объединяются, остерегайтесь. logFriendlyName - для случая, когда url содержит пароли
type FatalDatabaseErrorHandlerType ¶
type FatalDatabaseErrorHandlerType func(err error, conn *ConnectionType, format string, args ...interface{})
FatalDatabaseErrorHandlerType - это тип для FatalDatabaseErrorHandler
var FatalDatabaseErrorHandler FatalDatabaseErrorHandlerType = initialFatalDatabaseErrorHandler
FatalDatabaseErrorHandler используется функцией FatalDatabaseError
type TransactionType ¶
type TransactionType struct { Conn *ConnectionType Tx *sqlx.Tx }
TransactionType - это транзакция и ссылка на ConnectionType, которая нам нужна из-за невозможности получить db из транзакции.