mirror of
https://github.com/ent/ent.git
synced 2026-05-22 09:31:45 +03:00
73 lines
2.0 KiB
Cheetah
73 lines
2.0 KiB
Cheetah
{{/*
|
|
Copyright 2019-present Facebook Inc. All rights reserved.
|
|
This source code is licensed under the Apache 2.0 license found
|
|
in the LICENSE file in the root directory of this source tree.
|
|
*/}}
|
|
|
|
{{/* gotype: entgo.io/ent/entc/gen.Graph */}}
|
|
|
|
{{ define "dialect/sql/order/signature" -}}
|
|
// OrderFunc applies an ordering on the sql selector.
|
|
type OrderFunc func(*sql.Selector)
|
|
|
|
// columnChecker returns a function indicates if the column exists in the given column.
|
|
func columnChecker(table string) func(string) error {
|
|
checks := map[string]func(string) bool{
|
|
{{- range $n := $.Nodes }}
|
|
{{ $n.Package }}.Table: {{ $n.Package }}.ValidColumn,
|
|
{{- end }}
|
|
}
|
|
check, ok := checks[table]
|
|
if !ok {
|
|
return func(string) error {
|
|
return fmt.Errorf("unknown table %q", table)
|
|
}
|
|
}
|
|
return func(column string) error {
|
|
if !check(column) {
|
|
return fmt.Errorf("unknown column %q for table %q", column, table)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/order/func" -}}
|
|
{{- $f := $.Scope.Func -}}
|
|
func(s *sql.Selector) {
|
|
check := columnChecker(s.TableName())
|
|
for _, f := range fields {
|
|
if err := check(f); err != nil {
|
|
s.AddError(&ValidationError{Name: f, err: fmt.Errorf("{{ base $.Config.Package }}: %w", err)})
|
|
}
|
|
s.OrderBy(sql.{{ $f }}(s.C(f)))
|
|
}
|
|
}
|
|
{{- end }}
|
|
|
|
{{/* custom signature for group-by function */}}
|
|
{{ define "dialect/sql/group/signature" -}}
|
|
type AggregateFunc func(*sql.Selector) string
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/group/as" -}}
|
|
func(s *sql.Selector) string {
|
|
return sql.As(fn(s), end)
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/group/func" -}}
|
|
{{- $fn := $.Scope.Func -}}
|
|
{{- $withField := $.Scope.WithField -}}
|
|
func(s *sql.Selector) string {
|
|
{{- if $withField }}
|
|
check := columnChecker(s.TableName())
|
|
if err := check(field); err != nil {
|
|
s.AddError(&ValidationError{Name: field, err: fmt.Errorf("{{ base $.Config.Package }}: %w", err)})
|
|
return ""
|
|
}
|
|
{{- end }}
|
|
return sql.{{ if eq $fn "Mean" }}Avg{{ else }}{{ $fn }}{{ end }}({{ if $withField }}s.C(field){{ else }}"*"{{ end }})
|
|
}
|
|
{{- end }}
|