fix tests for mysql 5.7

This commit is contained in:
Jinzhu 2025-05-21 22:07:20 +08:00
parent 6307f69f18
commit 304baabb12
2 changed files with 17 additions and 14 deletions

View File

@ -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
}) })
}) })

View File

@ -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