90 lines
2.6 KiB
Go
90 lines
2.6 KiB
Go
package db
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"git.botann.com/lijun/sql-builder/util"
|
||
)
|
||
|
||
func (s *SqlBuilder[T]) buildSql() string {
|
||
s.buildSelect()
|
||
s.buildGroup()
|
||
s.buildOrder()
|
||
s.buildPartition()
|
||
s.buildCondition()
|
||
return s.Sql
|
||
}
|
||
|
||
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() {
|
||
for i, v := range s.Opts.selects {
|
||
n := i + 1
|
||
// 如果是最后一个select字段,则不加逗号
|
||
if i == len(s.Opts.selects) {
|
||
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s", v), n)
|
||
} else {
|
||
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s,", v), n)
|
||
}
|
||
}
|
||
s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, "", -1)
|
||
}
|
||
|
||
func (s *SqlBuilder[T]) buildCondition() {
|
||
for i, v := range s.Opts.conditions {
|
||
n := i + 1
|
||
s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v), n)
|
||
}
|
||
s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, "", -1)
|
||
}
|
||
|
||
func (s *SqlBuilder[T]) buildGroup() {
|
||
for i, v := range s.Opts.groups {
|
||
n := i + 1
|
||
// 如果是最后一个group字段,则不加逗号
|
||
if n == len(s.Opts.groups) {
|
||
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s", v), n)
|
||
} else {
|
||
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s,", v), n)
|
||
}
|
||
}
|
||
s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, "", -1)
|
||
}
|
||
|
||
func (s *SqlBuilder[T]) buildOrder() {
|
||
for i, v := range s.Opts.orders {
|
||
n := i + 1
|
||
// 如果是最后一个order字段,则不加逗号
|
||
if n == len(s.Opts.orders) {
|
||
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s", v), n)
|
||
} else {
|
||
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s,", v), n)
|
||
}
|
||
}
|
||
s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, "", -1)
|
||
}
|
||
|
||
// tdengine专用
|
||
func (s *SqlBuilder[T]) buildPartition() {
|
||
for i, v := range s.Opts.partitions {
|
||
n := i + 1
|
||
// 如果是最后一个partition字段,则不加逗号
|
||
if n == len(s.Opts.partitions) {
|
||
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s", v), n)
|
||
} else {
|
||
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s,", v), n)
|
||
}
|
||
}
|
||
s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, "", -1)
|
||
}
|