github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/templates/test/relationship_to_many.go.tpl (about) 1 {{- if .Table.IsJoinTable -}} 2 {{- else -}} 3 {{- $table := .Table }} 4 {{- range $rel := .Table.ToManyRelationships -}} 5 {{- $ltable := $.Aliases.Table $rel.Table -}} 6 {{- $ftable := $.Aliases.Table $rel.ForeignTable -}} 7 {{- $relAlias := $.Aliases.ManyRelationship $rel.ForeignTable $rel.Name $rel.JoinTable $rel.JoinLocalFKeyName -}} 8 {{- $colField := $ltable.Column $rel.Column -}} 9 {{- $fcolField := $ftable.Column $rel.ForeignColumn -}} 10 {{- $usesPrimitives := usesPrimitives $.Tables $rel.Table $rel.Column $rel.ForeignTable $rel.ForeignColumn -}} 11 {{- $schemaForeignTable := .ForeignTable | $.SchemaTable }} 12 func test{{$ltable.UpSingular}}ToMany{{$relAlias.Local}}(t *testing.T) { 13 var err error 14 {{if not $.NoContext}}ctx := context.Background(){{end}} 15 tx := MustTx({{if $.NoContext}}boil.Begin(){{else}}boil.BeginTx(ctx, nil){{end}}) 16 defer func() { _ = tx.Rollback() }() 17 18 var a {{$ltable.UpSingular}} 19 var b, c {{$ftable.UpSingular}} 20 21 seed := randomize.NewSeed() 22 if err = randomize.Struct(seed, &a, {{$ltable.DownSingular}}DBTypes, true, {{$ltable.DownSingular}}ColumnsWithDefault...); err != nil { 23 t.Errorf("Unable to randomize {{$ltable.UpSingular}} struct: %s", err) 24 } 25 26 if err := a.Insert({{if not $.NoContext}}ctx, {{end -}} tx, boil.Infer()); err != nil { 27 t.Fatal(err) 28 } 29 30 if err = randomize.Struct(seed, &b, {{$ftable.DownSingular}}DBTypes, false, {{$ftable.DownSingular}}ColumnsWithDefault...); err != nil { 31 t.Fatal(err) 32 } 33 if err = randomize.Struct(seed, &c, {{$ftable.DownSingular}}DBTypes, false, {{$ftable.DownSingular}}ColumnsWithDefault...); err != nil { 34 t.Fatal(err) 35 } 36 37 {{if not .ToJoinTable -}} 38 {{if $usesPrimitives}} 39 b.{{$fcolField}} = a.{{$colField}} 40 c.{{$fcolField}} = a.{{$colField}} 41 {{else -}} 42 queries.Assign(&b.{{$fcolField}}, a.{{$colField}}) 43 queries.Assign(&c.{{$fcolField}}, a.{{$colField}}) 44 {{- end}} 45 {{- end}} 46 if err = b.Insert({{if not $.NoContext}}ctx, {{end -}} tx, boil.Infer()); err != nil { 47 t.Fatal(err) 48 } 49 if err = c.Insert({{if not $.NoContext}}ctx, {{end -}} tx, boil.Infer()); err != nil { 50 t.Fatal(err) 51 } 52 53 {{if .ToJoinTable -}} 54 _, err = tx.Exec("insert into {{.JoinTable | $.SchemaTable}} ({{.JoinLocalColumn | $.Quotes}}, {{.JoinForeignColumn | $.Quotes}}) values {{if $.Dialect.UseIndexPlaceholders}}($1, $2){{else}}(?, ?){{end}}", a.{{$colField}}, b.{{$fcolField}}) 55 if err != nil { 56 t.Fatal(err) 57 } 58 _, err = tx.Exec("insert into {{.JoinTable | $.SchemaTable}} ({{.JoinLocalColumn | $.Quotes}}, {{.JoinForeignColumn | $.Quotes}}) values {{if $.Dialect.UseIndexPlaceholders}}($1, $2){{else}}(?, ?){{end}}", a.{{$colField}}, c.{{$fcolField}}) 59 if err != nil { 60 t.Fatal(err) 61 } 62 {{end}} 63 64 check, err := a.{{$relAlias.Local}}().All({{if not $.NoContext}}ctx, {{end -}} tx) 65 if err != nil { 66 t.Fatal(err) 67 } 68 69 bFound, cFound := false, false 70 for _, v := range check { 71 {{if $usesPrimitives -}} 72 if v.{{$fcolField}} == b.{{$fcolField}} { 73 bFound = true 74 } 75 if v.{{$fcolField}} == c.{{$fcolField}} { 76 cFound = true 77 } 78 {{else -}} 79 if queries.Equal(v.{{$fcolField}}, b.{{$fcolField}}) { 80 bFound = true 81 } 82 if queries.Equal(v.{{$fcolField}}, c.{{$fcolField}}) { 83 cFound = true 84 } 85 {{end -}} 86 } 87 88 if !bFound { 89 t.Error("expected to find b") 90 } 91 if !cFound { 92 t.Error("expected to find c") 93 } 94 95 slice := {{$ltable.UpSingular}}Slice{&a} 96 if err = a.L.Load{{$relAlias.Local}}({{if not $.NoContext}}ctx, {{end -}} tx, false, (*[]*{{$ltable.UpSingular}})(&slice), nil); err != nil { 97 t.Fatal(err) 98 } 99 if got := len(a.R.{{$relAlias.Local}}); got != 2 { 100 t.Error("number of eager loaded records wrong, got:", got) 101 } 102 103 a.R.{{$relAlias.Local}} = nil 104 if err = a.L.Load{{$relAlias.Local}}({{if not $.NoContext}}ctx, {{end -}} tx, true, &a, nil); err != nil { 105 t.Fatal(err) 106 } 107 if got := len(a.R.{{$relAlias.Local}}); got != 2 { 108 t.Error("number of eager loaded records wrong, got:", got) 109 } 110 111 if t.Failed() { 112 t.Logf("%#v", check) 113 } 114 } 115 116 {{end -}}{{- /* range */ -}} 117 {{- end -}}{{- /* outer if join table */ -}}