forked from mirror/gorm
ci: add gofumpt check in reviewdog (#4973)
This commit is contained in:
parent
4dd2647967
commit
b47cf57f5e
|
@ -9,3 +9,14 @@ jobs:
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: golangci-lint
|
- name: golangci-lint
|
||||||
uses: reviewdog/action-golangci-lint@v2
|
uses: reviewdog/action-golangci-lint@v2
|
||||||
|
|
||||||
|
- name: Setup reviewdog
|
||||||
|
uses: reviewdog/action-setup@v1
|
||||||
|
|
||||||
|
- name: gofumpt -s with reviewdog
|
||||||
|
env:
|
||||||
|
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
go install mvdan.cc/gofumpt@v0.2.0
|
||||||
|
gofumpt -e -d . | \
|
||||||
|
reviewdog -name="gofumpt" -f=diff -f.diff.strip=0 -reporter=github-pr-review
|
|
@ -12,7 +12,7 @@ func ConvertMapToValuesForCreate(stmt *gorm.Statement, mapValue map[string]inter
|
||||||
values.Columns = make([]clause.Column, 0, len(mapValue))
|
values.Columns = make([]clause.Column, 0, len(mapValue))
|
||||||
selectColumns, restricted := stmt.SelectAndOmitColumns(true, false)
|
selectColumns, restricted := stmt.SelectAndOmitColumns(true, false)
|
||||||
|
|
||||||
var keys = make([]string, 0, len(mapValue))
|
keys := make([]string, 0, len(mapValue))
|
||||||
for k := range mapValue {
|
for k := range mapValue {
|
||||||
keys = append(keys, k)
|
keys = append(keys, k)
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,7 @@ func ConvertMapToValuesForCreate(stmt *gorm.Statement, mapValue map[string]inter
|
||||||
|
|
||||||
// ConvertSliceOfMapToValuesForCreate convert slice of map to values
|
// ConvertSliceOfMapToValuesForCreate convert slice of map to values
|
||||||
func ConvertSliceOfMapToValuesForCreate(stmt *gorm.Statement, mapValues []map[string]interface{}) (values clause.Values) {
|
func ConvertSliceOfMapToValuesForCreate(stmt *gorm.Statement, mapValues []map[string]interface{}) (values clause.Values) {
|
||||||
var (
|
columns := make([]string, 0, len(mapValues))
|
||||||
columns = make([]string, 0, len(mapValues))
|
|
||||||
)
|
|
||||||
|
|
||||||
// when the length of mapValues is zero,return directly here
|
// when the length of mapValues is zero,return directly here
|
||||||
// no need to call stmt.SelectAndOmitColumns method
|
// no need to call stmt.SelectAndOmitColumns method
|
||||||
|
|
|
@ -162,7 +162,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
|
||||||
if size := stmt.ReflectValue.Len(); size > 0 {
|
if size := stmt.ReflectValue.Len(); size > 0 {
|
||||||
var primaryKeyExprs []clause.Expression
|
var primaryKeyExprs []clause.Expression
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
var exprs = make([]clause.Expression, len(stmt.Schema.PrimaryFields))
|
exprs := make([]clause.Expression, len(stmt.Schema.PrimaryFields))
|
||||||
var notZero bool
|
var notZero bool
|
||||||
for idx, field := range stmt.Schema.PrimaryFields {
|
for idx, field := range stmt.Schema.PrimaryFields {
|
||||||
value, isZero := field.ValueOf(stmt.ReflectValue.Index(i))
|
value, isZero := field.ValueOf(stmt.ReflectValue.Index(i))
|
||||||
|
@ -242,7 +242,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
var updatingSchema = stmt.Schema
|
updatingSchema := stmt.Schema
|
||||||
if !updatingValue.CanAddr() || stmt.Dest != stmt.Model {
|
if !updatingValue.CanAddr() || stmt.Dest != stmt.Model {
|
||||||
// different schema
|
// different schema
|
||||||
updatingStmt := &gorm.Statement{DB: stmt.DB}
|
updatingStmt := &gorm.Statement{DB: stmt.DB}
|
||||||
|
|
|
@ -32,7 +32,8 @@ func BenchmarkComplexSelect(b *testing.B) {
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
stmt := gorm.Statement{DB: db, Table: user.Table, Schema: user, Clauses: map[string]clause.Clause{}}
|
stmt := gorm.Statement{DB: db, Table: user.Table, Schema: user, Clauses: map[string]clause.Clause{}}
|
||||||
clauses := []clause.Interface{
|
clauses := []clause.Interface{
|
||||||
clause.Select{}, clause.From{},
|
clause.Select{},
|
||||||
|
clause.From{},
|
||||||
clause.Where{Exprs: []clause.Expression{
|
clause.Where{Exprs: []clause.Expression{
|
||||||
clause.Eq{Column: clause.PrimaryColumn, Value: "1"},
|
clause.Eq{Column: clause.PrimaryColumn, Value: "1"},
|
||||||
clause.Gt{Column: "age", Value: 18},
|
clause.Gt{Column: "age", Value: 18},
|
||||||
|
|
|
@ -18,7 +18,8 @@ func TestGroupBy(t *testing.T) {
|
||||||
Columns: []clause.Column{{Name: "role"}},
|
Columns: []clause.Column{{Name: "role"}},
|
||||||
Having: []clause.Expression{clause.Eq{"role", "admin"}},
|
Having: []clause.Expression{clause.Eq{"role", "admin"}},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` GROUP BY `role` HAVING `role` = ?", []interface{}{"admin"},
|
"SELECT * FROM `users` GROUP BY `role` HAVING `role` = ?",
|
||||||
|
[]interface{}{"admin"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.GroupBy{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.GroupBy{
|
||||||
|
@ -28,7 +29,8 @@ func TestGroupBy(t *testing.T) {
|
||||||
Columns: []clause.Column{{Name: "gender"}},
|
Columns: []clause.Column{{Name: "gender"}},
|
||||||
Having: []clause.Expression{clause.Neq{"gender", "U"}},
|
Having: []clause.Expression{clause.Neq{"gender", "U"}},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` GROUP BY `role`,`gender` HAVING `role` = ? AND `gender` <> ?", []interface{}{"admin", "U"},
|
"SELECT * FROM `users` GROUP BY `role`,`gender` HAVING `role` = ? AND `gender` <> ?",
|
||||||
|
[]interface{}{"admin", "U"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,8 @@ func TestOrderBy(t *testing.T) {
|
||||||
Expression: clause.Expr{SQL: "FIELD(id, ?)", Vars: []interface{}{[]int{1, 2, 3}}, WithoutParentheses: true},
|
Expression: clause.Expr{SQL: "FIELD(id, ?)", Vars: []interface{}{[]int{1, 2, 3}}, WithoutParentheses: true},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"SELECT * FROM `users` ORDER BY FIELD(id, ?,?,?)", []interface{}{1, 2, 3},
|
"SELECT * FROM `users` ORDER BY FIELD(id, ?,?,?)",
|
||||||
|
[]interface{}{1, 2, 3},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,8 @@ func TestSet(t *testing.T) {
|
||||||
clause.Update{},
|
clause.Update{},
|
||||||
clause.Set([]clause.Assignment{{clause.PrimaryColumn, 1}}),
|
clause.Set([]clause.Assignment{{clause.PrimaryColumn, 1}}),
|
||||||
},
|
},
|
||||||
"UPDATE `users` SET `users`.`id`=?", []interface{}{1},
|
"UPDATE `users` SET `users`.`id`=?",
|
||||||
|
[]interface{}{1},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{
|
[]clause.Interface{
|
||||||
|
@ -28,7 +29,8 @@ func TestSet(t *testing.T) {
|
||||||
clause.Set([]clause.Assignment{{clause.PrimaryColumn, 1}}),
|
clause.Set([]clause.Assignment{{clause.PrimaryColumn, 1}}),
|
||||||
clause.Set([]clause.Assignment{{clause.Column{Name: "name"}, "jinzhu"}}),
|
clause.Set([]clause.Assignment{{clause.Column{Name: "name"}, "jinzhu"}}),
|
||||||
},
|
},
|
||||||
"UPDATE `users` SET `name`=?", []interface{}{"jinzhu"},
|
"UPDATE `users` SET `name`=?",
|
||||||
|
[]interface{}{"jinzhu"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,8 @@ func TestValues(t *testing.T) {
|
||||||
Values: [][]interface{}{{"jinzhu", 18}, {"josh", 1}},
|
Values: [][]interface{}{{"jinzhu", 18}, {"josh", 1}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"INSERT INTO `users` (`name`,`age`) VALUES (?,?),(?,?)", []interface{}{"jinzhu", 18, "josh", 1},
|
"INSERT INTO `users` (`name`,`age`) VALUES (?,?),(?,?)",
|
||||||
|
[]interface{}{"jinzhu", 18, "josh", 1},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,25 +17,29 @@ func TestWhere(t *testing.T) {
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
|
Exprs: []clause.Expression{clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ?", []interface{}{"1", 18, "jinzhu"},
|
"SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ?",
|
||||||
|
[]interface{}{"1", 18, "jinzhu"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
|
Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?", []interface{}{"1", "jinzhu", 18},
|
"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?",
|
||||||
|
[]interface{}{"1", "jinzhu", 18},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
|
Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?", []interface{}{"1", "jinzhu", 18},
|
"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?",
|
||||||
|
[]interface{}{"1", "jinzhu", 18},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.Or(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
|
Exprs: []clause.Expression{clause.Or(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ?", []interface{}{"1", "jinzhu"},
|
"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ?",
|
||||||
|
[]interface{}{"1", "jinzhu"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
|
@ -43,7 +47,8 @@ func TestWhere(t *testing.T) {
|
||||||
}, clause.Where{
|
}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.Or(clause.Gt{Column: "score", Value: 100}, clause.Like{Column: "name", Value: "%linus%"})},
|
Exprs: []clause.Expression{clause.Or(clause.Gt{Column: "score", Value: 100}, clause.Like{Column: "name", Value: "%linus%"})},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ? AND (`score` > ? OR `name` LIKE ?)", []interface{}{"1", 18, "jinzhu", 100, "%linus%"},
|
"SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ? AND (`score` > ? OR `name` LIKE ?)",
|
||||||
|
[]interface{}{"1", 18, "jinzhu", 100, "%linus%"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
|
@ -51,13 +56,15 @@ func TestWhere(t *testing.T) {
|
||||||
}, clause.Where{
|
}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.Or(clause.Not(clause.Gt{Column: "score", Value: 100}), clause.Like{Column: "name", Value: "%linus%"})},
|
Exprs: []clause.Expression{clause.Or(clause.Not(clause.Gt{Column: "score", Value: 100}), clause.Like{Column: "name", Value: "%linus%"})},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) OR `name` <> ? AND (`score` <= ? OR `name` LIKE ?)", []interface{}{"1", 18, "jinzhu", 100, "%linus%"},
|
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) OR `name` <> ? AND (`score` <= ? OR `name` LIKE ?)",
|
||||||
|
[]interface{}{"1", 18, "jinzhu", 100, "%linus%"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||||
Exprs: []clause.Expression{clause.And(clause.Eq{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}))},
|
Exprs: []clause.Expression{clause.And(clause.Eq{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}))},
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` WHERE (`age` = ? OR `name` <> ?)", []interface{}{18, "jinzhu"},
|
"SELECT * FROM `users` WHERE (`age` = ? OR `name` <> ?)",
|
||||||
|
[]interface{}{18, "jinzhu"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
package clause
|
package clause
|
||||||
|
|
||||||
type With struct {
|
type With struct{}
|
||||||
}
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ var convertibleTypes = []reflect.Type{reflect.TypeOf(time.Time{}), reflect.TypeO
|
||||||
|
|
||||||
func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, avars ...interface{}) string {
|
func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, avars ...interface{}) string {
|
||||||
var convertParams func(interface{}, int)
|
var convertParams func(interface{}, int)
|
||||||
var vars = make([]string, len(avars))
|
vars := make([]string, len(avars))
|
||||||
|
|
||||||
convertParams = func(v interface{}, idx int) {
|
convertParams = func(v interface{}, idx int) {
|
||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
|
|
|
@ -541,7 +541,7 @@ func (m Migrator) CreateConstraint(value interface{}, name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if constraint != nil {
|
if constraint != nil {
|
||||||
var vars = []interface{}{clause.Table{Name: table}}
|
vars := []interface{}{clause.Table{Name: table}}
|
||||||
if stmt.TableExpr != nil {
|
if stmt.TableExpr != nil {
|
||||||
vars[0] = stmt.TableExpr
|
vars[0] = stmt.TableExpr
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,7 @@ import (
|
||||||
"gorm.io/gorm/schema"
|
"gorm.io/gorm/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserWithCallback struct {
|
type UserWithCallback struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func (UserWithCallback) BeforeSave(*gorm.DB) error {
|
func (UserWithCallback) BeforeSave(*gorm.DB) error {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -5,10 +5,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
// reg match english letters and midline
|
||||||
// reg match english letters and midline
|
var regEnLetterAndMidline = regexp.MustCompile("^[A-Za-z-_]+$")
|
||||||
regEnLetterAndMidline = regexp.MustCompile("^[A-Za-z-_]+$")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Check struct {
|
type Check struct {
|
||||||
Name string
|
Name string
|
||||||
|
@ -18,7 +16,7 @@ type Check struct {
|
||||||
|
|
||||||
// ParseCheckConstraints parse schema check constraints
|
// ParseCheckConstraints parse schema check constraints
|
||||||
func (schema *Schema) ParseCheckConstraints() map[string]Check {
|
func (schema *Schema) ParseCheckConstraints() map[string]Check {
|
||||||
var checks = map[string]Check{}
|
checks := map[string]Check{}
|
||||||
for _, field := range schema.FieldsByDBName {
|
for _, field := range schema.FieldsByDBName {
|
||||||
if chk := field.TagSettings["CHECK"]; chk != "" {
|
if chk := field.TagSettings["CHECK"]; chk != "" {
|
||||||
names := strings.Split(chk, ",")
|
names := strings.Split(chk, ",")
|
||||||
|
|
|
@ -398,8 +398,8 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
|
||||||
ef.TagSettings[k] = v
|
ef.TagSettings[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case reflect.Invalid, reflect.Uintptr, reflect.Array, reflect.Chan, reflect.Func, reflect.Interface,
|
case reflect.Invalid, reflect.Uintptr, reflect.Array, reflect.Chan, reflect.Func, reflect.Interface,
|
||||||
reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer, reflect.Complex64, reflect.Complex128:
|
reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer, reflect.Complex64, reflect.Complex128:
|
||||||
schema.err = fmt.Errorf("invalid embedded struct for %s's field %s, should be struct, but got %v", field.Schema.Name, field.Name, field.FieldType)
|
schema.err = fmt.Errorf("invalid embedded struct for %s's field %s, should be struct, but got %v", field.Schema.Name, field.Name, field.FieldType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,61 +261,63 @@ func TestParseFieldWithPermission(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ID int64
|
type (
|
||||||
type INT int
|
ID int64
|
||||||
type INT8 int8
|
INT int
|
||||||
type INT16 int16
|
INT8 int8
|
||||||
type INT32 int32
|
INT16 int16
|
||||||
type INT64 int64
|
INT32 int32
|
||||||
type UINT uint
|
INT64 int64
|
||||||
type UINT8 uint8
|
UINT uint
|
||||||
type UINT16 uint16
|
UINT8 uint8
|
||||||
type UINT32 uint32
|
UINT16 uint16
|
||||||
type UINT64 uint64
|
UINT32 uint32
|
||||||
type FLOAT32 float32
|
UINT64 uint64
|
||||||
type FLOAT64 float64
|
FLOAT32 float32
|
||||||
type BOOL bool
|
FLOAT64 float64
|
||||||
type STRING string
|
BOOL bool
|
||||||
type TypeAlias struct {
|
STRING string
|
||||||
ID
|
TypeAlias struct {
|
||||||
INT `gorm:"column:fint"`
|
ID
|
||||||
INT8 `gorm:"column:fint8"`
|
INT `gorm:"column:fint"`
|
||||||
INT16 `gorm:"column:fint16"`
|
INT8 `gorm:"column:fint8"`
|
||||||
INT32 `gorm:"column:fint32"`
|
INT16 `gorm:"column:fint16"`
|
||||||
INT64 `gorm:"column:fint64"`
|
INT32 `gorm:"column:fint32"`
|
||||||
UINT `gorm:"column:fuint"`
|
INT64 `gorm:"column:fint64"`
|
||||||
UINT8 `gorm:"column:fuint8"`
|
UINT `gorm:"column:fuint"`
|
||||||
UINT16 `gorm:"column:fuint16"`
|
UINT8 `gorm:"column:fuint8"`
|
||||||
UINT32 `gorm:"column:fuint32"`
|
UINT16 `gorm:"column:fuint16"`
|
||||||
UINT64 `gorm:"column:fuint64"`
|
UINT32 `gorm:"column:fuint32"`
|
||||||
FLOAT32 `gorm:"column:ffloat32"`
|
UINT64 `gorm:"column:fuint64"`
|
||||||
FLOAT64 `gorm:"column:ffloat64"`
|
FLOAT32 `gorm:"column:ffloat32"`
|
||||||
BOOL `gorm:"column:fbool"`
|
FLOAT64 `gorm:"column:ffloat64"`
|
||||||
STRING `gorm:"column:fstring"`
|
BOOL `gorm:"column:fbool"`
|
||||||
}
|
STRING `gorm:"column:fstring"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
func TestTypeAliasField(t *testing.T){
|
func TestTypeAliasField(t *testing.T) {
|
||||||
alias, err := schema.Parse(&TypeAlias{}, &sync.Map{}, schema.NamingStrategy{})
|
alias, err := schema.Parse(&TypeAlias{}, &sync.Map{}, schema.NamingStrategy{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Failed to parse TypeAlias with permission, got error %v", err)
|
t.Fatalf("Failed to parse TypeAlias with permission, got error %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := []*schema.Field{
|
fields := []*schema.Field{
|
||||||
{Name: "ID", DBName: "id", BindNames: []string{"ID"}, DataType: schema.Int , Creatable: true, Updatable: true, Readable: true, Size: 64, PrimaryKey: true, HasDefaultValue: true, AutoIncrement: true },
|
{Name: "ID", DBName: "id", BindNames: []string{"ID"}, DataType: schema.Int, Creatable: true, Updatable: true, Readable: true, Size: 64, PrimaryKey: true, HasDefaultValue: true, AutoIncrement: true},
|
||||||
{Name: "INT", DBName: "fint", BindNames: []string{"INT"}, DataType: schema.Int , Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fint"`},
|
{Name: "INT", DBName: "fint", BindNames: []string{"INT"}, DataType: schema.Int, Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fint"`},
|
||||||
{Name: "INT8", DBName: "fint8", BindNames: []string{"INT8"}, DataType: schema.Int , Creatable: true, Updatable: true, Readable: true, Size: 8, Tag: `gorm:"column:fint8"`},
|
{Name: "INT8", DBName: "fint8", BindNames: []string{"INT8"}, DataType: schema.Int, Creatable: true, Updatable: true, Readable: true, Size: 8, Tag: `gorm:"column:fint8"`},
|
||||||
{Name: "INT16", DBName: "fint16", BindNames: []string{"INT16"}, DataType: schema.Int , Creatable: true, Updatable: true, Readable: true, Size: 16, Tag: `gorm:"column:fint16"`},
|
{Name: "INT16", DBName: "fint16", BindNames: []string{"INT16"}, DataType: schema.Int, Creatable: true, Updatable: true, Readable: true, Size: 16, Tag: `gorm:"column:fint16"`},
|
||||||
{Name: "INT32", DBName: "fint32", BindNames: []string{"INT32"}, DataType: schema.Int , Creatable: true, Updatable: true, Readable: true, Size: 32, Tag: `gorm:"column:fint32"`},
|
{Name: "INT32", DBName: "fint32", BindNames: []string{"INT32"}, DataType: schema.Int, Creatable: true, Updatable: true, Readable: true, Size: 32, Tag: `gorm:"column:fint32"`},
|
||||||
{Name: "INT64", DBName: "fint64", BindNames: []string{"INT64"}, DataType: schema.Int , Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fint64"`},
|
{Name: "INT64", DBName: "fint64", BindNames: []string{"INT64"}, DataType: schema.Int, Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fint64"`},
|
||||||
{Name: "UINT", DBName: "fuint", BindNames: []string{"UINT"}, DataType: schema.Uint , Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fuint"`},
|
{Name: "UINT", DBName: "fuint", BindNames: []string{"UINT"}, DataType: schema.Uint, Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fuint"`},
|
||||||
{Name: "UINT8", DBName: "fuint8", BindNames: []string{"UINT8"}, DataType: schema.Uint , Creatable: true, Updatable: true, Readable: true, Size: 8, Tag: `gorm:"column:fuint8"`},
|
{Name: "UINT8", DBName: "fuint8", BindNames: []string{"UINT8"}, DataType: schema.Uint, Creatable: true, Updatable: true, Readable: true, Size: 8, Tag: `gorm:"column:fuint8"`},
|
||||||
{Name: "UINT16", DBName: "fuint16", BindNames: []string{"UINT16"}, DataType: schema.Uint , Creatable: true, Updatable: true, Readable: true, Size: 16, Tag: `gorm:"column:fuint16"`},
|
{Name: "UINT16", DBName: "fuint16", BindNames: []string{"UINT16"}, DataType: schema.Uint, Creatable: true, Updatable: true, Readable: true, Size: 16, Tag: `gorm:"column:fuint16"`},
|
||||||
{Name: "UINT32", DBName: "fuint32", BindNames: []string{"UINT32"}, DataType: schema.Uint , Creatable: true, Updatable: true, Readable: true, Size: 32, Tag: `gorm:"column:fuint32"`},
|
{Name: "UINT32", DBName: "fuint32", BindNames: []string{"UINT32"}, DataType: schema.Uint, Creatable: true, Updatable: true, Readable: true, Size: 32, Tag: `gorm:"column:fuint32"`},
|
||||||
{Name: "UINT64", DBName: "fuint64", BindNames: []string{"UINT64"}, DataType: schema.Uint , Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fuint64"`},
|
{Name: "UINT64", DBName: "fuint64", BindNames: []string{"UINT64"}, DataType: schema.Uint, Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:fuint64"`},
|
||||||
{Name: "FLOAT32", DBName: "ffloat32", BindNames: []string{"FLOAT32"}, DataType: schema.Float , Creatable: true, Updatable: true, Readable: true, Size: 32, Tag: `gorm:"column:ffloat32"`},
|
{Name: "FLOAT32", DBName: "ffloat32", BindNames: []string{"FLOAT32"}, DataType: schema.Float, Creatable: true, Updatable: true, Readable: true, Size: 32, Tag: `gorm:"column:ffloat32"`},
|
||||||
{Name: "FLOAT64", DBName: "ffloat64", BindNames: []string{"FLOAT64"}, DataType: schema.Float , Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:ffloat64"`},
|
{Name: "FLOAT64", DBName: "ffloat64", BindNames: []string{"FLOAT64"}, DataType: schema.Float, Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:ffloat64"`},
|
||||||
{Name: "BOOL", DBName: "fbool", BindNames: []string{"BOOL"}, DataType: schema.Bool , Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fbool"`},
|
{Name: "BOOL", DBName: "fbool", BindNames: []string{"BOOL"}, DataType: schema.Bool, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fbool"`},
|
||||||
{Name: "STRING", DBName: "fstring", BindNames: []string{"STRING"}, DataType: schema.String, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fstring"`},
|
{Name: "STRING", DBName: "fstring", BindNames: []string{"STRING"}, DataType: schema.String, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fstring"`},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range fields {
|
for _, f := range fields {
|
||||||
|
|
|
@ -27,7 +27,7 @@ type IndexOption struct {
|
||||||
|
|
||||||
// ParseIndexes parse schema indexes
|
// ParseIndexes parse schema indexes
|
||||||
func (schema *Schema) ParseIndexes() map[string]Index {
|
func (schema *Schema) ParseIndexes() map[string]Index {
|
||||||
var indexes = map[string]Index{}
|
indexes := map[string]Index{}
|
||||||
|
|
||||||
for _, field := range schema.Fields {
|
for _, field := range schema.Fields {
|
||||||
if field.TagSettings["INDEX"] != "" || field.TagSettings["UNIQUEINDEX"] != "" {
|
if field.TagSettings["INDEX"] != "" || field.TagSettings["UNIQUEINDEX"] != "" {
|
||||||
|
|
|
@ -26,9 +26,11 @@ type User struct {
|
||||||
Active *bool
|
Active *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type mytime time.Time
|
type (
|
||||||
type myint int
|
mytime time.Time
|
||||||
type mybool = bool
|
myint int
|
||||||
|
mybool = bool
|
||||||
|
)
|
||||||
|
|
||||||
type AdvancedDataTypeUser struct {
|
type AdvancedDataTypeUser struct {
|
||||||
ID sql.NullInt64
|
ID sql.NullInt64
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestToDBName(t *testing.T) {
|
func TestToDBName(t *testing.T) {
|
||||||
var maps = map[string]string{
|
maps := map[string]string{
|
||||||
"": "",
|
"": "",
|
||||||
"x": "x",
|
"x": "x",
|
||||||
"X": "x",
|
"X": "x",
|
||||||
|
@ -56,7 +56,7 @@ func TestToDBName(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNamingStrategy(t *testing.T) {
|
func TestNamingStrategy(t *testing.T) {
|
||||||
var ns = NamingStrategy{
|
ns := NamingStrategy{
|
||||||
TablePrefix: "public.",
|
TablePrefix: "public.",
|
||||||
SingularTable: true,
|
SingularTable: true,
|
||||||
NameReplacer: strings.NewReplacer("CID", "Cid"),
|
NameReplacer: strings.NewReplacer("CID", "Cid"),
|
||||||
|
@ -102,7 +102,7 @@ func (r CustomReplacer) Replace(name string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCustomReplacer(t *testing.T) {
|
func TestCustomReplacer(t *testing.T) {
|
||||||
var ns = NamingStrategy{
|
ns := NamingStrategy{
|
||||||
TablePrefix: "public.",
|
TablePrefix: "public.",
|
||||||
SingularTable: true,
|
SingularTable: true,
|
||||||
NameReplacer: CustomReplacer{
|
NameReplacer: CustomReplacer{
|
||||||
|
@ -146,7 +146,7 @@ func TestCustomReplacer(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCustomReplacerWithNoLowerCase(t *testing.T) {
|
func TestCustomReplacerWithNoLowerCase(t *testing.T) {
|
||||||
var ns = NamingStrategy{
|
ns := NamingStrategy{
|
||||||
TablePrefix: "public.",
|
TablePrefix: "public.",
|
||||||
SingularTable: true,
|
SingularTable: true,
|
||||||
NameReplacer: CustomReplacer{
|
NameReplacer: CustomReplacer{
|
||||||
|
@ -190,7 +190,7 @@ func TestCustomReplacerWithNoLowerCase(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFormatNameWithStringLongerThan64Characters(t *testing.T) {
|
func TestFormatNameWithStringLongerThan64Characters(t *testing.T) {
|
||||||
var ns = NamingStrategy{}
|
ns := NamingStrategy{}
|
||||||
|
|
||||||
formattedName := ns.formatName("prefix", "table", "thisIsAVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString")
|
formattedName := ns.formatName("prefix", "table", "thisIsAVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString")
|
||||||
if formattedName != "prefixtablethisIsAVeryVeryVeryVeryVeryVeryVeryVeryVeryLo180f2c67" {
|
if formattedName != "prefixtablethisIsAVeryVeryVeryVeryVeryVeryVeryVeryVeryLo180f2c67" {
|
||||||
|
|
|
@ -105,7 +105,6 @@ func TestSelfReferentialBelongsTo(t *testing.T) {
|
||||||
Name: "Creator", Type: schema.BelongsTo, Schema: "User", FieldSchema: "User",
|
Name: "Creator", Type: schema.BelongsTo, Schema: "User", FieldSchema: "User",
|
||||||
References: []Reference{{"ID", "User", "CreatorID", "User", "", false}},
|
References: []Reference{{"ID", "User", "CreatorID", "User", "", false}},
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSelfReferentialBelongsToOverrideReferences(t *testing.T) {
|
func TestSelfReferentialBelongsToOverrideReferences(t *testing.T) {
|
||||||
|
@ -160,7 +159,6 @@ func TestHasOneOverrideReferences(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHasOneOverrideReferences2(t *testing.T) {
|
func TestHasOneOverrideReferences2(t *testing.T) {
|
||||||
|
|
||||||
type Profile struct {
|
type Profile struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Name string
|
Name string
|
||||||
|
@ -518,7 +516,6 @@ func TestSameForeignKey(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBelongsToSameForeignKey(t *testing.T) {
|
func TestBelongsToSameForeignKey(t *testing.T) {
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Name string
|
Name string
|
||||||
|
|
|
@ -145,8 +145,7 @@ func TestParseSchemaWithAdvancedDataType(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CustomizeTable struct {
|
type CustomizeTable struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func (CustomizeTable) TableName() string {
|
func (CustomizeTable) TableName() string {
|
||||||
return "customize"
|
return "customize"
|
||||||
|
@ -165,7 +164,6 @@ func TestCustomizeTableName(t *testing.T) {
|
||||||
|
|
||||||
func TestNestedModel(t *testing.T) {
|
func TestNestedModel(t *testing.T) {
|
||||||
versionUser, err := schema.Parse(&VersionUser{}, &sync.Map{}, schema.NamingStrategy{})
|
versionUser, err := schema.Parse(&VersionUser{}, &sync.Map{}, schema.NamingStrategy{})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to parse nested user, got error %v", err)
|
t.Fatalf("failed to parse nested user, got error %v", err)
|
||||||
}
|
}
|
||||||
|
@ -204,7 +202,6 @@ func TestEmbeddedStruct(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cropSchema, err := schema.Parse(&Corp{}, &sync.Map{}, schema.NamingStrategy{})
|
cropSchema, err := schema.Parse(&Corp{}, &sync.Map{}, schema.NamingStrategy{})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to parse embedded struct with primary key, got error %v", err)
|
t.Fatalf("failed to parse embedded struct with primary key, got error %v", err)
|
||||||
}
|
}
|
||||||
|
@ -273,7 +270,6 @@ func TestEmbeddedStructForCustomizedNamingStrategy(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cropSchema, err := schema.Parse(&Corp{}, &sync.Map{}, CustomizedNamingStrategy{schema.NamingStrategy{}})
|
cropSchema, err := schema.Parse(&Corp{}, &sync.Map{}, CustomizedNamingStrategy{schema.NamingStrategy{}})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to parse embedded struct with primary key, got error %v", err)
|
t.Fatalf("failed to parse embedded struct with primary key, got error %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -328,7 +328,7 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
|
||||||
conds = append(conds, clause.Eq{Column: i, Value: j})
|
conds = append(conds, clause.Eq{Column: i, Value: j})
|
||||||
}
|
}
|
||||||
case map[string]string:
|
case map[string]string:
|
||||||
var keys = make([]string, 0, len(v))
|
keys := make([]string, 0, len(v))
|
||||||
for i := range v {
|
for i := range v {
|
||||||
keys = append(keys, i)
|
keys = append(keys, i)
|
||||||
}
|
}
|
||||||
|
@ -338,7 +338,7 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
|
||||||
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
||||||
}
|
}
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
var keys = make([]string, 0, len(v))
|
keys := make([]string, 0, len(v))
|
||||||
for i := range v {
|
for i := range v {
|
||||||
keys = append(keys, i)
|
keys = append(keys, i)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBelongsToAssociation(t *testing.T) {
|
func TestBelongsToAssociation(t *testing.T) {
|
||||||
var user = *GetUser("belongs-to", Config{Company: true, Manager: true})
|
user := *GetUser("belongs-to", Config{Company: true, Manager: true})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -31,8 +31,8 @@ func TestBelongsToAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Manager", 1, "")
|
AssertAssociationCount(t, user, "Manager", 1, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var company = Company{Name: "company-belongs-to-append"}
|
company := Company{Name: "company-belongs-to-append"}
|
||||||
var manager = GetUser("manager-belongs-to-append", Config{})
|
manager := GetUser("manager-belongs-to-append", Config{})
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Company").Append(&company); err != nil {
|
if err := DB.Model(&user2).Association("Company").Append(&company); err != nil {
|
||||||
t.Fatalf("Error happened when append Company, got %v", err)
|
t.Fatalf("Error happened when append Company, got %v", err)
|
||||||
|
@ -60,8 +60,8 @@ func TestBelongsToAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user2, "Manager", 1, "AfterAppend")
|
AssertAssociationCount(t, user2, "Manager", 1, "AfterAppend")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var company2 = Company{Name: "company-belongs-to-replace"}
|
company2 := Company{Name: "company-belongs-to-replace"}
|
||||||
var manager2 = GetUser("manager-belongs-to-replace", Config{})
|
manager2 := GetUser("manager-belongs-to-replace", Config{})
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Company").Replace(&company2); err != nil {
|
if err := DB.Model(&user2).Association("Company").Replace(&company2); err != nil {
|
||||||
t.Fatalf("Error happened when replace Company, got %v", err)
|
t.Fatalf("Error happened when replace Company, got %v", err)
|
||||||
|
@ -142,7 +142,7 @@ func TestBelongsToAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBelongsToAssociationForSlice(t *testing.T) {
|
func TestBelongsToAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-belongs-to-1", Config{Company: true, Manager: true}),
|
*GetUser("slice-belongs-to-1", Config{Company: true, Manager: true}),
|
||||||
*GetUser("slice-belongs-to-2", Config{Company: true, Manager: false}),
|
*GetUser("slice-belongs-to-2", Config{Company: true, Manager: false}),
|
||||||
*GetUser("slice-belongs-to-3", Config{Company: true, Manager: true}),
|
*GetUser("slice-belongs-to-3", Config{Company: true, Manager: true}),
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestHasManyAssociation(t *testing.T) {
|
func TestHasManyAssociation(t *testing.T) {
|
||||||
var user = *GetUser("hasmany", Config{Pets: 2})
|
user := *GetUser("hasmany", Config{Pets: 2})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -42,7 +42,7 @@ func TestHasManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Pets", 2, "")
|
AssertAssociationCount(t, user, "Pets", 2, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var pet = Pet{Name: "pet-has-many-append"}
|
pet := Pet{Name: "pet-has-many-append"}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Pets").Append(&pet); err != nil {
|
if err := DB.Model(&user2).Association("Pets").Append(&pet); err != nil {
|
||||||
t.Fatalf("Error happened when append account, got %v", err)
|
t.Fatalf("Error happened when append account, got %v", err)
|
||||||
|
@ -57,14 +57,14 @@ func TestHasManyAssociation(t *testing.T) {
|
||||||
|
|
||||||
AssertAssociationCount(t, user, "Pets", 3, "AfterAppend")
|
AssertAssociationCount(t, user, "Pets", 3, "AfterAppend")
|
||||||
|
|
||||||
var pets2 = []Pet{{Name: "pet-has-many-append-1-1"}, {Name: "pet-has-many-append-1-1"}}
|
pets2 := []Pet{{Name: "pet-has-many-append-1-1"}, {Name: "pet-has-many-append-1-1"}}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Pets").Append(&pets2); err != nil {
|
if err := DB.Model(&user2).Association("Pets").Append(&pets2); err != nil {
|
||||||
t.Fatalf("Error happened when append pet, got %v", err)
|
t.Fatalf("Error happened when append pet, got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, pet := range pets2 {
|
for _, pet := range pets2 {
|
||||||
var pet = pet
|
pet := pet
|
||||||
if pet.ID == 0 {
|
if pet.ID == 0 {
|
||||||
t.Fatalf("Pet's ID should be created")
|
t.Fatalf("Pet's ID should be created")
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ func TestHasManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Pets", 5, "AfterAppendSlice")
|
AssertAssociationCount(t, user, "Pets", 5, "AfterAppendSlice")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var pet2 = Pet{Name: "pet-has-many-replace"}
|
pet2 := Pet{Name: "pet-has-many-replace"}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Pets").Replace(&pet2); err != nil {
|
if err := DB.Model(&user2).Association("Pets").Replace(&pet2); err != nil {
|
||||||
t.Fatalf("Error happened when append pet, got %v", err)
|
t.Fatalf("Error happened when append pet, got %v", err)
|
||||||
|
@ -119,7 +119,7 @@ func TestHasManyAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSingleTableHasManyAssociation(t *testing.T) {
|
func TestSingleTableHasManyAssociation(t *testing.T) {
|
||||||
var user = *GetUser("hasmany", Config{Team: 2})
|
user := *GetUser("hasmany", Config{Team: 2})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -137,7 +137,7 @@ func TestSingleTableHasManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Team", 2, "")
|
AssertAssociationCount(t, user, "Team", 2, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var team = *GetUser("team", Config{})
|
team := *GetUser("team", Config{})
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Team").Append(&team); err != nil {
|
if err := DB.Model(&user2).Association("Team").Append(&team); err != nil {
|
||||||
t.Fatalf("Error happened when append account, got %v", err)
|
t.Fatalf("Error happened when append account, got %v", err)
|
||||||
|
@ -152,14 +152,14 @@ func TestSingleTableHasManyAssociation(t *testing.T) {
|
||||||
|
|
||||||
AssertAssociationCount(t, user, "Team", 3, "AfterAppend")
|
AssertAssociationCount(t, user, "Team", 3, "AfterAppend")
|
||||||
|
|
||||||
var teams = []User{*GetUser("team-append-1", Config{}), *GetUser("team-append-2", Config{})}
|
teams := []User{*GetUser("team-append-1", Config{}), *GetUser("team-append-2", Config{})}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Team").Append(&teams); err != nil {
|
if err := DB.Model(&user2).Association("Team").Append(&teams); err != nil {
|
||||||
t.Fatalf("Error happened when append team, got %v", err)
|
t.Fatalf("Error happened when append team, got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, team := range teams {
|
for _, team := range teams {
|
||||||
var team = team
|
team := team
|
||||||
if team.ID == 0 {
|
if team.ID == 0 {
|
||||||
t.Fatalf("Team's ID should be created")
|
t.Fatalf("Team's ID should be created")
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ func TestSingleTableHasManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Team", 5, "AfterAppendSlice")
|
AssertAssociationCount(t, user, "Team", 5, "AfterAppendSlice")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var team2 = *GetUser("team-replace", Config{})
|
team2 := *GetUser("team-replace", Config{})
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Team").Replace(&team2); err != nil {
|
if err := DB.Model(&user2).Association("Team").Replace(&team2); err != nil {
|
||||||
t.Fatalf("Error happened when append team, got %v", err)
|
t.Fatalf("Error happened when append team, got %v", err)
|
||||||
|
@ -214,7 +214,7 @@ func TestSingleTableHasManyAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHasManyAssociationForSlice(t *testing.T) {
|
func TestHasManyAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-hasmany-1", Config{Pets: 2}),
|
*GetUser("slice-hasmany-1", Config{Pets: 2}),
|
||||||
*GetUser("slice-hasmany-2", Config{Pets: 0}),
|
*GetUser("slice-hasmany-2", Config{Pets: 0}),
|
||||||
*GetUser("slice-hasmany-3", Config{Pets: 4}),
|
*GetUser("slice-hasmany-3", Config{Pets: 4}),
|
||||||
|
@ -268,7 +268,7 @@ func TestHasManyAssociationForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSingleTableHasManyAssociationForSlice(t *testing.T) {
|
func TestSingleTableHasManyAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-hasmany-1", Config{Team: 2}),
|
*GetUser("slice-hasmany-1", Config{Team: 2}),
|
||||||
*GetUser("slice-hasmany-2", Config{Team: 0}),
|
*GetUser("slice-hasmany-2", Config{Team: 0}),
|
||||||
*GetUser("slice-hasmany-3", Config{Team: 4}),
|
*GetUser("slice-hasmany-3", Config{Team: 4}),
|
||||||
|
@ -324,7 +324,7 @@ func TestSingleTableHasManyAssociationForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPolymorphicHasManyAssociation(t *testing.T) {
|
func TestPolymorphicHasManyAssociation(t *testing.T) {
|
||||||
var user = *GetUser("hasmany", Config{Toys: 2})
|
user := *GetUser("hasmany", Config{Toys: 2})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -342,7 +342,7 @@ func TestPolymorphicHasManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Toys", 2, "")
|
AssertAssociationCount(t, user, "Toys", 2, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var toy = Toy{Name: "toy-has-many-append"}
|
toy := Toy{Name: "toy-has-many-append"}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Toys").Append(&toy); err != nil {
|
if err := DB.Model(&user2).Association("Toys").Append(&toy); err != nil {
|
||||||
t.Fatalf("Error happened when append account, got %v", err)
|
t.Fatalf("Error happened when append account, got %v", err)
|
||||||
|
@ -357,14 +357,14 @@ func TestPolymorphicHasManyAssociation(t *testing.T) {
|
||||||
|
|
||||||
AssertAssociationCount(t, user, "Toys", 3, "AfterAppend")
|
AssertAssociationCount(t, user, "Toys", 3, "AfterAppend")
|
||||||
|
|
||||||
var toys = []Toy{{Name: "toy-has-many-append-1-1"}, {Name: "toy-has-many-append-1-1"}}
|
toys := []Toy{{Name: "toy-has-many-append-1-1"}, {Name: "toy-has-many-append-1-1"}}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Toys").Append(&toys); err != nil {
|
if err := DB.Model(&user2).Association("Toys").Append(&toys); err != nil {
|
||||||
t.Fatalf("Error happened when append toy, got %v", err)
|
t.Fatalf("Error happened when append toy, got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, toy := range toys {
|
for _, toy := range toys {
|
||||||
var toy = toy
|
toy := toy
|
||||||
if toy.ID == 0 {
|
if toy.ID == 0 {
|
||||||
t.Fatalf("Toy's ID should be created")
|
t.Fatalf("Toy's ID should be created")
|
||||||
}
|
}
|
||||||
|
@ -377,7 +377,7 @@ func TestPolymorphicHasManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Toys", 5, "AfterAppendSlice")
|
AssertAssociationCount(t, user, "Toys", 5, "AfterAppendSlice")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var toy2 = Toy{Name: "toy-has-many-replace"}
|
toy2 := Toy{Name: "toy-has-many-replace"}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Toys").Replace(&toy2); err != nil {
|
if err := DB.Model(&user2).Association("Toys").Replace(&toy2); err != nil {
|
||||||
t.Fatalf("Error happened when append toy, got %v", err)
|
t.Fatalf("Error happened when append toy, got %v", err)
|
||||||
|
@ -419,7 +419,7 @@ func TestPolymorphicHasManyAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPolymorphicHasManyAssociationForSlice(t *testing.T) {
|
func TestPolymorphicHasManyAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-hasmany-1", Config{Toys: 2}),
|
*GetUser("slice-hasmany-1", Config{Toys: 2}),
|
||||||
*GetUser("slice-hasmany-2", Config{Toys: 0}),
|
*GetUser("slice-hasmany-2", Config{Toys: 0}),
|
||||||
*GetUser("slice-hasmany-3", Config{Toys: 4}),
|
*GetUser("slice-hasmany-3", Config{Toys: 4}),
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestHasOneAssociation(t *testing.T) {
|
func TestHasOneAssociation(t *testing.T) {
|
||||||
var user = *GetUser("hasone", Config{Account: true})
|
user := *GetUser("hasone", Config{Account: true})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -25,7 +25,7 @@ func TestHasOneAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Account", 1, "")
|
AssertAssociationCount(t, user, "Account", 1, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var account = Account{Number: "account-has-one-append"}
|
account := Account{Number: "account-has-one-append"}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Account").Append(&account); err != nil {
|
if err := DB.Model(&user2).Association("Account").Append(&account); err != nil {
|
||||||
t.Fatalf("Error happened when append account, got %v", err)
|
t.Fatalf("Error happened when append account, got %v", err)
|
||||||
|
@ -41,7 +41,7 @@ func TestHasOneAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Account", 1, "AfterAppend")
|
AssertAssociationCount(t, user, "Account", 1, "AfterAppend")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var account2 = Account{Number: "account-has-one-replace"}
|
account2 := Account{Number: "account-has-one-replace"}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Account").Replace(&account2); err != nil {
|
if err := DB.Model(&user2).Association("Account").Replace(&account2); err != nil {
|
||||||
t.Fatalf("Error happened when append Account, got %v", err)
|
t.Fatalf("Error happened when append Account, got %v", err)
|
||||||
|
@ -84,7 +84,7 @@ func TestHasOneAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHasOneAssociationWithSelect(t *testing.T) {
|
func TestHasOneAssociationWithSelect(t *testing.T) {
|
||||||
var user = *GetUser("hasone", Config{Account: true})
|
user := *GetUser("hasone", Config{Account: true})
|
||||||
|
|
||||||
DB.Omit("Account.Number").Create(&user)
|
DB.Omit("Account.Number").Create(&user)
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ func TestHasOneAssociationWithSelect(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHasOneAssociationForSlice(t *testing.T) {
|
func TestHasOneAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-hasone-1", Config{Account: true}),
|
*GetUser("slice-hasone-1", Config{Account: true}),
|
||||||
*GetUser("slice-hasone-2", Config{Account: false}),
|
*GetUser("slice-hasone-2", Config{Account: false}),
|
||||||
*GetUser("slice-hasone-3", Config{Account: true}),
|
*GetUser("slice-hasone-3", Config{Account: true}),
|
||||||
|
@ -139,7 +139,7 @@ func TestHasOneAssociationForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPolymorphicHasOneAssociation(t *testing.T) {
|
func TestPolymorphicHasOneAssociation(t *testing.T) {
|
||||||
var pet = Pet{Name: "hasone", Toy: Toy{Name: "toy-has-one"}}
|
pet := Pet{Name: "hasone", Toy: Toy{Name: "toy-has-one"}}
|
||||||
|
|
||||||
if err := DB.Create(&pet).Error; err != nil {
|
if err := DB.Create(&pet).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -157,7 +157,7 @@ func TestPolymorphicHasOneAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, pet, "Toy", 1, "")
|
AssertAssociationCount(t, pet, "Toy", 1, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var toy = Toy{Name: "toy-has-one-append"}
|
toy := Toy{Name: "toy-has-one-append"}
|
||||||
|
|
||||||
if err := DB.Model(&pet2).Association("Toy").Append(&toy); err != nil {
|
if err := DB.Model(&pet2).Association("Toy").Append(&toy); err != nil {
|
||||||
t.Fatalf("Error happened when append toy, got %v", err)
|
t.Fatalf("Error happened when append toy, got %v", err)
|
||||||
|
@ -173,7 +173,7 @@ func TestPolymorphicHasOneAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, pet, "Toy", 1, "AfterAppend")
|
AssertAssociationCount(t, pet, "Toy", 1, "AfterAppend")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var toy2 = Toy{Name: "toy-has-one-replace"}
|
toy2 := Toy{Name: "toy-has-one-replace"}
|
||||||
|
|
||||||
if err := DB.Model(&pet2).Association("Toy").Replace(&toy2); err != nil {
|
if err := DB.Model(&pet2).Association("Toy").Replace(&toy2); err != nil {
|
||||||
t.Fatalf("Error happened when append Toy, got %v", err)
|
t.Fatalf("Error happened when append Toy, got %v", err)
|
||||||
|
@ -216,7 +216,7 @@ func TestPolymorphicHasOneAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPolymorphicHasOneAssociationForSlice(t *testing.T) {
|
func TestPolymorphicHasOneAssociationForSlice(t *testing.T) {
|
||||||
var pets = []Pet{
|
pets := []Pet{
|
||||||
{Name: "hasone-1", Toy: Toy{Name: "toy-has-one"}},
|
{Name: "hasone-1", Toy: Toy{Name: "toy-has-one"}},
|
||||||
{Name: "hasone-2", Toy: Toy{}},
|
{Name: "hasone-2", Toy: Toy{}},
|
||||||
{Name: "hasone-3", Toy: Toy{Name: "toy-has-one"}},
|
{Name: "hasone-3", Toy: Toy{Name: "toy-has-one"}},
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMany2ManyAssociation(t *testing.T) {
|
func TestMany2ManyAssociation(t *testing.T) {
|
||||||
var user = *GetUser("many2many", Config{Languages: 2})
|
user := *GetUser("many2many", Config{Languages: 2})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -26,7 +26,7 @@ func TestMany2ManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Languages", 2, "")
|
AssertAssociationCount(t, user, "Languages", 2, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var language = Language{Code: "language-many2many-append", Name: "language-many2many-append"}
|
language := Language{Code: "language-many2many-append", Name: "language-many2many-append"}
|
||||||
DB.Create(&language)
|
DB.Create(&language)
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Languages").Append(&language); err != nil {
|
if err := DB.Model(&user2).Association("Languages").Append(&language); err != nil {
|
||||||
|
@ -38,7 +38,7 @@ func TestMany2ManyAssociation(t *testing.T) {
|
||||||
|
|
||||||
AssertAssociationCount(t, user, "Languages", 3, "AfterAppend")
|
AssertAssociationCount(t, user, "Languages", 3, "AfterAppend")
|
||||||
|
|
||||||
var languages = []Language{
|
languages := []Language{
|
||||||
{Code: "language-many2many-append-1-1", Name: "language-many2many-append-1-1"},
|
{Code: "language-many2many-append-1-1", Name: "language-many2many-append-1-1"},
|
||||||
{Code: "language-many2many-append-2-1", Name: "language-many2many-append-2-1"},
|
{Code: "language-many2many-append-2-1", Name: "language-many2many-append-2-1"},
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ func TestMany2ManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Languages", 5, "AfterAppendSlice")
|
AssertAssociationCount(t, user, "Languages", 5, "AfterAppendSlice")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var language2 = Language{Code: "language-many2many-replace", Name: "language-many2many-replace"}
|
language2 := Language{Code: "language-many2many-replace", Name: "language-many2many-replace"}
|
||||||
DB.Create(&language2)
|
DB.Create(&language2)
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Languages").Replace(&language2); err != nil {
|
if err := DB.Model(&user2).Association("Languages").Replace(&language2); err != nil {
|
||||||
|
@ -94,7 +94,7 @@ func TestMany2ManyAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMany2ManyOmitAssociations(t *testing.T) {
|
func TestMany2ManyOmitAssociations(t *testing.T) {
|
||||||
var user = *GetUser("many2many_omit_associations", Config{Languages: 2})
|
user := *GetUser("many2many_omit_associations", Config{Languages: 2})
|
||||||
|
|
||||||
if err := DB.Omit("Languages.*").Create(&user).Error; err == nil {
|
if err := DB.Omit("Languages.*").Create(&user).Error; err == nil {
|
||||||
t.Fatalf("should raise error when create users without languages reference")
|
t.Fatalf("should raise error when create users without languages reference")
|
||||||
|
@ -114,14 +114,14 @@ func TestMany2ManyOmitAssociations(t *testing.T) {
|
||||||
t.Errorf("languages count should be %v, but got %v", 2, len(languages))
|
t.Errorf("languages count should be %v, but got %v", 2, len(languages))
|
||||||
}
|
}
|
||||||
|
|
||||||
var newLang = Language{Code: "omitmany2many", Name: "omitmany2many"}
|
newLang := Language{Code: "omitmany2many", Name: "omitmany2many"}
|
||||||
if err := DB.Model(&user).Omit("Languages.*").Association("Languages").Replace(&newLang); err == nil {
|
if err := DB.Model(&user).Omit("Languages.*").Association("Languages").Replace(&newLang); err == nil {
|
||||||
t.Errorf("should failed to insert languages due to constraint failed, error: %v", err)
|
t.Errorf("should failed to insert languages due to constraint failed, error: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMany2ManyAssociationForSlice(t *testing.T) {
|
func TestMany2ManyAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-many2many-1", Config{Languages: 2}),
|
*GetUser("slice-many2many-1", Config{Languages: 2}),
|
||||||
*GetUser("slice-many2many-2", Config{Languages: 0}),
|
*GetUser("slice-many2many-2", Config{Languages: 0}),
|
||||||
*GetUser("slice-many2many-3", Config{Languages: 4}),
|
*GetUser("slice-many2many-3", Config{Languages: 4}),
|
||||||
|
@ -139,11 +139,11 @@ func TestMany2ManyAssociationForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var languages1 = []Language{
|
languages1 := []Language{
|
||||||
{Code: "language-many2many-append-1", Name: "language-many2many-append-1"},
|
{Code: "language-many2many-append-1", Name: "language-many2many-append-1"},
|
||||||
}
|
}
|
||||||
var languages2 = []Language{}
|
languages2 := []Language{}
|
||||||
var languages3 = []Language{
|
languages3 := []Language{
|
||||||
{Code: "language-many2many-append-3-1", Name: "language-many2many-append-3-1"},
|
{Code: "language-many2many-append-3-1", Name: "language-many2many-append-3-1"},
|
||||||
{Code: "language-many2many-append-3-2", Name: "language-many2many-append-3-2"},
|
{Code: "language-many2many-append-3-2", Name: "language-many2many-append-3-2"},
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ func TestMany2ManyAssociationForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSingleTableMany2ManyAssociation(t *testing.T) {
|
func TestSingleTableMany2ManyAssociation(t *testing.T) {
|
||||||
var user = *GetUser("many2many", Config{Friends: 2})
|
user := *GetUser("many2many", Config{Friends: 2})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -210,7 +210,7 @@ func TestSingleTableMany2ManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Friends", 2, "")
|
AssertAssociationCount(t, user, "Friends", 2, "")
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var friend = *GetUser("friend", Config{})
|
friend := *GetUser("friend", Config{})
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Friends").Append(&friend); err != nil {
|
if err := DB.Model(&user2).Association("Friends").Append(&friend); err != nil {
|
||||||
t.Fatalf("Error happened when append account, got %v", err)
|
t.Fatalf("Error happened when append account, got %v", err)
|
||||||
|
@ -221,7 +221,7 @@ func TestSingleTableMany2ManyAssociation(t *testing.T) {
|
||||||
|
|
||||||
AssertAssociationCount(t, user, "Friends", 3, "AfterAppend")
|
AssertAssociationCount(t, user, "Friends", 3, "AfterAppend")
|
||||||
|
|
||||||
var friends = []*User{GetUser("friend-append-1", Config{}), GetUser("friend-append-2", Config{})}
|
friends := []*User{GetUser("friend-append-1", Config{}), GetUser("friend-append-2", Config{})}
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Friends").Append(&friends); err != nil {
|
if err := DB.Model(&user2).Association("Friends").Append(&friends); err != nil {
|
||||||
t.Fatalf("Error happened when append friend, got %v", err)
|
t.Fatalf("Error happened when append friend, got %v", err)
|
||||||
|
@ -234,7 +234,7 @@ func TestSingleTableMany2ManyAssociation(t *testing.T) {
|
||||||
AssertAssociationCount(t, user, "Friends", 5, "AfterAppendSlice")
|
AssertAssociationCount(t, user, "Friends", 5, "AfterAppendSlice")
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var friend2 = *GetUser("friend-replace-2", Config{})
|
friend2 := *GetUser("friend-replace-2", Config{})
|
||||||
|
|
||||||
if err := DB.Model(&user2).Association("Friends").Replace(&friend2); err != nil {
|
if err := DB.Model(&user2).Association("Friends").Replace(&friend2); err != nil {
|
||||||
t.Fatalf("Error happened when append friend, got %v", err)
|
t.Fatalf("Error happened when append friend, got %v", err)
|
||||||
|
@ -272,7 +272,7 @@ func TestSingleTableMany2ManyAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSingleTableMany2ManyAssociationForSlice(t *testing.T) {
|
func TestSingleTableMany2ManyAssociationForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice-many2many-1", Config{Team: 2}),
|
*GetUser("slice-many2many-1", Config{Team: 2}),
|
||||||
*GetUser("slice-many2many-2", Config{Team: 0}),
|
*GetUser("slice-many2many-2", Config{Team: 0}),
|
||||||
*GetUser("slice-many2many-3", Config{Team: 4}),
|
*GetUser("slice-many2many-3", Config{Team: 4}),
|
||||||
|
@ -290,17 +290,17 @@ func TestSingleTableMany2ManyAssociationForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var teams1 = []User{*GetUser("friend-append-1", Config{})}
|
teams1 := []User{*GetUser("friend-append-1", Config{})}
|
||||||
var teams2 = []User{}
|
teams2 := []User{}
|
||||||
var teams3 = []*User{GetUser("friend-append-3-1", Config{}), GetUser("friend-append-3-2", Config{})}
|
teams3 := []*User{GetUser("friend-append-3-1", Config{}), GetUser("friend-append-3-2", Config{})}
|
||||||
|
|
||||||
DB.Model(&users).Association("Team").Append(&teams1, &teams2, &teams3)
|
DB.Model(&users).Association("Team").Append(&teams1, &teams2, &teams3)
|
||||||
|
|
||||||
AssertAssociationCount(t, users, "Team", 9, "After Append")
|
AssertAssociationCount(t, users, "Team", 9, "After Append")
|
||||||
|
|
||||||
var teams2_1 = []User{*GetUser("friend-replace-1", Config{}), *GetUser("friend-replace-2", Config{})}
|
teams2_1 := []User{*GetUser("friend-replace-1", Config{}), *GetUser("friend-replace-2", Config{})}
|
||||||
var teams2_2 = []User{*GetUser("friend-replace-2-1", Config{}), *GetUser("friend-replace-2-2", Config{})}
|
teams2_2 := []User{*GetUser("friend-replace-2-1", Config{}), *GetUser("friend-replace-2-2", Config{})}
|
||||||
var teams2_3 = GetUser("friend-replace-3-1", Config{})
|
teams2_3 := GetUser("friend-replace-3-1", Config{})
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
DB.Model(&users).Association("Team").Replace(&teams2_1, &teams2_2, teams2_3)
|
DB.Model(&users).Association("Team").Replace(&teams2_1, &teams2_2, teams2_3)
|
||||||
|
|
|
@ -27,7 +27,7 @@ func AssertAssociationCount(t *testing.T, data interface{}, name string, result
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInvalidAssociation(t *testing.T) {
|
func TestInvalidAssociation(t *testing.T) {
|
||||||
var user = *GetUser("invalid", Config{Company: true, Manager: true})
|
user := *GetUser("invalid", Config{Company: true, Manager: true})
|
||||||
if err := DB.Model(&user).Association("Invalid").Find(&user.Company).Error; err == nil {
|
if err := DB.Model(&user).Association("Invalid").Find(&user.Company).Error; err == nil {
|
||||||
t.Fatalf("should return errors for invalid association, but got nil")
|
t.Fatalf("should return errors for invalid association, but got nil")
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,6 @@ func TestFullSaveAssociations(t *testing.T) {
|
||||||
err := DB.
|
err := DB.
|
||||||
Session(&gorm.Session{FullSaveAssociations: true}).
|
Session(&gorm.Session{FullSaveAssociations: true}).
|
||||||
Create(coupon).Error
|
Create(coupon).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed, got error: %v", err)
|
t.Errorf("Failed, got error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func BenchmarkCreate(b *testing.B) {
|
func BenchmarkCreate(b *testing.B) {
|
||||||
var user = *GetUser("bench", Config{})
|
user := *GetUser("bench", Config{})
|
||||||
|
|
||||||
for x := 0; x < b.N; x++ {
|
for x := 0; x < b.N; x++ {
|
||||||
user.ID = 0
|
user.ID = 0
|
||||||
|
@ -16,7 +16,7 @@ func BenchmarkCreate(b *testing.B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkFind(b *testing.B) {
|
func BenchmarkFind(b *testing.B) {
|
||||||
var user = *GetUser("find", Config{})
|
user := *GetUser("find", Config{})
|
||||||
DB.Create(&user)
|
DB.Create(&user)
|
||||||
|
|
||||||
for x := 0; x < b.N; x++ {
|
for x := 0; x < b.N; x++ {
|
||||||
|
@ -25,7 +25,7 @@ func BenchmarkFind(b *testing.B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkUpdate(b *testing.B) {
|
func BenchmarkUpdate(b *testing.B) {
|
||||||
var user = *GetUser("find", Config{})
|
user := *GetUser("find", Config{})
|
||||||
DB.Create(&user)
|
DB.Create(&user)
|
||||||
|
|
||||||
for x := 0; x < b.N; x++ {
|
for x := 0; x < b.N; x++ {
|
||||||
|
@ -34,7 +34,7 @@ func BenchmarkUpdate(b *testing.B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkDelete(b *testing.B) {
|
func BenchmarkDelete(b *testing.B) {
|
||||||
var user = *GetUser("find", Config{})
|
user := *GetUser("find", Config{})
|
||||||
|
|
||||||
for x := 0; x < b.N; x++ {
|
for x := 0; x < b.N; x++ {
|
||||||
user.ID = 0
|
user.ID = 0
|
||||||
|
|
|
@ -87,7 +87,7 @@ func TestCount(t *testing.T) {
|
||||||
t.Fatalf(fmt.Sprintf("Count should work, but got err %v", err))
|
t.Fatalf(fmt.Sprintf("Count should work, but got err %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
expects := []User{User{Name: "main"}, {Name: "other"}, {Name: "other"}}
|
expects := []User{{Name: "main"}, {Name: "other"}, {Name: "other"}}
|
||||||
sort.SliceStable(users, func(i, j int) bool {
|
sort.SliceStable(users, func(i, j int) bool {
|
||||||
return strings.Compare(users[i].Name, users[j].Name) < 0
|
return strings.Compare(users[i].Name, users[j].Name) < 0
|
||||||
})
|
})
|
||||||
|
@ -101,7 +101,7 @@ func TestCount(t *testing.T) {
|
||||||
t.Fatalf(fmt.Sprintf("Count should work, but got err %v", err))
|
t.Fatalf(fmt.Sprintf("Count should work, but got err %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
expects = []User{User{Name: "main", Age: 18}, {Name: "other", Age: 18}, {Name: "other", Age: 18}}
|
expects = []User{{Name: "main", Age: 18}, {Name: "other", Age: 18}, {Name: "other", Age: 18}}
|
||||||
sort.SliceStable(users, func(i, j int) bool {
|
sort.SliceStable(users, func(i, j int) bool {
|
||||||
return strings.Compare(users[i].Name, users[j].Name) < 0
|
return strings.Compare(users[i].Name, users[j].Name) < 0
|
||||||
})
|
})
|
||||||
|
@ -115,7 +115,7 @@ func TestCount(t *testing.T) {
|
||||||
t.Fatalf("Count should work, but got err %v", err)
|
t.Fatalf("Count should work, but got err %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
expects = []User{User{Name: "count-1", Age: 1}, {Name: "count-2", Age: 1}, {Name: "count-3", Age: 1}}
|
expects = []User{{Name: "count-1", Age: 1}, {Name: "count-2", Age: 1}, {Name: "count-3", Age: 1}}
|
||||||
sort.SliceStable(users, func(i, j int) bool {
|
sort.SliceStable(users, func(i, j int) bool {
|
||||||
return strings.Compare(users[i].Name, users[j].Name) < 0
|
return strings.Compare(users[i].Name, users[j].Name) < 0
|
||||||
})
|
})
|
||||||
|
@ -144,5 +144,4 @@ func TestCount(t *testing.T) {
|
||||||
if err := DB.Model(&User{}).Where("name = ?", "count-4").Group("name").Count(&count11).Error; err != nil || count11 != 1 {
|
if err := DB.Model(&User{}).Where("name = ?", "count-4").Group("name").Count(&count11).Error; err != nil || count11 != 1 {
|
||||||
t.Fatalf("Count should be 3, but got count: %v err %v", count11, err)
|
t.Fatalf("Count should be 3, but got count: %v err %v", count11, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCreate(t *testing.T) {
|
func TestCreate(t *testing.T) {
|
||||||
var user = *GetUser("create", Config{})
|
user := *GetUser("create", Config{})
|
||||||
|
|
||||||
if results := DB.Create(&user); results.Error != nil {
|
if results := DB.Create(&user); results.Error != nil {
|
||||||
t.Fatalf("errors happened when create: %v", results.Error)
|
t.Fatalf("errors happened when create: %v", results.Error)
|
||||||
|
@ -139,7 +139,7 @@ func TestCreateFromMap(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateWithAssociations(t *testing.T) {
|
func TestCreateWithAssociations(t *testing.T) {
|
||||||
var user = *GetUser("create_with_associations", Config{
|
user := *GetUser("create_with_associations", Config{
|
||||||
Account: true,
|
Account: true,
|
||||||
Pets: 2,
|
Pets: 2,
|
||||||
Toys: 3,
|
Toys: 3,
|
||||||
|
@ -223,7 +223,7 @@ func TestBulkCreatePtrDataWithAssociations(t *testing.T) {
|
||||||
|
|
||||||
func TestPolymorphicHasOne(t *testing.T) {
|
func TestPolymorphicHasOne(t *testing.T) {
|
||||||
t.Run("Struct", func(t *testing.T) {
|
t.Run("Struct", func(t *testing.T) {
|
||||||
var pet = Pet{
|
pet := Pet{
|
||||||
Name: "PolymorphicHasOne",
|
Name: "PolymorphicHasOne",
|
||||||
Toy: Toy{Name: "Toy-PolymorphicHasOne"},
|
Toy: Toy{Name: "Toy-PolymorphicHasOne"},
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ func TestPolymorphicHasOne(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Slice", func(t *testing.T) {
|
t.Run("Slice", func(t *testing.T) {
|
||||||
var pets = []Pet{{
|
pets := []Pet{{
|
||||||
Name: "PolymorphicHasOne-Slice-1",
|
Name: "PolymorphicHasOne-Slice-1",
|
||||||
Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-1"},
|
Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-1"},
|
||||||
}, {
|
}, {
|
||||||
|
@ -269,7 +269,7 @@ func TestPolymorphicHasOne(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("SliceOfPtr", func(t *testing.T) {
|
t.Run("SliceOfPtr", func(t *testing.T) {
|
||||||
var pets = []*Pet{{
|
pets := []*Pet{{
|
||||||
Name: "PolymorphicHasOne-Slice-1",
|
Name: "PolymorphicHasOne-Slice-1",
|
||||||
Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-1"},
|
Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-1"},
|
||||||
}, {
|
}, {
|
||||||
|
@ -290,7 +290,7 @@ func TestPolymorphicHasOne(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Array", func(t *testing.T) {
|
t.Run("Array", func(t *testing.T) {
|
||||||
var pets = [...]Pet{{
|
pets := [...]Pet{{
|
||||||
Name: "PolymorphicHasOne-Array-1",
|
Name: "PolymorphicHasOne-Array-1",
|
||||||
Toy: Toy{Name: "Toy-PolymorphicHasOne-Array-1"},
|
Toy: Toy{Name: "Toy-PolymorphicHasOne-Array-1"},
|
||||||
}, {
|
}, {
|
||||||
|
@ -311,7 +311,7 @@ func TestPolymorphicHasOne(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("ArrayPtr", func(t *testing.T) {
|
t.Run("ArrayPtr", func(t *testing.T) {
|
||||||
var pets = [...]*Pet{{
|
pets := [...]*Pet{{
|
||||||
Name: "PolymorphicHasOne-Array-1",
|
Name: "PolymorphicHasOne-Array-1",
|
||||||
Toy: Toy{Name: "Toy-PolymorphicHasOne-Array-1"},
|
Toy: Toy{Name: "Toy-PolymorphicHasOne-Array-1"},
|
||||||
}, {
|
}, {
|
||||||
|
@ -348,12 +348,12 @@ func TestCreateEmptyStruct(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateEmptySlice(t *testing.T) {
|
func TestCreateEmptySlice(t *testing.T) {
|
||||||
var data = []User{}
|
data := []User{}
|
||||||
if err := DB.Create(&data).Error; err != gorm.ErrEmptySlice {
|
if err := DB.Create(&data).Error; err != gorm.ErrEmptySlice {
|
||||||
t.Errorf("no data should be created, got %v", err)
|
t.Errorf("no data should be created, got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var sliceMap = []map[string]interface{}{}
|
sliceMap := []map[string]interface{}{}
|
||||||
if err := DB.Model(&User{}).Create(&sliceMap).Error; err != gorm.ErrEmptySlice {
|
if err := DB.Model(&User{}).Create(&sliceMap).Error; err != gorm.ErrEmptySlice {
|
||||||
t.Errorf("no data should be created, got %v", err)
|
t.Errorf("no data should be created, got %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ func TestDefaultValue(t *testing.T) {
|
||||||
t.Fatalf("Failed to migrate with default value, got error: %v", err)
|
t.Fatalf("Failed to migrate with default value, got error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var harumph = Harumph{Email: "hello@gorm.io"}
|
harumph := Harumph{Email: "hello@gorm.io"}
|
||||||
if err := DB.Create(&harumph).Error; err != nil {
|
if err := DB.Create(&harumph).Error; err != nil {
|
||||||
t.Fatalf("Failed to create data with default value, got error: %v", err)
|
t.Fatalf("Failed to create data with default value, got error: %v", err)
|
||||||
} else if harumph.Name != "foo" || harumph.Name2 != "foo" || harumph.Name3 != "" || harumph.Age != 18 || !harumph.Enabled {
|
} else if harumph.Name != "foo" || harumph.Name2 != "foo" || harumph.Name3 != "" || harumph.Age != 18 || !harumph.Enabled {
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDelete(t *testing.T) {
|
func TestDelete(t *testing.T) {
|
||||||
var users = []User{*GetUser("delete", Config{}), *GetUser("delete", Config{}), *GetUser("delete", Config{})}
|
users := []User{*GetUser("delete", Config{}), *GetUser("delete", Config{}), *GetUser("delete", Config{})}
|
||||||
|
|
||||||
if err := DB.Create(&users).Error; err != nil {
|
if err := DB.Create(&users).Error; err != nil {
|
||||||
t.Errorf("errors happened when create: %v", err)
|
t.Errorf("errors happened when create: %v", err)
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDistinct(t *testing.T) {
|
func TestDistinct(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("distinct", Config{}),
|
*GetUser("distinct", Config{}),
|
||||||
*GetUser("distinct", Config{}),
|
*GetUser("distinct", Config{}),
|
||||||
*GetUser("distinct", Config{}),
|
*GetUser("distinct", Config{}),
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGroupBy(t *testing.T) {
|
func TestGroupBy(t *testing.T) {
|
||||||
var users = []User{{
|
users := []User{{
|
||||||
Name: "groupby",
|
Name: "groupby",
|
||||||
Age: 10,
|
Age: 10,
|
||||||
Birthday: Now(),
|
Birthday: Now(),
|
||||||
|
@ -67,7 +67,7 @@ func TestGroupBy(t *testing.T) {
|
||||||
t.Errorf("name should be groupby, but got %v, total should be 660, but got %v", name, total)
|
t.Errorf("name should be groupby, but got %v, total should be 660, but got %v", name, total)
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = struct {
|
result := struct {
|
||||||
Name string
|
Name string
|
||||||
Total int64
|
Total int64
|
||||||
}{}
|
}{}
|
||||||
|
|
|
@ -57,7 +57,7 @@ func TestJoinsForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestJoinConds(t *testing.T) {
|
func TestJoinConds(t *testing.T) {
|
||||||
var user = *GetUser("joins-conds", Config{Account: true, Pets: 3})
|
user := *GetUser("joins-conds", Config{Account: true, Pets: 3})
|
||||||
DB.Save(&user)
|
DB.Save(&user)
|
||||||
|
|
||||||
var users1 []User
|
var users1 []User
|
||||||
|
@ -111,7 +111,7 @@ func TestJoinConds(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestJoinOn(t *testing.T) {
|
func TestJoinOn(t *testing.T) {
|
||||||
var user = *GetUser("joins-on", Config{Pets: 2})
|
user := *GetUser("joins-on", Config{Pets: 2})
|
||||||
DB.Save(&user)
|
DB.Save(&user)
|
||||||
|
|
||||||
var user1 User
|
var user1 User
|
||||||
|
@ -168,8 +168,8 @@ func TestJoinCount(t *testing.T) {
|
||||||
DB.Create(&user)
|
DB.Create(&user)
|
||||||
|
|
||||||
query := DB.Model(&User{}).Joins("Company")
|
query := DB.Model(&User{}).Joins("Company")
|
||||||
//Bug happens when .Count is called on a query.
|
// Bug happens when .Count is called on a query.
|
||||||
//Removing the below two lines or downgrading to gorm v1.20.12 will make this test pass.
|
// Removing the below two lines or downgrading to gorm v1.20.12 will make this test pass.
|
||||||
var total int64
|
var total int64
|
||||||
query.Count(&total)
|
query.Count(&total)
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,6 @@ func TestSmartMigrateColumn(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMigrateWithColumnComment(t *testing.T) {
|
func TestMigrateWithColumnComment(t *testing.T) {
|
||||||
|
|
|
@ -71,7 +71,7 @@ func TestManyToManyWithMultiPrimaryKeys(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var tag3 = &Tag{Locale: "ZH", Value: "tag3"}
|
tag3 := &Tag{Locale: "ZH", Value: "tag3"}
|
||||||
DB.Model(&blog).Association("Tags").Append([]*Tag{tag3})
|
DB.Model(&blog).Association("Tags").Append([]*Tag{tag3})
|
||||||
|
|
||||||
if !compareTags(blog.Tags, []string{"tag1", "tag2", "tag3"}) {
|
if !compareTags(blog.Tags, []string{"tag1", "tag2", "tag3"}) {
|
||||||
|
@ -95,8 +95,8 @@ func TestManyToManyWithMultiPrimaryKeys(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var tag5 = &Tag{Locale: "ZH", Value: "tag5"}
|
tag5 := &Tag{Locale: "ZH", Value: "tag5"}
|
||||||
var tag6 = &Tag{Locale: "ZH", Value: "tag6"}
|
tag6 := &Tag{Locale: "ZH", Value: "tag6"}
|
||||||
DB.Model(&blog).Association("Tags").Replace(tag5, tag6)
|
DB.Model(&blog).Association("Tags").Replace(tag5, tag6)
|
||||||
var tags2 []Tag
|
var tags2 []Tag
|
||||||
DB.Model(&blog).Association("Tags").Find(&tags2)
|
DB.Model(&blog).Association("Tags").Find(&tags2)
|
||||||
|
@ -170,7 +170,7 @@ func TestManyToManyWithCustomizedForeignKeys(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var tag3 = &Tag{Locale: "ZH", Value: "tag3"}
|
tag3 := &Tag{Locale: "ZH", Value: "tag3"}
|
||||||
DB.Model(&blog).Association("SharedTags").Append([]*Tag{tag3})
|
DB.Model(&blog).Association("SharedTags").Append([]*Tag{tag3})
|
||||||
if !compareTags(blog.SharedTags, []string{"tag1", "tag2", "tag3"}) {
|
if !compareTags(blog.SharedTags, []string{"tag1", "tag2", "tag3"}) {
|
||||||
t.Fatalf("Blog should has three tags after Append")
|
t.Fatalf("Blog should has three tags after Append")
|
||||||
|
@ -201,7 +201,7 @@ func TestManyToManyWithCustomizedForeignKeys(t *testing.T) {
|
||||||
t.Fatalf("Preload many2many relations")
|
t.Fatalf("Preload many2many relations")
|
||||||
}
|
}
|
||||||
|
|
||||||
var tag4 = &Tag{Locale: "ZH", Value: "tag4"}
|
tag4 := &Tag{Locale: "ZH", Value: "tag4"}
|
||||||
DB.Model(&blog2).Association("SharedTags").Append(tag4)
|
DB.Model(&blog2).Association("SharedTags").Append(tag4)
|
||||||
|
|
||||||
DB.Model(&blog).Association("SharedTags").Find(&tags)
|
DB.Model(&blog).Association("SharedTags").Find(&tags)
|
||||||
|
@ -215,8 +215,8 @@ func TestManyToManyWithCustomizedForeignKeys(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var tag5 = &Tag{Locale: "ZH", Value: "tag5"}
|
tag5 := &Tag{Locale: "ZH", Value: "tag5"}
|
||||||
var tag6 = &Tag{Locale: "ZH", Value: "tag6"}
|
tag6 := &Tag{Locale: "ZH", Value: "tag6"}
|
||||||
DB.Model(&blog2).Association("SharedTags").Replace(tag5, tag6)
|
DB.Model(&blog2).Association("SharedTags").Replace(tag5, tag6)
|
||||||
var tags2 []Tag
|
var tags2 []Tag
|
||||||
DB.Model(&blog).Association("SharedTags").Find(&tags2)
|
DB.Model(&blog).Association("SharedTags").Find(&tags2)
|
||||||
|
@ -291,7 +291,7 @@ func TestManyToManyWithCustomizedForeignKeys2(t *testing.T) {
|
||||||
DB.Create(&blog2)
|
DB.Create(&blog2)
|
||||||
|
|
||||||
// Append
|
// Append
|
||||||
var tag3 = &Tag{Locale: "ZH", Value: "tag3"}
|
tag3 := &Tag{Locale: "ZH", Value: "tag3"}
|
||||||
DB.Model(&blog).Association("LocaleTags").Append([]*Tag{tag3})
|
DB.Model(&blog).Association("LocaleTags").Append([]*Tag{tag3})
|
||||||
if !compareTags(blog.LocaleTags, []string{"tag1", "tag2", "tag3"}) {
|
if !compareTags(blog.LocaleTags, []string{"tag1", "tag2", "tag3"}) {
|
||||||
t.Fatalf("Blog should has three tags after Append")
|
t.Fatalf("Blog should has three tags after Append")
|
||||||
|
@ -322,7 +322,7 @@ func TestManyToManyWithCustomizedForeignKeys2(t *testing.T) {
|
||||||
t.Fatalf("Preload many2many relations")
|
t.Fatalf("Preload many2many relations")
|
||||||
}
|
}
|
||||||
|
|
||||||
var tag4 = &Tag{Locale: "ZH", Value: "tag4"}
|
tag4 := &Tag{Locale: "ZH", Value: "tag4"}
|
||||||
DB.Model(&blog2).Association("LocaleTags").Append(tag4)
|
DB.Model(&blog2).Association("LocaleTags").Append(tag4)
|
||||||
|
|
||||||
DB.Model(&blog).Association("LocaleTags").Find(&tags)
|
DB.Model(&blog).Association("LocaleTags").Find(&tags)
|
||||||
|
@ -336,8 +336,8 @@ func TestManyToManyWithCustomizedForeignKeys2(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace
|
// Replace
|
||||||
var tag5 = &Tag{Locale: "ZH", Value: "tag5"}
|
tag5 := &Tag{Locale: "ZH", Value: "tag5"}
|
||||||
var tag6 = &Tag{Locale: "ZH", Value: "tag6"}
|
tag6 := &Tag{Locale: "ZH", Value: "tag6"}
|
||||||
DB.Model(&blog2).Association("LocaleTags").Replace(tag5, tag6)
|
DB.Model(&blog2).Association("LocaleTags").Replace(tag5, tag6)
|
||||||
|
|
||||||
var tags2 []Tag
|
var tags2 []Tag
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
type Animal struct {
|
type Animal struct {
|
||||||
Counter uint64 `gorm:"primary_key:yes"`
|
Counter uint64 `gorm:"primary_key:yes"`
|
||||||
Name string `gorm:"DEFAULT:'galeone'"`
|
Name string `gorm:"DEFAULT:'galeone'"`
|
||||||
From string //test reserved sql keyword as field name
|
From string // test reserved sql keyword as field name
|
||||||
Age *time.Time
|
Age *time.Time
|
||||||
unexported string // unexported value
|
unexported string // unexported value
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPreloadWithAssociations(t *testing.T) {
|
func TestPreloadWithAssociations(t *testing.T) {
|
||||||
var user = *GetUser("preload_with_associations", Config{
|
user := *GetUser("preload_with_associations", Config{
|
||||||
Account: true,
|
Account: true,
|
||||||
Pets: 2,
|
Pets: 2,
|
||||||
Toys: 3,
|
Toys: 3,
|
||||||
|
@ -35,7 +35,7 @@ func TestPreloadWithAssociations(t *testing.T) {
|
||||||
DB.Preload(clause.Associations).Find(&user2, "id = ?", user.ID)
|
DB.Preload(clause.Associations).Find(&user2, "id = ?", user.ID)
|
||||||
CheckUser(t, user2, user)
|
CheckUser(t, user2, user)
|
||||||
|
|
||||||
var user3 = *GetUser("preload_with_associations_new", Config{
|
user3 := *GetUser("preload_with_associations_new", Config{
|
||||||
Account: true,
|
Account: true,
|
||||||
Pets: 2,
|
Pets: 2,
|
||||||
Toys: 3,
|
Toys: 3,
|
||||||
|
@ -51,7 +51,7 @@ func TestPreloadWithAssociations(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNestedPreload(t *testing.T) {
|
func TestNestedPreload(t *testing.T) {
|
||||||
var user = *GetUser("nested_preload", Config{Pets: 2})
|
user := *GetUser("nested_preload", Config{Pets: 2})
|
||||||
|
|
||||||
for idx, pet := range user.Pets {
|
for idx, pet := range user.Pets {
|
||||||
pet.Toy = Toy{Name: "toy_nested_preload_" + strconv.Itoa(idx+1)}
|
pet.Toy = Toy{Name: "toy_nested_preload_" + strconv.Itoa(idx+1)}
|
||||||
|
@ -75,7 +75,7 @@ func TestNestedPreload(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNestedPreloadForSlice(t *testing.T) {
|
func TestNestedPreloadForSlice(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice_nested_preload_1", Config{Pets: 2}),
|
*GetUser("slice_nested_preload_1", Config{Pets: 2}),
|
||||||
*GetUser("slice_nested_preload_2", Config{Pets: 0}),
|
*GetUser("slice_nested_preload_2", Config{Pets: 0}),
|
||||||
*GetUser("slice_nested_preload_3", Config{Pets: 3}),
|
*GetUser("slice_nested_preload_3", Config{Pets: 3}),
|
||||||
|
@ -105,7 +105,7 @@ func TestNestedPreloadForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPreloadWithConds(t *testing.T) {
|
func TestPreloadWithConds(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice_nested_preload_1", Config{Account: true}),
|
*GetUser("slice_nested_preload_1", Config{Account: true}),
|
||||||
*GetUser("slice_nested_preload_2", Config{Account: false}),
|
*GetUser("slice_nested_preload_2", Config{Account: false}),
|
||||||
*GetUser("slice_nested_preload_3", Config{Account: true}),
|
*GetUser("slice_nested_preload_3", Config{Account: true}),
|
||||||
|
@ -163,7 +163,7 @@ func TestPreloadWithConds(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNestedPreloadWithConds(t *testing.T) {
|
func TestNestedPreloadWithConds(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("slice_nested_preload_1", Config{Pets: 2}),
|
*GetUser("slice_nested_preload_1", Config{Pets: 2}),
|
||||||
*GetUser("slice_nested_preload_2", Config{Pets: 0}),
|
*GetUser("slice_nested_preload_2", Config{Pets: 0}),
|
||||||
*GetUser("slice_nested_preload_3", Config{Pets: 3}),
|
*GetUser("slice_nested_preload_3", Config{Pets: 3}),
|
||||||
|
@ -213,7 +213,7 @@ func TestNestedPreloadWithConds(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPreloadEmptyData(t *testing.T) {
|
func TestPreloadEmptyData(t *testing.T) {
|
||||||
var user = *GetUser("user_without_associations", Config{})
|
user := *GetUser("user_without_associations", Config{})
|
||||||
DB.Create(&user)
|
DB.Create(&user)
|
||||||
|
|
||||||
DB.Preload("Team").Preload("Languages").Preload("Friends").First(&user, "name = ?", user.Name)
|
DB.Preload("Team").Preload("Languages").Preload("Friends").First(&user, "name = ?", user.Name)
|
||||||
|
|
|
@ -17,7 +17,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFind(t *testing.T) {
|
func TestFind(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("find", Config{}),
|
*GetUser("find", Config{}),
|
||||||
*GetUser("find", Config{}),
|
*GetUser("find", Config{}),
|
||||||
*GetUser("find", Config{}),
|
*GetUser("find", Config{}),
|
||||||
|
@ -57,7 +57,7 @@ func TestFind(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("FirstMap", func(t *testing.T) {
|
t.Run("FirstMap", func(t *testing.T) {
|
||||||
var first = map[string]interface{}{}
|
first := map[string]interface{}{}
|
||||||
if err := DB.Model(&User{}).Where("name = ?", "find").First(first).Error; err != nil {
|
if err := DB.Model(&User{}).Where("name = ?", "find").First(first).Error; err != nil {
|
||||||
t.Errorf("errors happened when query first: %v", err)
|
t.Errorf("errors happened when query first: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -88,7 +88,7 @@ func TestFind(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("FirstMapWithTable", func(t *testing.T) {
|
t.Run("FirstMapWithTable", func(t *testing.T) {
|
||||||
var first = map[string]interface{}{}
|
first := map[string]interface{}{}
|
||||||
if err := DB.Table("users").Where("name = ?", "find").Find(first).Error; err != nil {
|
if err := DB.Table("users").Where("name = ?", "find").Find(first).Error; err != nil {
|
||||||
t.Errorf("errors happened when query first: %v", err)
|
t.Errorf("errors happened when query first: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -120,7 +120,7 @@ func TestFind(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("FirstPtrMap", func(t *testing.T) {
|
t.Run("FirstPtrMap", func(t *testing.T) {
|
||||||
var first = map[string]interface{}{}
|
first := map[string]interface{}{}
|
||||||
if err := DB.Model(&User{}).Where("name = ?", "find").First(&first).Error; err != nil {
|
if err := DB.Model(&User{}).Where("name = ?", "find").First(&first).Error; err != nil {
|
||||||
t.Errorf("errors happened when query first: %v", err)
|
t.Errorf("errors happened when query first: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -135,7 +135,7 @@ func TestFind(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("FirstSliceOfMap", func(t *testing.T) {
|
t.Run("FirstSliceOfMap", func(t *testing.T) {
|
||||||
var allMap = []map[string]interface{}{}
|
allMap := []map[string]interface{}{}
|
||||||
if err := DB.Model(&User{}).Where("name = ?", "find").Find(&allMap).Error; err != nil {
|
if err := DB.Model(&User{}).Where("name = ?", "find").Find(&allMap).Error; err != nil {
|
||||||
t.Errorf("errors happened when query find: %v", err)
|
t.Errorf("errors happened when query find: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -170,7 +170,7 @@ func TestFind(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("FindSliceOfMapWithTable", func(t *testing.T) {
|
t.Run("FindSliceOfMapWithTable", func(t *testing.T) {
|
||||||
var allMap = []map[string]interface{}{}
|
allMap := []map[string]interface{}{}
|
||||||
if err := DB.Table("users").Where("name = ?", "find").Find(&allMap).Error; err != nil {
|
if err := DB.Table("users").Where("name = ?", "find").Find(&allMap).Error; err != nil {
|
||||||
t.Errorf("errors happened when query find: %v", err)
|
t.Errorf("errors happened when query find: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -241,7 +241,7 @@ func TestQueryWithAssociation(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFindInBatches(t *testing.T) {
|
func TestFindInBatches(t *testing.T) {
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("find_in_batches", Config{}),
|
*GetUser("find_in_batches", Config{}),
|
||||||
*GetUser("find_in_batches", Config{}),
|
*GetUser("find_in_batches", Config{}),
|
||||||
*GetUser("find_in_batches", Config{}),
|
*GetUser("find_in_batches", Config{}),
|
||||||
|
@ -297,7 +297,7 @@ func TestFindInBatchesWithError(t *testing.T) {
|
||||||
t.Skip("skip sqlserver due to it will raise data race for invalid sql")
|
t.Skip("skip sqlserver due to it will raise data race for invalid sql")
|
||||||
}
|
}
|
||||||
|
|
||||||
var users = []User{
|
users := []User{
|
||||||
*GetUser("find_in_batches_with_error", Config{}),
|
*GetUser("find_in_batches_with_error", Config{}),
|
||||||
*GetUser("find_in_batches_with_error", Config{}),
|
*GetUser("find_in_batches_with_error", Config{}),
|
||||||
*GetUser("find_in_batches_with_error", Config{}),
|
*GetUser("find_in_batches_with_error", Config{}),
|
||||||
|
|
|
@ -45,7 +45,7 @@ func TestScan(t *testing.T) {
|
||||||
t.Fatalf("Scan into struct should work, got %#v, should %#v", res, user3)
|
t.Fatalf("Scan into struct should work, got %#v, should %#v", res, user3)
|
||||||
}
|
}
|
||||||
|
|
||||||
var doubleAgeRes = &result{}
|
doubleAgeRes := &result{}
|
||||||
if err := DB.Table("users").Select("age + age as age").Where("id = ?", user3.ID).Scan(&doubleAgeRes).Error; err != nil {
|
if err := DB.Table("users").Select("age + age as age").Where("id = ?", user3.ID).Scan(&doubleAgeRes).Error; err != nil {
|
||||||
t.Errorf("Scan to pointer of pointer")
|
t.Errorf("Scan to pointer of pointer")
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,11 +182,11 @@ func (data *EncryptedData) Scan(value interface{}) error {
|
||||||
|
|
||||||
func (data EncryptedData) Value() (driver.Value, error) {
|
func (data EncryptedData) Value() (driver.Value, error) {
|
||||||
if len(data) > 0 && data[0] == 'x' {
|
if len(data) > 0 && data[0] == 'x' {
|
||||||
//needed to test failures
|
// needed to test failures
|
||||||
return nil, errors.New("Should not start with 'x'")
|
return nil, errors.New("Should not start with 'x'")
|
||||||
}
|
}
|
||||||
|
|
||||||
//prepend asterisks
|
// prepend asterisks
|
||||||
return append([]byte("***"), data...), nil
|
return append([]byte("***"), data...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ func NameIn(names []string) func(d *gorm.DB) *gorm.DB {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestScopes(t *testing.T) {
|
func TestScopes(t *testing.T) {
|
||||||
var users = []*User{
|
users := []*User{
|
||||||
GetUser("ScopeUser1", Config{}),
|
GetUser("ScopeUser1", Config{}),
|
||||||
GetUser("ScopeUser2", Config{}),
|
GetUser("ScopeUser2", Config{}),
|
||||||
GetUser("ScopeUser3", Config{}),
|
GetUser("ScopeUser3", Config{}),
|
||||||
|
|
|
@ -4,12 +4,11 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
. "gorm.io/gorm/utils/tests"
|
. "gorm.io/gorm/utils/tests"
|
||||||
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRow(t *testing.T) {
|
func TestRow(t *testing.T) {
|
||||||
|
@ -389,12 +388,12 @@ func assertEqualSQL(t *testing.T, expected string, actually string) {
|
||||||
actually = replaceQuoteInSQL(actually)
|
actually = replaceQuoteInSQL(actually)
|
||||||
|
|
||||||
// ignore updated_at value, becase it's generated in Gorm inernal, can't to mock value on update.
|
// ignore updated_at value, becase it's generated in Gorm inernal, can't to mock value on update.
|
||||||
var updatedAtRe = regexp.MustCompile(`(?i)"updated_at"=".+?"`)
|
updatedAtRe := regexp.MustCompile(`(?i)"updated_at"=".+?"`)
|
||||||
actually = updatedAtRe.ReplaceAllString(actually, `"updated_at"=?`)
|
actually = updatedAtRe.ReplaceAllString(actually, `"updated_at"=?`)
|
||||||
expected = updatedAtRe.ReplaceAllString(expected, `"updated_at"=?`)
|
expected = updatedAtRe.ReplaceAllString(expected, `"updated_at"=?`)
|
||||||
|
|
||||||
// ignore RETURNING "id" (only in PostgreSQL)
|
// ignore RETURNING "id" (only in PostgreSQL)
|
||||||
var returningRe = regexp.MustCompile(`(?i)RETURNING "id"`)
|
returningRe := regexp.MustCompile(`(?i)RETURNING "id"`)
|
||||||
actually = returningRe.ReplaceAllString(actually, ``)
|
actually = returningRe.ReplaceAllString(actually, ``)
|
||||||
expected = returningRe.ReplaceAllString(expected, ``)
|
expected = returningRe.ReplaceAllString(expected, ``)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUpdateBelongsTo(t *testing.T) {
|
func TestUpdateBelongsTo(t *testing.T) {
|
||||||
var user = *GetUser("update-belongs-to", Config{})
|
user := *GetUser("update-belongs-to", Config{})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUpdateHasManyAssociations(t *testing.T) {
|
func TestUpdateHasManyAssociations(t *testing.T) {
|
||||||
var user = *GetUser("update-has-many", Config{})
|
user := *GetUser("update-has-many", Config{})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -44,7 +44,7 @@ func TestUpdateHasManyAssociations(t *testing.T) {
|
||||||
CheckUser(t, user4, user)
|
CheckUser(t, user4, user)
|
||||||
|
|
||||||
t.Run("Polymorphic", func(t *testing.T) {
|
t.Run("Polymorphic", func(t *testing.T) {
|
||||||
var user = *GetUser("update-has-many", Config{})
|
user := *GetUser("update-has-many", Config{})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUpdateHasOne(t *testing.T) {
|
func TestUpdateHasOne(t *testing.T) {
|
||||||
var user = *GetUser("update-has-one", Config{})
|
user := *GetUser("update-has-one", Config{})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
@ -35,7 +35,7 @@ func TestUpdateHasOne(t *testing.T) {
|
||||||
DB.Preload("Account").Find(&user3, "id = ?", user.ID)
|
DB.Preload("Account").Find(&user3, "id = ?", user.ID)
|
||||||
|
|
||||||
CheckUser(t, user2, user3)
|
CheckUser(t, user2, user3)
|
||||||
var lastUpdatedAt = user2.Account.UpdatedAt
|
lastUpdatedAt := user2.Account.UpdatedAt
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
|
|
||||||
if err := DB.Session(&gorm.Session{FullSaveAssociations: true}).Save(&user).Error; err != nil {
|
if err := DB.Session(&gorm.Session{FullSaveAssociations: true}).Save(&user).Error; err != nil {
|
||||||
|
@ -53,7 +53,7 @@ func TestUpdateHasOne(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("Polymorphic", func(t *testing.T) {
|
t.Run("Polymorphic", func(t *testing.T) {
|
||||||
var pet = Pet{Name: "create"}
|
pet := Pet{Name: "create"}
|
||||||
|
|
||||||
if err := DB.Create(&pet).Error; err != nil {
|
if err := DB.Create(&pet).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUpdateMany2ManyAssociations(t *testing.T) {
|
func TestUpdateMany2ManyAssociations(t *testing.T) {
|
||||||
var user = *GetUser("update-many2many", Config{})
|
user := *GetUser("update-many2many", Config{})
|
||||||
|
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Fatalf("errors happened when create: %v", err)
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
|
|
@ -125,7 +125,7 @@ func TestUpdate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdates(t *testing.T) {
|
func TestUpdates(t *testing.T) {
|
||||||
var users = []*User{
|
users := []*User{
|
||||||
GetUser("updates_01", Config{}),
|
GetUser("updates_01", Config{}),
|
||||||
GetUser("updates_02", Config{}),
|
GetUser("updates_02", Config{}),
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ func TestUpdates(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateColumn(t *testing.T) {
|
func TestUpdateColumn(t *testing.T) {
|
||||||
var users = []*User{
|
users := []*User{
|
||||||
GetUser("update_column_01", Config{}),
|
GetUser("update_column_01", Config{}),
|
||||||
GetUser("update_column_02", Config{}),
|
GetUser("update_column_02", Config{}),
|
||||||
}
|
}
|
||||||
|
@ -622,7 +622,7 @@ func TestSave(t *testing.T) {
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
user1UpdatedAt := result.UpdatedAt
|
user1UpdatedAt := result.UpdatedAt
|
||||||
user2UpdatedAt := user2.UpdatedAt
|
user2UpdatedAt := user2.UpdatedAt
|
||||||
var users = []*User{&result, &user2}
|
users := []*User{&result, &user2}
|
||||||
DB.Save(&users)
|
DB.Save(&users)
|
||||||
|
|
||||||
if user1UpdatedAt.Format(time.RFC1123Z) == result.UpdatedAt.Format(time.RFC1123Z) {
|
if user1UpdatedAt.Format(time.RFC1123Z) == result.UpdatedAt.Format(time.RFC1123Z) {
|
||||||
|
|
|
@ -67,7 +67,7 @@ func TestUpsert(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var user = *GetUser("upsert_on_conflict", Config{})
|
user := *GetUser("upsert_on_conflict", Config{})
|
||||||
user.Age = 20
|
user.Age = 20
|
||||||
if err := DB.Create(&user).Error; err != nil {
|
if err := DB.Create(&user).Error; err != nil {
|
||||||
t.Errorf("failed to create user, got error %v", err)
|
t.Errorf("failed to create user, got error %v", err)
|
||||||
|
@ -320,11 +320,9 @@ func TestUpdateWithMissWhere(t *testing.T) {
|
||||||
|
|
||||||
if err := tx.Error; err != nil {
|
if err := tx.Error; err != nil {
|
||||||
t.Fatalf("failed to update user,missing where condtion,err=%+v", err)
|
t.Fatalf("failed to update user,missing where condtion,err=%+v", err)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !regexp.MustCompile("WHERE .id. = [^ ]+$").MatchString(tx.Statement.SQL.String()) {
|
if !regexp.MustCompile("WHERE .id. = [^ ]+$").MatchString(tx.Statement.SQL.String()) {
|
||||||
t.Fatalf("invalid updating SQL, got %v", tx.Statement.SQL.String())
|
t.Fatalf("invalid updating SQL, got %v", tx.Statement.SQL.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,7 @@ import (
|
||||||
"gorm.io/gorm/schema"
|
"gorm.io/gorm/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DummyDialector struct {
|
type DummyDialector struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func (DummyDialector) Name() string {
|
func (DummyDialector) Name() string {
|
||||||
return "dummy"
|
return "dummy"
|
||||||
|
|
Loading…
Reference in New Issue