{{/* 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. // Deprecated: Use Asc/Desc functions or the package builders instead. type OrderFunc func(*sql.Selector) var ( initCheck sync.Once columnCheck sql.ColumnCheck ) // columnChecker checks if the column exists in the given table. func checkColumn(table, column string) error { initCheck.Do(func() { columnCheck = sql.NewColumnCheck(map[string]func(string) bool{ {{- range $n := $.Nodes }} {{ $n.Package }}.Table: {{ $n.Package }}.ValidColumn, {{- end }} }) }) return columnCheck(table, column) } {{- end }} {{ define "dialect/sql/order/func" -}} {{- $f := $.Scope.Func -}} func(s *sql.Selector) { for _, f := range fields { if err := checkColumn(s.TableName(), 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 }} if err := checkColumn(s.TableName(), 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 }}