From ee2b5ef3200781ebbde970d40ccb34e17c2ff407 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 29 May 2022 20:36:04 +0800 Subject: [PATCH] more refactor --- internal/statements/query.go | 21 ++++++++++++--------- internal/statements/statement.go | 8 ++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/internal/statements/query.go b/internal/statements/query.go index 4d47f336..31228dbb 100644 --- a/internal/statements/query.go +++ b/internal/statements/query.go @@ -297,16 +297,19 @@ func (statement *Statement) genSelectSQL(columnStr string, needLimit, needOrderB } } - var groupStr string - if len(statement.GroupByStr) > 0 { - groupStr = fmt.Sprintf(" GROUP BY %s", statement.GroupByStr) - } - - if _, err := fmt.Fprintf(mssqlCondi, "(%s NOT IN (SELECT TOP %d %s%s%s%s%s))", - column, statement.Start, column, fromStr, whereStr, orderByWriter.String(), groupStr); err != nil { + if _, err := fmt.Fprintf(mssqlCondi, "(%s NOT IN (SELECT TOP %d %s%s%s%s", + column, statement.Start, column, fromStr, whereStr, orderByWriter.String()); err != nil { return "", nil, err } mssqlCondi.Append(orderByWriter.Args()...) + + if err := statement.WriteGroupBy(mssqlCondi); err != nil { + return "", nil, err + } + + if _, err := fmt.Fprint(mssqlCondi, "))"); err != nil { + return "", nil, err + } } } @@ -322,8 +325,8 @@ func (statement *Statement) genSelectSQL(columnStr string, needLimit, needOrderB buf.Append(mssqlCondi.Args()...) } - if statement.GroupByStr != "" { - fmt.Fprint(buf, " GROUP BY ", statement.GroupByStr) + if err := statement.WriteGroupBy(buf); err != nil { + return "", nil, err } if statement.HavingStr != "" { fmt.Fprint(buf, " ", statement.HavingStr) diff --git a/internal/statements/statement.go b/internal/statements/statement.go index 86d58d55..9255b478 100644 --- a/internal/statements/statement.go +++ b/internal/statements/statement.go @@ -598,6 +598,14 @@ func (statement *Statement) GroupBy(keys string) *Statement { return statement } +func (statement *Statement) WriteGroupBy(w builder.Writer) error { + if len(statement.GroupByStr) > 0 { + _, err := fmt.Fprintf(w, " GROUP BY %s", statement.GroupByStr) + return err + } + return nil +} + // Having generate "Having conditions" statement func (statement *Statement) Having(conditions string) *Statement { statement.HavingStr = fmt.Sprintf("HAVING %v", statement.ReplaceQuote(conditions))