File: predicate.go

package info (click to toggle)
golang-github-facebook-ent 0.5.4-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 14,284 kB
  • sloc: javascript: 349; makefile: 8
file content (72 lines) | stat: -rw-r--r-- 1,955 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// 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.

package gen

// Op is a predicate for the where clause.
type Op int

// List of all builtin predicates.
const (
	EQ           Op = iota // =
	NEQ                    // <>
	GT                     // >
	GTE                    // >=
	LT                     // <
	LTE                    // <=
	IsNil                  // IS NULL / has
	NotNil                 // IS NOT NULL / hasNot
	In                     // within
	NotIn                  // without
	EqualFold              // equals case-insensitive
	Contains               // containing
	ContainsFold           // containing case-insensitive
	HasPrefix              // startingWith
	HasSuffix              // endingWith
)

// Name returns the string representation of an predicate.
func (o Op) Name() string {
	if int(o) < len(opText) {
		return opText[o]
	}
	return "Unknown"
}

// Variadic reports if the predicate is a variadic function.
func (o Op) Variadic() bool {
	return o == In || o == NotIn
}

// Niladic reports if the predicate is a niladic predicate.
func (o Op) Niladic() bool {
	return o == IsNil || o == NotNil
}

var (
	// operations text.
	opText = [...]string{
		EQ:           "EQ",
		NEQ:          "NEQ",
		GT:           "GT",
		GTE:          "GTE",
		LT:           "LT",
		LTE:          "LTE",
		IsNil:        "IsNil",
		NotNil:       "NotNil",
		EqualFold:    "EqualFold",
		Contains:     "Contains",
		ContainsFold: "ContainsFold",
		HasPrefix:    "HasPrefix",
		HasSuffix:    "HasSuffix",
		In:           "In",
		NotIn:        "NotIn",
	}
	// operations per type.
	boolOps     = []Op{EQ, NEQ}
	enumOps     = append(boolOps, In, NotIn)
	numericOps  = append(enumOps, GT, GTE, LT, LTE)
	stringOps   = append(numericOps, Contains, HasPrefix, HasSuffix)
	nillableOps = []Op{IsNil, NotNil}
)