mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
Reviewed By: alexsn Differential Revision: D18729648 fbshipit-source-id: 23eb95bdb0c34c811621a819be6581e1e6fcb474
130 lines
3.4 KiB
Cheetah
130 lines
3.4 KiB
Cheetah
{{/*
|
|
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/predicate/id" -}}
|
|
func(s *sql.Selector) {
|
|
{{- if $.ID.IsString }}id, _ := strconv.Atoi(id){{- end }}
|
|
s.Where(sql.EQ(s.C({{ $.ID.Constant }}), id))
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/id/ops" -}}
|
|
{{- $op := $.Scope.Op -}}
|
|
{{- $arg := $.Scope.Arg -}}
|
|
{{- $storage := $.Scope.Storage -}}
|
|
func(s *sql.Selector) {
|
|
{{- if $op.Variadic }}
|
|
// if not arguments were provided, append the FALSE constants,
|
|
// since we can't apply "IN ()". This will make this predicate falsy.
|
|
if len({{ $arg }}) == 0 {
|
|
s.Where(sql.False())
|
|
return
|
|
}
|
|
v := make([]interface{}, len({{ $arg }}))
|
|
for i := range v {
|
|
{{ if $.ID.IsString }}v[i], _ = strconv.Atoi({{ $arg }}[i]){{ else }}v[i] = {{ $arg }}[i]{{ end }}
|
|
}
|
|
{{- else if $.ID.IsString }}
|
|
id, _ := strconv.Atoi({{ $arg }})
|
|
{{- end }}
|
|
s.Where(sql.{{ call $storage.OpCode $op }}(s.C({{ $.ID.Constant }}), {{ if $op.Variadic }}v...{{ else }}id{{ end }}))
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/field" -}}
|
|
{{- $f := $.Scope.Field -}}
|
|
func(s *sql.Selector) {
|
|
s.Where(sql.EQ(s.C({{ $f.Constant }}), v))
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/field/ops" -}}
|
|
{{- $f := $.Scope.Field -}}
|
|
{{- $op := $.Scope.Op -}}
|
|
{{- $arg := $.Scope.Arg -}}
|
|
{{- $storage := $.Scope.Storage -}}
|
|
func(s *sql.Selector) {
|
|
{{- if $op.Variadic }}
|
|
// if not arguments were provided, append the FALSE constants,
|
|
// since we can't apply "IN ()". This will make this predicate falsy.
|
|
if len({{ $arg }}) == 0 {
|
|
s.Where(sql.False())
|
|
return
|
|
}
|
|
{{- end }}
|
|
s.Where(sql.{{ call $storage.OpCode $op }}(s.C({{ $f.Constant }}){{ if not $op.Niladic }}, v{{ if $op.Variadic }}...{{ end }}{{ end }}))
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/edge/has" -}}
|
|
{{- $e := $.Scope.Edge -}}
|
|
func(s *sql.Selector) {
|
|
step := sql.NewStep(
|
|
sql.From(Table, {{ $.ID.Constant }}),
|
|
sql.To({{ $e.TableConstant }}, {{ $.ID.Constant }}),
|
|
sql.Edge(sql.{{ $e.Rel.Type }}, {{ $e.IsInverse }}, {{ $e.TableConstant }},
|
|
{{- if $e.M2M -}}
|
|
{{ $e.PKConstant }}...
|
|
{{- else -}}
|
|
{{ $e.ColumnConstant }}
|
|
{{- end -}}
|
|
),
|
|
)
|
|
sql.HasNeighbors(s, step)
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/edge/haswith" -}}
|
|
{{- $e := $.Scope.Edge -}}
|
|
func(s *sql.Selector) {
|
|
step := sql.NewStep(
|
|
sql.From(Table, {{ $.ID.Constant }}),
|
|
sql.To({{ if ne $.Table $e.Type.Table }}{{ $e.InverseTableConstant }}{{ else }}Table{{ end }}, {{ $.ID.Constant }}),
|
|
sql.Edge(sql.{{ $e.Rel.Type }}, {{ $e.IsInverse }}, {{ $e.TableConstant }},
|
|
{{- if $e.M2M -}}
|
|
{{ $e.PKConstant }}...
|
|
{{- else -}}
|
|
{{ $e.ColumnConstant }}
|
|
{{- end -}}
|
|
),
|
|
)
|
|
sql.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
|
for _, p := range preds {
|
|
p(s)
|
|
}
|
|
})
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/and" -}}
|
|
func(s *sql.Selector) {
|
|
s1 := s.Clone().SetP(nil)
|
|
for _, p := range predicates {
|
|
p(s1)
|
|
}
|
|
s.Where(s1.P())
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/or" -}}
|
|
func(s *sql.Selector) {
|
|
s1 := s.Clone().SetP(nil)
|
|
for i, p := range predicates {
|
|
if i > 0 {
|
|
s1.Or()
|
|
}
|
|
p(s1)
|
|
}
|
|
s.Where(s1.P())
|
|
}
|
|
{{- end }}
|
|
|
|
{{ define "dialect/sql/predicate/not" -}}
|
|
func(s *sql.Selector) {
|
|
p(s.Not())
|
|
}
|
|
{{- end }}
|