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
|
|
|
|
n := i + 1
|
|
|
|
|
// 如果是最后一个select字段,则不加逗号
|
2024-05-07 17:19:55 +08:00
|
|
|
|
if i == len(s.Opts.selects) {
|
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s", v), n)
|
2024-04-29 15:59:38 +08:00
|
|
|
|
} else {
|
2024-05-07 17:19:55 +08:00
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s,", v), n)
|
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-07 17:19:55 +08:00
|
|
|
|
for i, v := range s.Opts.conditions {
|
2024-04-29 15:59:38 +08:00
|
|
|
|
n := i + 1
|
2024-05-07 17:19:55 +08:00
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v), n)
|
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
|
|
|
|
n := i + 1
|
|
|
|
|
// 如果是最后一个group字段,则不加逗号
|
2024-05-07 17:19:55 +08:00
|
|
|
|
if n == len(s.Opts.groups) {
|
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s", v), n)
|
2024-04-29 15:59:38 +08:00
|
|
|
|
} else {
|
2024-05-07 17:19:55 +08:00
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s,", v), n)
|
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
|
|
|
|
n := i + 1
|
|
|
|
|
// 如果是最后一个order字段,则不加逗号
|
2024-05-07 17:19:55 +08:00
|
|
|
|
if n == len(s.Opts.orders) {
|
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s", v), n)
|
2024-04-29 15:59:38 +08:00
|
|
|
|
} else {
|
2024-05-07 17:19:55 +08:00
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s,", v), n)
|
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
|
|
|
|
n := i + 1
|
|
|
|
|
// 如果是最后一个partition字段,则不加逗号
|
2024-05-07 17:19:55 +08:00
|
|
|
|
if n == len(s.Opts.partitions) {
|
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s", v), n)
|
2024-04-29 15:59:38 +08:00
|
|
|
|
} else {
|
2024-05-07 17:19:55 +08:00
|
|
|
|
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s,", v), n)
|
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
|
|
|
|
}
|