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 { // 如果是最后一个select字段,则不加逗号 if i == len(s.Opts.selects)-1 { s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s", v), 1) } else { s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf("%s,", v), 1) } } s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, "", -1) } func (s *SqlBuilder[T]) buildCondition() { for _, v := range s.Opts.conditions { s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v), 1) } s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, "", -1) } func (s *SqlBuilder[T]) buildGroup() { for i, v := range s.Opts.groups { // 如果是最后一个group字段,则不加逗号 if i == len(s.Opts.groups)-1 { s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s", v), 1) } else { s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(" %s,", v), 1) } } s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, "", -1) } func (s *SqlBuilder[T]) buildOrder() { for i, v := range s.Opts.orders { // 如果是最后一个order字段,则不加逗号 if i == len(s.Opts.orders)-1 { s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s", v), 1) } else { s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(" %s,", v), 1) } } s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, "", -1) } // tdengine专用 func (s *SqlBuilder[T]) buildPartition() { for i, v := range s.Opts.partitions { // 如果是最后一个partition字段,则不加逗号 if i == len(s.Opts.partitions)-1 { s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s", v), 1) } else { s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(" %s,", v), 1) } } s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, "", -1) }