2024-04-29 15:59:38 +08:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
2024-05-07 17:19:55 +08:00
|
|
|
"git.botann.com/lijun/sql-builder/util"
|
2024-04-29 15:59:38 +08:00
|
|
|
"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]
|
2024-05-07 17:19:55 +08:00
|
|
|
Sql string
|
2024-04-29 15:59:38 +08:00
|
|
|
Opts Options
|
|
|
|
}
|
|
|
|
|
|
|
|
type Options struct {
|
|
|
|
util.Page
|
2024-05-07 17:19:55 +08:00
|
|
|
selects []string
|
|
|
|
conditions []string
|
2024-04-29 15:59:38 +08:00
|
|
|
args []interface{} // condition的参数
|
2024-05-07 17:19:55 +08:00
|
|
|
groups []string
|
|
|
|
orders []string
|
|
|
|
partitions []string // tdengine专用
|
2024-04-29 15:59:38 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|