Documentation ¶
Overview ¶
Пакет sddb содержит элементы для подключения к базе данных
Index ¶
- func CheckDbAlive()
- func CloseRows(r *sqlx.Rows) func()
- func CloseSdUsersDb() error
- func CommitIfActive(trans *TransactionType) (ош error)
- func FatalDatabaseErrorIf(ош error, format string, args ...interface{})
- func IsConnectionDead(conn *ConnectionType) bool
- func NamedExec(sql string, params interface{}) (res sql.Result, ош error)
- func NamedReadQuery(sql string, params interface{}) (res *sqlx.Rows, ош error)
- func NamedUpdateQuery(sql string, params interface{}) (res *sqlx.Rows, ош error)
- func OpenSdUsersDb(dbName string)
- func PlayWithDb()
- func ReadQuery(sql string) (res *sqlx.Rows, ош error)
- func RollbackIfActive(trans *TransactionType)
- func SetConnectionDead(conn *ConnectionType)
- func UncoalesceInt64(i int64) sql.NullInt64
- func WithTransaction(body func(tx *TransactionType) (ош error)) (ош 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) (ош 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) (ош error)) (ош 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(ош 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 из транзакции.