@@ -96,35 +96,26 @@ func New{{.StoreName}}(db *sql.DB) *{{.StoreName}} {
96
96
return &{{.StoreName}}{kallax.NewStore(db)}
97
97
}
98
98
99
- {{if .HasRelationships }}
99
+ {{if .HasNonInverses }}
100
100
func (s *{{.StoreName}}) relationshipRecords(record *{{.Name}}) []kallax.RecordWithSchema {
101
- record.ClearVirtualColumns()
102
101
var records []kallax.RecordWithSchema
103
- {{range .Relationships}}
104
- {{- if .IsInverse -}}
105
- if {{if .IsPtr}}record.{{.Name}} != nil{{else}}!record.{{.Name}}.GetID().IsEmpty(){{end}} {
106
- record.AddVirtualColumn("{{.ForeignKey}}", record.{{.Name}}.GetID())
107
- records = append(records, kallax.RecordWithSchema{
108
- Schema.{{.TypeSchemaName}}.BaseSchema,
109
- {{if not .IsPtr}}&{{end}}record.{{.Name}},
110
- })
111
- }
112
- {{else if .IsOneToManyRelationship}}
102
+ {{range .NonInverses}}
103
+ {{if .IsOneToManyRelationship}}
113
104
for _, rec := range record.{{.Name}} {
114
105
rec.ClearVirtualColumns()
115
106
rec.AddVirtualColumn("{{.ForeignKey}}", record.GetID())
116
107
records = append(records, kallax.RecordWithSchema{
117
- Schema.{{.TypeSchemaName}}.BaseSchema,
118
- {{if not ($.IsPtrSlice .)}}&{{end}}rec,
108
+ Schema: Schema .{{.TypeSchemaName}}.BaseSchema,
109
+ Record: {{if not ($.IsPtrSlice .)}}&{{end}}rec,
119
110
})
120
111
}
121
112
{{else}}
122
113
if {{if .IsPtr}}record.{{.Name}} != nil{{else}}!record.{{.Name}}.GetID().IsEmpty(){{end}} {
123
114
record.{{.Name}}.ClearVirtualColumns()
124
115
record.{{.Name}}.AddVirtualColumn("{{.ForeignKey}}", record.GetID())
125
116
records = append(records, kallax.RecordWithSchema{
126
- Schema.{{.TypeSchemaName}}.BaseSchema,
127
- {{if not .IsPtr}}&{{end}}record.{{.Name}},
117
+ Schema: Schema .{{.TypeSchemaName}}.BaseSchema,
118
+ Record: {{if not .IsPtr}}&{{end}}record.{{.Name}},
128
119
})
129
120
}
130
121
{{end}}
@@ -133,6 +124,23 @@ func (s *{{.StoreName}}) relationshipRecords(record *{{.Name}}) []kallax.RecordW
133
124
}
134
125
{{end}}
135
126
127
+ {{if .HasInverses}}
128
+ func (s *{{.StoreName}}) inverseRecords(record *{{.Name}}) []kallax.RecordWithSchema {
129
+ record.ClearVirtualColumns()
130
+ var records []kallax.RecordWithSchema
131
+ {{range .Inverses}}
132
+ if {{if .IsPtr}}record.{{.Name}} != nil{{else}}!record.{{.Name}}.GetID().IsEmpty(){{end}} {
133
+ record.AddVirtualColumn("{{.ForeignKey}}", record.{{.Name}}.GetID())
134
+ records = append(records, kallax.RecordWithSchema{
135
+ Schema: Schema.{{.TypeSchemaName}}.BaseSchema,
136
+ Record: {{if not .IsPtr}}&{{end}}record.{{.Name}},
137
+ })
138
+ }
139
+ {{end}}
140
+ return records
141
+ }
142
+ {{end}}
143
+
136
144
// Insert inserts a {{.Name}} in the database. A non-persisted object is
137
145
// required for this operation.
138
146
func (s *{{.StoreName}}) Insert(record *{{.Name}}) error {
@@ -146,13 +154,34 @@ func (s *{{.StoreName}}) Insert(record *{{.Name}}) error {
146
154
}
147
155
{{end}}
148
156
{{if .HasRelationships}}
157
+ {{if .HasNonInverses}}
149
158
records := s.relationshipRecords(record)
150
- if len(records) > 0 {
159
+ {{end}}
160
+ {{if .HasInverses}}
161
+ inverseRecords := s.inverseRecords(record)
162
+ {{end}}
163
+ if {{if .HasNonInverses}}len(records) > 0{{end}} {{if and (.HasNonInverses) (.HasInverses)}}&&{{end}} {{if .HasInverses}}len(inverseRecords) > 0{{end}} {
151
164
return s.Store.Transaction(func(s *kallax.Store) error {
165
+ {{if .HasInverses}}
166
+ for _, r := range inverseRecords {
167
+ if err := kallax.ApplyBeforeEvents(r.Record); err != nil {
168
+ return err
169
+ }
170
+ persisted := r.Record.IsPersisted()
171
+
172
+ if _, err := s.Save(r.Schema, r.Record); err != nil {
173
+ return err
174
+ }
175
+
176
+ if err := kallax.ApplyAfterEvents(r.Record, persisted); err != nil {
177
+ return err
178
+ }
179
+ }
180
+ {{end}}
152
181
if err := s.Insert(Schema.{{.Name}}.BaseSchema, record); err != nil {
153
182
return err
154
183
}
155
-
184
+ {{if .HasNonInverses}}
156
185
for _, r := range records {
157
186
if err := kallax.ApplyBeforeEvents(r.Record); err != nil {
158
187
return err
@@ -167,6 +196,7 @@ func (s *{{.StoreName}}) Insert(record *{{.Name}}) error {
167
196
return err
168
197
}
169
198
}
199
+ {{end}}
170
200
171
201
{{if .Events.Has "AfterInsert"}}
172
202
if err := record.AfterInsert(); err != nil {
@@ -224,14 +254,37 @@ func (s *{{.StoreName}}) Update(record *{{.Name}}, cols ...kallax.SchemaField) (
224
254
}
225
255
{{end}}
226
256
{{if .HasRelationships}}
257
+ {{if .HasNonInverses}}
227
258
records := s.relationshipRecords(record)
228
- if len(records) > 0 {
259
+ {{end}}
260
+ {{if .HasInverses}}
261
+ inverseRecords := s.inverseRecords(record)
262
+ {{end}}
263
+ if {{if .HasNonInverses}}len(records) > 0{{end}} {{if and (.HasNonInverses) (.HasInverses)}}&&{{end}} {{if .HasInverses}}len(inverseRecords) > 0{{end}} {
229
264
err = s.Store.Transaction(func(s *kallax.Store) error {
265
+ {{if .HasInverses}}
266
+ for _, r := range inverseRecords {
267
+ if err := kallax.ApplyBeforeEvents(r.Record); err != nil {
268
+ return err
269
+ }
270
+ persisted := r.Record.IsPersisted()
271
+
272
+ if _, err := s.Save(r.Schema, r.Record); err != nil {
273
+ return err
274
+ }
275
+
276
+ if err := kallax.ApplyAfterEvents(r.Record, persisted); err != nil {
277
+ return err
278
+ }
279
+ }
280
+ {{end}}
281
+
230
282
updated, err = s.Update(Schema.{{.Name}}.BaseSchema, record, cols...)
231
283
if err != nil {
232
284
return err
233
285
}
234
286
287
+ {{if .HasNonInverses}}
235
288
for _, r := range records {
236
289
if err := kallax.ApplyBeforeEvents(r.Record); err != nil {
237
290
return err
@@ -246,6 +299,7 @@ func (s *{{.StoreName}}) Update(record *{{.Name}}, cols ...kallax.SchemaField) (
246
299
return err
247
300
}
248
301
}
302
+ {{end}}
249
303
250
304
{{if .Events.Has "AfterUpdate"}}
251
305
if err := record.AfterUpdate(); err != nil {
0 commit comments