98 lines
2.9 KiB
Go
98 lines
2.9 KiB
Go
package db
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"git.botann.com/lj_wsdj/sqlbuilder/util"
|
||
)
|
||
|
||
func (c *Condition) dealCondition() {
|
||
if strings.HasPrefix(c.Cond, " and") {
|
||
c.Cond = strings.Join(strings.Split(c.Cond, " and")[1:], " and ")
|
||
}
|
||
c.Cond, c.Args = dealInCondition(c.Cond, c.Args)
|
||
}
|
||
|
||
func (s *SqlBuilder[T]) buildSql() string {
|
||
s.buildSelect()
|
||
s.buildGroup()
|
||
s.buildOrder()
|
||
s.buildPartition()
|
||
s.buildCondition()
|
||
return s.Opts.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.Opts.Sql = strings.Replace(s.Opts.Sql, util.SelectPlaceholder, fmt.Sprintf("%s", v), n)
|
||
} else {
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.SelectPlaceholder, fmt.Sprintf("%s,", v), n)
|
||
}
|
||
}
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.SelectPlaceholder, "", -1)
|
||
}
|
||
|
||
func (s *SqlBuilder[T]) buildCondition() {
|
||
for i, v := range s.Opts.Conditions {
|
||
n := i + 1
|
||
v.dealCondition()
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v.Cond), n)
|
||
}
|
||
s.Opts.Sql = strings.Replace(s.Opts.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.Opts.Sql = strings.Replace(s.Opts.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s", v), n)
|
||
} else {
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s,", v), n)
|
||
}
|
||
}
|
||
s.Opts.Sql = strings.Replace(s.Opts.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.Opts.Sql = strings.Replace(s.Opts.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s", v), n)
|
||
} else {
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s,", v), n)
|
||
}
|
||
}
|
||
s.Opts.Sql = strings.Replace(s.Opts.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.Opts.Sql = strings.Replace(s.Opts.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s", v), n)
|
||
} else {
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s,", v), n)
|
||
}
|
||
}
|
||
s.Opts.Sql = strings.Replace(s.Opts.Sql, util.PartitionPlaceholder, "", -1)
|
||
}
|