mirror of
https://github.com/tangpanqing/aorm.git
synced 2025-10-07 00:43:26 +08:00
update
This commit is contained in:
@@ -16,6 +16,11 @@ type FieldInfo struct {
|
|||||||
Name string
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GroupItem struct {
|
||||||
|
Prefix string
|
||||||
|
Field interface{}
|
||||||
|
}
|
||||||
|
|
||||||
type WhereItem struct {
|
type WhereItem struct {
|
||||||
FuncName string
|
FuncName string
|
||||||
Prefix string
|
Prefix string
|
||||||
|
@@ -51,7 +51,7 @@ type Builder struct {
|
|||||||
tableName string
|
tableName string
|
||||||
selectList []SelectItem
|
selectList []SelectItem
|
||||||
selectExpList []*SelectItem
|
selectExpList []*SelectItem
|
||||||
groupList []interface{}
|
groupList []GroupItem
|
||||||
whereList []WhereItem
|
whereList []WhereItem
|
||||||
joinList []JoinItem
|
joinList []JoinItem
|
||||||
havingList []WhereItem
|
havingList []WhereItem
|
||||||
@@ -568,8 +568,11 @@ func (b *Builder) Table(table interface{}, alias ...string) *Builder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GroupBy 链式操作,以某字段进行分组
|
// GroupBy 链式操作,以某字段进行分组
|
||||||
func (ex *Builder) GroupBy(fieldName interface{}) *Builder {
|
func (ex *Builder) GroupBy(field interface{}, prefix ...string) *Builder {
|
||||||
ex.groupList = append(ex.groupList, fieldName)
|
ex.groupList = append(ex.groupList, GroupItem{
|
||||||
|
Prefix: getPrefixByField(field, prefix...),
|
||||||
|
Field: field,
|
||||||
|
})
|
||||||
return ex
|
return ex
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -608,7 +611,11 @@ func (ex *Builder) LockForUpdate(isLockForUpdate bool) *Builder {
|
|||||||
func (ex *Builder) whereAndHaving(where []WhereItem, paramList []any) ([]string, []any) {
|
func (ex *Builder) whereAndHaving(where []WhereItem, paramList []any) ([]string, []any) {
|
||||||
var whereList []string
|
var whereList []string
|
||||||
for i := 0; i < len(where); i++ {
|
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 != "" {
|
if where[i].FuncName != "" {
|
||||||
allFieldName = where[i].FuncName + "(" + allFieldName + ")"
|
allFieldName = where[i].FuncName + "(" + allFieldName + ")"
|
||||||
}
|
}
|
||||||
|
@@ -117,7 +117,7 @@ func (ex *Builder) handleGroup(paramList []any) (string, []any) {
|
|||||||
|
|
||||||
var groupList []string
|
var groupList []string
|
||||||
for i := 0; i < len(ex.groupList); i++ {
|
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
|
return " GROUP BY " + strings.Join(groupList, ","), paramList
|
||||||
|
@@ -55,10 +55,10 @@ func (ex *Builder) HavingNe(funcName string, field interface{}, val interface{},
|
|||||||
return ex
|
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{
|
ex.havingList = append(ex.havingList, WhereItem{
|
||||||
FuncName: funcName,
|
FuncName: "",
|
||||||
Prefix: getPrefixByField(field, prefix...),
|
Prefix: "",
|
||||||
Field: field,
|
Field: field,
|
||||||
Opt: Gt,
|
Opt: Gt,
|
||||||
Val: val,
|
Val: val,
|
||||||
|
@@ -461,7 +461,7 @@ func testHaving(driver string, db *sql.DB) {
|
|||||||
GroupBy(&person.Age).
|
GroupBy(&person.Age).
|
||||||
WhereEq(&person.Type, 0).
|
WhereEq(&person.Type, 0).
|
||||||
OrderBy(&person.Age, builder.Desc).
|
OrderBy(&person.Age, builder.Desc).
|
||||||
HavingGt(builder.Count, &person.Age, 4).
|
HavingGt(&personAge.AgeCount, 4).
|
||||||
GetMany(&listByHaving)
|
GetMany(&listByHaving)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(driver + " testHaving " + "found err")
|
panic(driver + " testHaving " + "found err")
|
||||||
|
Reference in New Issue
Block a user