diff --git a/db/build.go b/db/build.go index ff0106f..6a2ef74 100644 --- a/db/build.go +++ b/db/build.go @@ -25,32 +25,52 @@ func (s *SqlBuilder[T]) buildCountSql(sqls string) string { func (s *SqlBuilder[T]) buildSelect(selects ...string) { for _, v := range selects { - s.Sql = strings.Replace(s.Sql, util.SelectPlaceholder, fmt.Sprintf(",%s", v), 1) + if strings.HasPrefix(v, "select") { + 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) + } } } func (s *SqlBuilder[T]) buildCondition(conds ...string) { for _, v := range conds { - s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v), 1) + if strings.HasPrefix(v, "where") { + s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" %s", v), 1) + } else { + s.Sql = strings.Replace(s.Sql, util.ConditionPlaceholder, fmt.Sprintf(" and %s", v), 1) + } } } func (s *SqlBuilder[T]) buildGroup(groups ...string) { for _, v := range groups { - s.Sql = strings.Replace(s.Sql, util.GroupPlaceholder, fmt.Sprintf(",%s", v), 1) + if strings.HasPrefix(v, "group by") { + 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) + } } } func (s *SqlBuilder[T]) buildOrder(orders ...string) { for _, v := range orders { - s.Sql = strings.Replace(s.Sql, util.OrderPlaceholder, fmt.Sprintf(",%s", v), 1) + if strings.HasPrefix(v, "order by") { + 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) + } } } // tdengine专用 func (s *SqlBuilder[T]) buildPartition(partitions ...string) { for _, v := range partitions { - s.Sql = strings.Replace(s.Sql, util.PartitionPlaceholder, fmt.Sprintf(",%s", v), 1) + if strings.HasPrefix(v, "partition by") { + 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) + } } } diff --git a/main_test.go b/main_test.go index 3ca26f9..59106e1 100644 --- a/main_test.go +++ b/main_test.go @@ -76,11 +76,12 @@ func TestMain(m *testing.M) { left join tinvestment_type t3 on t1.industry_category_id = t3.autoseq and t3.del = 0 left join tpreliminary_procedures t6 on t1.autoseq = t6.project_id where t1.del = 0 @c @c @c @c @c - group by t1.autoseq` + @g` sqlb.Sql = slqs if company_id != 0 { sqlb.Conditions("t2.autoseq = ?", company_id) } + sqlb.Groups("group by t1.autoseq") fmt.Println(sqlb) var err error page := Page{PageIndex: 2, PageSize: 10}