aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/yql/ExpressionOperator.java
blob: cc6f48fffa2c3c9de9b769984b2288117be8263b (plain) (blame)
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
73
74
75
76
77
78
79
80
81
82
83
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.yql;

import com.google.common.base.Predicate;

/**
 * Operators on expressions.
 */
enum ExpressionOperator implements Operator {

    AND(TypeCheckers.EXPRS),
    OR(TypeCheckers.EXPRS),
    EQ(ExpressionOperator.class, ExpressionOperator.class),
    NEQ(ExpressionOperator.class, ExpressionOperator.class),
    LT(ExpressionOperator.class, ExpressionOperator.class),
    GT(ExpressionOperator.class, ExpressionOperator.class),
    LTEQ(ExpressionOperator.class, ExpressionOperator.class),
    GTEQ(ExpressionOperator.class, ExpressionOperator.class),

    IN(ExpressionOperator.class, ExpressionOperator.class),
    IN_QUERY(ExpressionOperator.class, SequenceOperator.class),
    NOT_IN(ExpressionOperator.class, ExpressionOperator.class),
    NOT_IN_QUERY(ExpressionOperator.class, SequenceOperator.class),

    LIKE(ExpressionOperator.class, ExpressionOperator.class),
    NOT_LIKE(ExpressionOperator.class, ExpressionOperator.class),

    IS_NULL(ExpressionOperator.class),
    IS_NOT_NULL(ExpressionOperator.class),
    MATCHES(ExpressionOperator.class, ExpressionOperator.class),
    NOT_MATCHES(ExpressionOperator.class, ExpressionOperator.class),
    CONTAINS(ExpressionOperator.class, ExpressionOperator.class),

    ADD(ExpressionOperator.class, ExpressionOperator.class),
    SUB(ExpressionOperator.class, ExpressionOperator.class),
    MULT(ExpressionOperator.class, ExpressionOperator.class),
    DIV(ExpressionOperator.class, ExpressionOperator.class),
    MOD(ExpressionOperator.class, ExpressionOperator.class),

    NEGATE(ExpressionOperator.class),
    NOT(ExpressionOperator.class),

    MAP(TypeCheckers.LIST_OF_STRING, TypeCheckers.EXPRS),

    ARRAY(TypeCheckers.EXPRS),

    INDEX(ExpressionOperator.class, ExpressionOperator.class),
    PROPREF(ExpressionOperator.class, String.class),

    CALL(TypeCheckers.LIST_OF_STRING, TypeCheckers.EXPRS),

    VARREF(String.class),

    LITERAL(TypeCheckers.LITERAL_TYPES),

    READ_RECORD(String.class),
    READ_FIELD(String.class, String.class),

    VESPA_GROUPING(String.class),

    NULL();

    private final ArgumentsTypeChecker checker;


    ExpressionOperator(Object... types) {
        checker = TypeCheckers.make(this, types);
    }


    @Override
    public void checkArguments(Object... args) {
        checker.check(args);
    }

    public static Predicate<OperatorNode<? extends Operator>> IS = new Predicate<OperatorNode<? extends Operator>>() {
        @Override
        public boolean apply(OperatorNode<? extends Operator> input) {
            return input.getOperator() instanceof ExpressionOperator;
        }
    };

}