sql-builder/db/build.go

85 lines
2.5 KiB
Go
Raw Normal View History

2024-04-29 15:59:38 +08:00
package db
import (
"fmt"
"strings"
2024-05-07 17:19:55 +08:00
"git.botann.com/lijun/sql-builder/util"
2024-04-29 15:59:38 +08:00
)
func (s *SqlBuilder[T]) buildSql() string {
s.buildSelect()
s.buildGroup()
s.buildOrder()
s.buildPartition()
s.buildCondition()
2024-05-07 17:19:55 +08:00
return s.Sql
2024-04-29 15:59:38 +08:00
}
func (s *SqlBuilder[T]) buildPaginateSql(sqls string) string {
s.Opts.Page.Init()
pageIndex := s.Opts.Page.GetPageIndex()
pageSize := s.Opts.Page.GetPageSize()
return fmt.Sprintf("%s limit %d offset %d", sqls, pageSize, (pageIndex-1)*pageSize)
}
func (s *SqlBuilder[T]) buildCountSql(sqls string) string {
return fmt.Sprintf("select count(1) from (%s) as t", sqls)
}
func (s *SqlBuilder[T]) buildSelect() {
2024-05-07 17:19:55 +08:00
for i, v := range s.Opts.selects {
2024-04-29 15:59:38 +08:00
// 如果是最后一个select字段则不加逗号
2024-05-09 09:51:58 +08:00
if i == len(s.Opts.selects)-1 {
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s", v), 1)
2024-04-29 15:59:38 +08:00
} else {
2024-05-09 09:51:58 +08:00
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s,", v), 1)
2024-04-29 15:59:38 +08:00
}
}
2024-05-07 17:19:55 +08:00
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, "", -1)
2024-04-29 15:59:38 +08:00
}
func (s *SqlBuilder[T]) buildCondition() {
2024-05-09 09:51:58 +08:00
for _, v := range s.Opts.conditions {
s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v), 1)
2024-04-29 15:59:38 +08:00
}
2024-05-07 17:19:55 +08:00
s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, "", -1)
2024-04-29 15:59:38 +08:00
}
func (s *SqlBuilder[T]) buildGroup() {
2024-05-07 17:19:55 +08:00
for i, v := range s.Opts.groups {
2024-04-29 15:59:38 +08:00
// 如果是最后一个group字段则不加逗号
2024-05-09 09:51:58 +08:00
if i == len(s.Opts.groups)-1 {
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s", v), 1)
2024-04-29 15:59:38 +08:00
} else {
2024-05-09 09:51:58 +08:00
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s,", v), 1)
2024-04-29 15:59:38 +08:00
}
}
2024-05-07 17:19:55 +08:00
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, "", -1)
2024-04-29 15:59:38 +08:00
}
func (s *SqlBuilder[T]) buildOrder() {
2024-05-07 17:19:55 +08:00
for i, v := range s.Opts.orders {
2024-04-29 15:59:38 +08:00
// 如果是最后一个order字段则不加逗号
2024-05-09 09:51:58 +08:00
if i == len(s.Opts.orders)-1 {
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s", v), 1)
2024-04-29 15:59:38 +08:00
} else {
2024-05-09 09:51:58 +08:00
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s,", v), 1)
2024-04-29 15:59:38 +08:00
}
}
2024-05-07 17:19:55 +08:00
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, "", -1)
2024-04-29 15:59:38 +08:00
}
// tdengine专用
func (s *SqlBuilder[T]) buildPartition() {
2024-05-07 17:19:55 +08:00
for i, v := range s.Opts.partitions {
2024-04-29 15:59:38 +08:00
// 如果是最后一个partition字段则不加逗号
2024-05-09 09:51:58 +08:00
if i == len(s.Opts.partitions)-1 {
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s", v), 1)
2024-04-29 15:59:38 +08:00
} else {
2024-05-09 09:51:58 +08:00
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s,", v), 1)
2024-04-29 15:59:38 +08:00
}
}
2024-05-07 17:19:55 +08:00
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, "", -1)
2024-04-29 15:59:38 +08:00
}