{{/* 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 }}