sql-builder/db/db.go

56 lines
1.4 KiB
Go
Raw Normal View History

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
}