Skip to content

Commit

Permalink
Fix create and update with unique constraints
Browse files Browse the repository at this point in the history
When creating or updating resource that did not match unique constraint
filters, check wrongly reported not-unique error when matching (and
valid) resource was found in the store.

This fix adds explicit check if resource to be stored does not match
constraint filters and skips the rest of the constraint checking
procedure.
  • Loading branch information
darh committed Oct 13, 2021
1 parent 1fa8482 commit 59ffe76
Show file tree
Hide file tree
Showing 42 changed files with 506 additions and 37 deletions.
22 changes: 19 additions & 3 deletions pkg/codegen/assets/store_rdbms.gen.go.tpl
Expand Up @@ -729,20 +729,36 @@ func (s *Store) check{{ export $.Types.Singular }}Constraints(ctx context.Contex
return nil
}


var checks = make([]func () error, 0)
{{- range $.Lookups }}
{{ if .UniqueConstraintCheck }}
{
checks = append(checks, func () error {
// Skip lookup by {{ .Suffix }} if {{ export $.Types.Singular }} does not match filters
{{- range $field, $value := .Filter }}
if res.{{ $field }} != {{ $value }} {
return nil
}
{{ end }}

ex, err := s.{{ toggleExport .Export "Lookup" $.Types.Singular "By" .Suffix }}(ctx{{ template "extraArgsCall" $ }}{{- range .RDBMSColumns }}, res.{{ .Field }} {{- end }})
if err == nil && ex != nil {{- range $.RDBMS.Columns.PrimaryKeyFields }} && ex.{{ .Field }} != res.{{ .Field }} {{ end }} {
return store.ErrNotUnique.Stack(1)
} else if !errors.IsNotFound(err) {
return err
}
}

return nil
})
{{ end }}
{{ end }}

for _, check := range checks {
if err := check(); err != nil {
return err
}
}


return nil
}

Expand Down
8 changes: 8 additions & 0 deletions store/rdbms/actionlog.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/apigw_filter.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/apigw_route.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/applications.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/attachments.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion store/rdbms/auth_clients.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 13 additions & 1 deletion store/rdbms/auth_confirmed_clients.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 25 additions & 5 deletions store/rdbms/auth_oa2tokens.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 13 additions & 1 deletion store/rdbms/auth_sessions.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/automation_sessions.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/automation_triggers.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion store/rdbms/automation_workflows.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/compose_attachments.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions store/rdbms/compose_charts.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion store/rdbms/compose_module_fields.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion store/rdbms/compose_modules.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 59ffe76

Please sign in to comment.