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) }