mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
entc/gen: add fields checks for orderfuncs
This commit is contained in:
committed by
Ariel Mashraki
parent
9743213860
commit
6a7a5ef439
@@ -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 }}
|
||||
|
||||
@@ -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 -}}
|
||||
|
||||
Reference in New Issue
Block a user