You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.2 KiB
94 lines
3.2 KiB
package postgres
|
|
|
|
import "gorm.io/gorm"
|
|
|
|
/*
|
|
系统描述:PostgreSQL 数据库驱动系统(与 lego/sys/mysql 平级,实现同一套 DB 抽象)
|
|
*/
|
|
type (
|
|
ISys interface {
|
|
Table(tName string) (tx *gorm.DB)
|
|
Begin() (tx *gorm.DB)
|
|
Raw(sql string, values ...interface{}) (tx *gorm.DB)
|
|
Exec(sql string, values ...interface{}) (tx *gorm.DB)
|
|
CreateTable(tName string, model any) (err error)
|
|
AutoIncrementStart(tName, column string, start uint64) (err error)
|
|
// AutoIncrementFloor 抬高自增主键下限(表里已有数据也生效,已有行 id 不动)。
|
|
AutoIncrementFloor(tName, column string, start uint64) (err error)
|
|
FindOne(tName string, model any, query interface{}, args ...interface{}) (err error)
|
|
// FindOnePrimary 与 FindOne 相同,但强制走主库(绕过只读副本)。
|
|
// 用于"读后写同一行"等强一致场景,避免读到复制延迟内的旧数据。未配置副本时与 FindOne 等价。
|
|
FindOnePrimary(tName string, model any, query interface{}, args ...interface{}) (err error)
|
|
Find(tName string, models any, query interface{}, args ...interface{}) (err error)
|
|
Insert(tName string, model any) (err error)
|
|
Save(tName string, model any) (err error)
|
|
Delete(tName string, query interface{}, args ...interface{}) (err error)
|
|
DropTable(tName string) (err error)
|
|
}
|
|
)
|
|
|
|
var (
|
|
defsys ISys
|
|
ErrNoDocuments = gorm.ErrRecordNotFound
|
|
)
|
|
|
|
func OnInit(config map[string]interface{}, option ...Option) (err error) {
|
|
defsys, err = newSys(newOptions(config, option...))
|
|
return
|
|
}
|
|
|
|
func NewSys(option ...Option) (sys ISys, err error) {
|
|
sys, err = newSys(newOptionsByOption(option...))
|
|
return
|
|
}
|
|
|
|
// GetSys 返回全局 postgres 实例(需要 ISys 全部方法时用,如 Save/Begin/AutoIncrementStart)。
|
|
func GetSys() ISys {
|
|
return defsys
|
|
}
|
|
|
|
func Table(tName string) (tx *gorm.DB) {
|
|
return defsys.Table(tName)
|
|
}
|
|
func Exec(sql string, values ...interface{}) (tx *gorm.DB) {
|
|
return defsys.Exec(sql, values...)
|
|
}
|
|
func Raw(sql string, values ...interface{}) (tx *gorm.DB) {
|
|
return defsys.Raw(sql, values...)
|
|
}
|
|
func CreateTable(tName string, model any) (err error) {
|
|
return defsys.CreateTable(tName, model)
|
|
}
|
|
func FindOne(tName string, model any, query interface{}, args ...interface{}) (err error) {
|
|
return defsys.FindOne(tName, model, query, args...)
|
|
}
|
|
func Find(tName string, models any, query interface{}, args ...interface{}) (err error) {
|
|
return defsys.Find(tName, models, query, args...)
|
|
}
|
|
func Insert(tName string, model any) (err error) {
|
|
return defsys.Insert(tName, model)
|
|
}
|
|
|
|
func Save(tName string, model any) (err error) {
|
|
return defsys.Save(tName, model)
|
|
}
|
|
|
|
func FindOnePrimary(tName string, model any, query interface{}, args ...interface{}) (err error) {
|
|
return defsys.FindOnePrimary(tName, model, query, args...)
|
|
}
|
|
|
|
func AutoIncrementStart(tName, column string, start uint64) (err error) {
|
|
return defsys.AutoIncrementStart(tName, column, start)
|
|
}
|
|
|
|
func AutoIncrementFloor(tName, column string, start uint64) (err error) {
|
|
return defsys.AutoIncrementFloor(tName, column, start)
|
|
}
|
|
|
|
func Delete(tName string, query interface{}, args ...interface{}) (err error) {
|
|
return defsys.Delete(tName, query, args...)
|
|
}
|
|
|
|
func DropTable(tName string) (err error) {
|
|
return defsys.DropTable(tName)
|
|
}
|
|
|