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

{{/* constants needed for sql dialects. */}}
{{ define "dialect/sql/meta/constants" }}
	// Table holds the table name of the {{ lower $.Name }} in the database.
	Table = "{{ $.Table }}"
	{{- range $_, $e := $.Edges }}
		// {{ $e.TableConstant }} is the table the holds the {{ $e.Name }} relation/edge.
		{{- if $e.M2M }} The primary key declared below.{{ end }}
		{{ $e.TableConstant }} = "{{ $e.Rel.Table }}"
		{{- if eq $.Table $e.Type.Table | not }}
			// {{ $e.InverseTableConstant }} is the table name for the {{ $e.Type.Name }} entity.
			// It exists in this package in order to avoid circular dependency with the "{{ $e.Type.Package }}" package.
			{{ $e.InverseTableConstant }} = "{{ $e.Type.Table }}"
		{{- end }}
		{{- if not $e.M2M }}
			// {{ $e.ColumnConstant }} is the table column denoting the {{ $e.Name }} relation/edge.
			{{ $e.ColumnConstant }} = "{{ $e.Rel.Column }}"
		{{- end }}
	{{- end }}
{{ end }}

{{/* variables needed for sql dialects. */}}
{{ define "dialect/sql/meta/variables" }}
	// Columns holds all SQL columns are {{ lower $.Name }} fields.
	var Columns = []string{
		{{ $.ID.Constant }},
		{{- range $_, $f := $.Fields }}
			{{ $f.Constant }},
		{{- end }}
	}

	{{ with $.NumM2M }}
		var (
			{{- range $_, $e := $.Edges }}
				{{- if $e.M2M }}
					// {{ $e.PKConstant }} and {{ $e.ColumnConstant }}2 are the table columns denoting the
					// primary key for the {{ $e.Name }} relation (M2M).
					{{ $e.PKConstant }} = []string{"{{ index $e.Rel.Columns 0 }}", "{{ index $e.Rel.Columns 1 }}"}
				{{- end }}
			{{- end }}
		)
	{{ end }}
{{ end }}