61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package db
|
|
|
|
import (
|
|
"git.botann.com/lj_wsdj/sqlbuilder/util"
|
|
"git.botann.com/tinycs/boomerang/tydb"
|
|
"git.botann.com/tinycs/boomerang/tytaos"
|
|
)
|
|
|
|
type SqlConnector[T tydb.QOneRowRst | tytaos.QOneRowRst | int] interface {
|
|
QueryEx(sql string, data interface{}, args ...interface{}) error
|
|
QueryRow(sql string, data interface{}, args ...interface{}) (error, T)
|
|
}
|
|
|
|
type SqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | int] struct {
|
|
Connector SqlConnector[T]
|
|
Opts Options
|
|
}
|
|
|
|
type Condition struct {
|
|
Cond string
|
|
Args []interface{}
|
|
}
|
|
|
|
type Options struct {
|
|
util.Page
|
|
Sql string
|
|
Selects []string
|
|
Conditions []Condition
|
|
Groups []string
|
|
Orders []string
|
|
Partitions []string // tdengine专用
|
|
args []interface{} // condition的参数
|
|
}
|
|
|
|
func (s *SqlBuilder[T]) FindBySql(data interface{}) error {
|
|
sqls := s.buildSql()
|
|
return s.Connector.QueryEx(sqls, data, s.Opts.args...)
|
|
}
|
|
|
|
func (s *SqlBuilder[T]) FindOneBySql(data interface{}) error {
|
|
sqls := s.buildSql()
|
|
err, _ := s.Connector.QueryRow(sqls, data, s.Opts.args...)
|
|
return err
|
|
}
|
|
|
|
func (s *SqlBuilder[T]) PaginateBySql(data interface{}, page util.Page) error {
|
|
var err error
|
|
var total int
|
|
s.Opts.Page = page
|
|
sqls := s.buildSql()
|
|
count_sql := s.buildCountSql(sqls)
|
|
paginage_sql := s.buildPaginateSql(sqls)
|
|
err, _ = s.Connector.QueryRow(count_sql, &total, s.Opts.args...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
s.Opts.Page.SetTotal(total)
|
|
err = s.Connector.QueryEx(paginage_sql, data, s.Opts.args...)
|
|
return err
|
|
}
|