lj-wsdj 2024-08-05 19:44:11 +08:00
parent 751a223209
commit a05e1a98f7
5 changed files with 31 additions and 5 deletions

View File

@ -17,7 +17,12 @@ func (s *SqlBuilder[T]) buildPaginateSql(sqls string) string {
s.Opts.Page.Init() s.Opts.Page.Init()
pageIndex := s.Opts.Page.GetPageIndex() pageIndex := s.Opts.Page.GetPageIndex()
pageSize := s.Opts.Page.GetPageSize() pageSize := s.Opts.Page.GetPageSize()
return fmt.Sprintf("%s limit %d offset %d", sqls, pageSize, (pageIndex-1)*pageSize) if s.Driver == util.DriverMysql {
return fmt.Sprintf("%s limit %d offset %d", sqls, pageSize, (pageIndex-1)*pageSize)
} else if s.Driver == util.DriverOracle {
return fmt.Sprintf("select t.* from (%s) t where t.rownum > %d and t.rownum <= %d", sqls, (pageIndex-1)*pageSize, pageIndex*pageSize)
}
} }
func (s *SqlBuilder[T]) buildCountSql(sqls string) string { func (s *SqlBuilder[T]) buildCountSql(sqls string) string {

View File

@ -3,16 +3,18 @@ package db
import ( import (
"git.botann.com/lijun/sql-builder/util" "git.botann.com/lijun/sql-builder/util"
"git.botann.com/tinycs/boomerang/tydb" "git.botann.com/tinycs/boomerang/tydb"
"git.botann.com/tinycs/boomerang/tyoracle"
"git.botann.com/tinycs/boomerang/tytaos" "git.botann.com/tinycs/boomerang/tytaos"
) )
type SqlConnector[T tydb.QOneRowRst | tytaos.QOneRowRst | int] interface { type SqlConnector[T tydb.QOneRowRst | tytaos.QOneRowRst | tyoracle.QOneRowRst | int] interface {
QueryEx(sql string, data interface{}, args ...interface{}) error QueryEx(sql string, data interface{}, args ...interface{}) error
QueryRow(sql string, data interface{}, args ...interface{}) (error, T) QueryRow(sql string, data interface{}, args ...interface{}) (error, T)
} }
type SqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | int] struct { type SqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | tyoracle.QOneRowRst | int] struct {
Connector SqlConnector[T] Connector SqlConnector[T]
Driver string
Sql string Sql string
Opts Options Opts Options
} }
@ -32,6 +34,10 @@ func (s *SqlBuilder[T]) Clear() {
s.Opts = Options{} s.Opts = Options{}
} }
func (s *SqlBuilder[T]) SetDriver(driver string) {
s.Driver = driver
}
func (s *SqlBuilder[T]) FindBySql(data interface{}) error { func (s *SqlBuilder[T]) FindBySql(data interface{}) error {
sqls := s.buildSql() sqls := s.buildSql()
return s.Connector.QueryEx(sqls, data, s.Opts.args...) return s.Connector.QueryEx(sqls, data, s.Opts.args...)

2
go.mod
View File

@ -2,7 +2,7 @@ module git.botann.com/lijun/sql-builder
go 1.21.5 go 1.21.5
require git.botann.com/tinycs/boomerang v1.4.6 require git.botann.com/tinycs/boomerang v1.4.7
require ( require (
github.com/go-sql-driver/mysql v1.5.0 // indirect github.com/go-sql-driver/mysql v1.5.0 // indirect

View File

@ -2,14 +2,24 @@ package sql_builder
import ( import (
"git.botann.com/lijun/sql-builder/db" "git.botann.com/lijun/sql-builder/db"
"git.botann.com/lijun/sql-builder/util"
"git.botann.com/tinycs/boomerang/tydb" "git.botann.com/tinycs/boomerang/tydb"
"git.botann.com/tinycs/boomerang/tyoracle"
"git.botann.com/tinycs/boomerang/tytaos" "git.botann.com/tinycs/boomerang/tytaos"
) )
func NewSqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | int](connector db.SqlConnector[T]) *db.SqlBuilder[T] { func NewSqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | int](connector db.SqlConnector[T]) *db.SqlBuilder[T] {
return &db.SqlBuilder[T]{Connector: connector} return &db.SqlBuilder[T]{Connector: connector, Driver: util.DriverMysql}
} }
func DefaultSqlBuilder() *db.SqlBuilder[tydb.QOneRowRst] { func DefaultSqlBuilder() *db.SqlBuilder[tydb.QOneRowRst] {
return NewSqlBuilder[tydb.QOneRowRst](tydb.DB()) return NewSqlBuilder[tydb.QOneRowRst](tydb.DB())
} }
func NewSqlBuilderByDriver[T tydb.QOneRowRst | tytaos.QOneRowRst | tyoracle.QOneRowRst | int](connector db.SqlConnector[T], driver string) *db.SqlBuilder[T] {
return &db.SqlBuilder[T]{Connector: connector, Driver: driver}
}
func OracleSqlBuilder() *db.SqlBuilder[tyoracle.QOneRowRst] {
return NewSqlBuilderByDriver[tyoracle.QOneRowRst](tyoracle.DB(), util.DriverOracle)
}

View File

@ -7,3 +7,8 @@ const (
OrderPlaceholder = "@o" OrderPlaceholder = "@o"
PartitionPlaceholder = "@p" PartitionPlaceholder = "@p"
) )
const (
DriverMysql = "mysql"
DriverOracle = "oracle"
)