entc/gen: add fields checks for orderfuncs

This commit is contained in:
Ariel Mashraki
2020-09-10 22:12:57 +03:00
committed by Ariel Mashraki
parent 9743213860
commit 6a7a5ef439
20 changed files with 217 additions and 79 deletions

View File

@@ -4,11 +4,20 @@ This source code is licensed under the Apache 2.0 license found
in the LICENSE file in the root directory of this source tree.
*/}}
{{ define "dialect/sql/order" -}}
{{ define "dialect/sql/order/signature" -}}
// OrderFunc applies an ordering on the sql selector.
type OrderFunc func(*sql.Selector, func(string) bool)
{{- end }}
{{ define "dialect/sql/order/func" -}}
{{- $f := $.Scope.Func -}}
func(s *sql.Selector) {
func(s *sql.Selector, check func(string) bool) {
for _, f := range fields {
s.OrderBy(sql.{{ $f }}(f))
if check(f) {
s.OrderBy(sql.{{ $f }}(f))
} else {
s.AddError(&ValidationError{Name: f, err: fmt.Errorf("invalid field %q for ordering", f)})
}
}
}
{{- end }}

View File

@@ -118,7 +118,7 @@ func ({{ $receiver }} *{{ $builder }}) querySpec() *sqlgraph.QuerySpec {
if ps := {{ $receiver }}.order; len(ps) > 0 {
_spec.Order = func(selector *sql.Selector) {
for i := range ps {
ps[i](selector)
ps[i](selector, {{ $.Package }}.ValidColumn)
}
}
}
@@ -137,7 +137,7 @@ func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
p(selector)
}
for _, p := range {{ $receiver }}.order {
p(selector)
p(selector, {{ $.Package }}.ValidColumn)
}
if offset := {{ $receiver }}.offset; offset != nil {
// limit is mandatory for offset clause. We start
@@ -157,8 +157,12 @@ func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
{{- $e := $.Scope.Edge }} {{/* the edge we need to genegrate the path to. */}}
{{- $ident := $.Scope.Ident -}}
{{- $receiver := $.Scope.Receiver }}
selector := {{ $receiver }}.sqlQuery()
if err := selector.Err(); err != nil {
return nil, err
}
step := sqlgraph.NewStep(
sqlgraph.From({{ $n.Package }}.Table, {{ $n.Package }}.{{ $n.ID.Constant }}, {{ $receiver }}.sqlQuery()),
sqlgraph.From({{ $n.Package }}.Table, {{ $n.Package }}.{{ $n.ID.Constant }}, selector),
sqlgraph.To({{ $e.Type.Package }}.Table, {{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}),
sqlgraph.Edge(sqlgraph.{{ $e.Rel.Type }}, {{ $e.IsInverse }}, {{ $n.Package }}.{{ $e.TableConstant }},
{{- if $e.M2M -}}