{{/*
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" -}}
	{{- $f := $.Scope.Func -}}
	func(s *sql.Selector) {
		for _, f := range fields {
			s.OrderBy(sql.{{ $f }}(f))
		}
	}
{{- end }}

{{/* custom signature for group-by function */}}
{{ define "dialect/sql/group/signature" -}}
	// SQL the column wrapped with the aggregation function.
	SQL     func(*sql.Selector) string
{{- end }}

{{ define "dialect/sql/group/as" -}}
	func(s *sql.Selector) string {
			return sql.As(fn.SQL(s), end)
	}
{{- end }}

{{ define "dialect/sql/group/func" -}}
	{{- $fn := $.Scope.Func }}
	{{- $withField := $.Scope.WithField }}
	func(s *sql.Selector) string {
		return sql.{{ if eq $fn "Mean" }}Avg{{ else }}{{ $fn }}{{ end }}({{ if $withField }}s.C(field){{ else }}"*"{{ end }})
	}
{{- end }}