fix tests for mysql 5.7
This commit is contained in:
parent
6307f69f18
commit
304baabb12
23
generics.go
23
generics.go
@ -404,8 +404,7 @@ func (c chainG[T]) Preload(association string, query func(db PreloadBuilder) err
|
|||||||
|
|
||||||
if q.limitPerRecord > 0 {
|
if q.limitPerRecord > 0 {
|
||||||
if relation.JoinTable != nil {
|
if relation.JoinTable != nil {
|
||||||
err := fmt.Errorf("many2many relation %s don't support LimitPerRecord", association)
|
tx.AddError(fmt.Errorf("many2many relation %s don't support LimitPerRecord", association))
|
||||||
tx.AddError(err)
|
|
||||||
return tx
|
return tx
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,14 +416,13 @@ func (c chainG[T]) Preload(association string, query func(db PreloadBuilder) err
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(refColumns) != 0 {
|
if len(refColumns) != 0 {
|
||||||
selects := q.db.Statement.Selects
|
|
||||||
selectExpr := clause.CommaExpression{}
|
selectExpr := clause.CommaExpression{}
|
||||||
if len(selects) == 0 {
|
for _, column := range q.db.Statement.Selects {
|
||||||
|
selectExpr.Exprs = append(selectExpr.Exprs, clause.Expr{SQL: "?", Vars: []interface{}{clause.Column{Name: column}}})
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(selectExpr.Exprs) == 0 {
|
||||||
selectExpr.Exprs = []clause.Expression{clause.Expr{SQL: "*", Vars: []interface{}{}}}
|
selectExpr.Exprs = []clause.Expression{clause.Expr{SQL: "*", Vars: []interface{}{}}}
|
||||||
} else {
|
|
||||||
for _, column := range selects {
|
|
||||||
selectExpr.Exprs = append(selectExpr.Exprs, clause.Expr{SQL: "?", Vars: []interface{}{clause.Column{Name: column}}})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
partitionBy := clause.CommaExpression{}
|
partitionBy := clause.CommaExpression{}
|
||||||
@ -439,22 +437,19 @@ func (c chainG[T]) Preload(association string, query func(db PreloadBuilder) err
|
|||||||
vars = append(vars, orderBy)
|
vars = append(vars, orderBy)
|
||||||
} else {
|
} else {
|
||||||
vars = append(vars, clause.Clause{Name: "ORDER BY", Expression: clause.OrderBy{
|
vars = append(vars, clause.Clause{Name: "ORDER BY", Expression: clause.OrderBy{
|
||||||
Columns: []clause.OrderByColumn{
|
Columns: []clause.OrderByColumn{{Column: clause.PrimaryColumn, Desc: true}},
|
||||||
{Column: clause.PrimaryColumn, Desc: false},
|
|
||||||
},
|
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
vars = append(vars, rnnColumn)
|
vars = append(vars, rnnColumn)
|
||||||
|
|
||||||
selectExpr.Exprs = append(selectExpr.Exprs, clause.Expr{SQL: sql + " AS ?", Vars: vars})
|
selectExpr.Exprs = append(selectExpr.Exprs, clause.Expr{SQL: sql + " AS ?", Vars: vars})
|
||||||
|
|
||||||
q.db.Clauses(clause.Select{
|
q.db.Clauses(clause.Select{Expression: selectExpr})
|
||||||
Expression: selectExpr,
|
|
||||||
})
|
|
||||||
|
|
||||||
return q.db.Session(&Session{NewDB: true}).Unscoped().Table("(?) t", q.db).Where("? <= ?", rnnColumn, q.limitPerRecord)
|
return q.db.Session(&Session{NewDB: true}).Unscoped().Table("(?) t", q.db).Where("? <= ?", rnnColumn, q.limitPerRecord)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return q.db
|
return q.db
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -6,8 +6,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
. "gorm.io/gorm/utils/tests"
|
. "gorm.io/gorm/utils/tests"
|
||||||
@ -420,6 +422,12 @@ func TestGenericsPreloads(t *testing.T) {
|
|||||||
t.Fatalf("Preload should failed, but got nil")
|
t.Fatalf("Preload should failed, but got nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if DB.Dialector.Name() == "mysql" {
|
||||||
|
// mysql 5.7 doesn't support row_number()
|
||||||
|
if strings.HasPrefix(DB.Dialector.(*mysql.Dialector).ServerVersion, "5.7") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
results, err = db.Preload("Pets", func(db gorm.PreloadBuilder) error {
|
results, err = db.Preload("Pets", func(db gorm.PreloadBuilder) error {
|
||||||
db.LimitPerRecord(5)
|
db.LimitPerRecord(5)
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user