{{/* 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. */}} {{ 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, check func(string) bool) { for _, f := range fields { if check(f) { s.OrderBy(sql.{{ $f }}(f)) } else { s.AddError(&ValidationError{Name: f, err: fmt.Errorf("invalid field %q for ordering", f)}) } } } {{- end }} {{/* custom signature for group-by function */}} {{ define "dialect/sql/group/signature" -}} type AggregateFunc func(*sql.Selector, func(string) bool) string {{- end }} {{ define "dialect/sql/group/as" -}} func(s *sql.Selector, check func(string) bool) string { return sql.As(fn(s, check), end) } {{- end }} {{ define "dialect/sql/group/func" -}} {{- $fn := $.Scope.Func -}} {{- $withField := $.Scope.WithField -}} func(s *sql.Selector, {{ if $withField }}check{{ else }}_{{ end }} func(string) bool) string { {{- if $withField }} if !check(field) { s.AddError(&ValidationError{Name: field, err: fmt.Errorf("invalid field %q for grouping", field)}) return "" } {{- end }} return sql.{{ if eq $fn "Mean" }}Avg{{ else }}{{ $fn }}{{ end }}({{ if $withField }}s.C(field){{ else }}"*"{{ end }}) } {{- end }}