From 9beffba8ed0721043cdb48efd25e21d7e5d44268 Mon Sep 17 00:00:00 2001 From: tangpanqing Date: Fri, 6 Jan 2023 07:12:36 +0800 Subject: [PATCH] update --- builder/builder.go | 5 +++++ builder/crud.go | 15 +++++++++++---- builder/handle.go | 2 +- builder/having.go | 6 +++--- test/aorm_test.go | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/builder/builder.go b/builder/builder.go index f3e8da0..3632c9a 100644 --- a/builder/builder.go +++ b/builder/builder.go @@ -16,6 +16,11 @@ type FieldInfo struct { Name string } +type GroupItem struct { + Prefix string + Field interface{} +} + type WhereItem struct { FuncName string Prefix string diff --git a/builder/crud.go b/builder/crud.go index 2daea2f..0f2d437 100644 --- a/builder/crud.go +++ b/builder/crud.go @@ -51,7 +51,7 @@ type Builder struct { tableName string selectList []SelectItem selectExpList []*SelectItem - groupList []interface{} + groupList []GroupItem whereList []WhereItem joinList []JoinItem havingList []WhereItem @@ -568,8 +568,11 @@ func (b *Builder) Table(table interface{}, alias ...string) *Builder { } // GroupBy 链式操作,以某字段进行分组 -func (ex *Builder) GroupBy(fieldName interface{}) *Builder { - ex.groupList = append(ex.groupList, fieldName) +func (ex *Builder) GroupBy(field interface{}, prefix ...string) *Builder { + ex.groupList = append(ex.groupList, GroupItem{ + Prefix: getPrefixByField(field, prefix...), + Field: field, + }) return ex } @@ -608,7 +611,11 @@ func (ex *Builder) LockForUpdate(isLockForUpdate bool) *Builder { func (ex *Builder) whereAndHaving(where []WhereItem, paramList []any) ([]string, []any) { var whereList []string for i := 0; i < len(where); i++ { - allFieldName := where[i].Prefix + "." + getFieldName(where[i].Field) + allFieldName := "" + if where[i].Prefix != "" { + allFieldName += where[i].Prefix + "." + } + allFieldName += getFieldName(where[i].Field) if where[i].FuncName != "" { allFieldName = where[i].FuncName + "(" + allFieldName + ")" } diff --git a/builder/handle.go b/builder/handle.go index 0baeb0a..0d0ae28 100644 --- a/builder/handle.go +++ b/builder/handle.go @@ -117,7 +117,7 @@ func (ex *Builder) handleGroup(paramList []any) (string, []any) { var groupList []string for i := 0; i < len(ex.groupList); i++ { - groupList = append(groupList, getFieldName(ex.groupList[i])) + groupList = append(groupList, ex.groupList[i].Prefix+"."+getFieldName(ex.groupList[i].Field)) } return " GROUP BY " + strings.Join(groupList, ","), paramList diff --git a/builder/having.go b/builder/having.go index d1e7551..09d9ac3 100644 --- a/builder/having.go +++ b/builder/having.go @@ -55,10 +55,10 @@ func (ex *Builder) HavingNe(funcName string, field interface{}, val interface{}, return ex } -func (ex *Builder) HavingGt(funcName string, field interface{}, val interface{}, prefix ...string) *Builder { +func (ex *Builder) HavingGt(field interface{}, val interface{}, prefix ...string) *Builder { ex.havingList = append(ex.havingList, WhereItem{ - FuncName: funcName, - Prefix: getPrefixByField(field, prefix...), + FuncName: "", + Prefix: "", Field: field, Opt: Gt, Val: val, diff --git a/test/aorm_test.go b/test/aorm_test.go index 256e9f8..8c70241 100644 --- a/test/aorm_test.go +++ b/test/aorm_test.go @@ -461,7 +461,7 @@ func testHaving(driver string, db *sql.DB) { GroupBy(&person.Age). WhereEq(&person.Type, 0). OrderBy(&person.Age, builder.Desc). - HavingGt(builder.Count, &person.Age, 4). + HavingGt(&personAge.AgeCount, 4). GetMany(&listByHaving) if err != nil { panic(driver + " testHaving " + "found err")