/*
* Copyright 2015, The Querydsl Team (http://www.querydsl.com/team)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.querydsl.core.types;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
/**
* {@code Ops} provides the operators for the fluent query grammar.
*
* @author tiwe
*/
public enum Ops implements Operator {
// general
EQ(Boolean.class),
NE(Boolean.class),
IS_NULL(Boolean.class),
IS_NOT_NULL(Boolean.class),
INSTANCE_OF(Boolean.class),
NUMCAST(Number.class),
STRING_CAST(String.class),
ALIAS(Object.class),
LIST(Object.class),
SET(Object.class),
SINGLETON(Object.class),
ORDINAL(Integer.class),
WRAPPED(Object.class),
ORDER(Object.class),
// collection
IN(Boolean.class), // cmp. contains
NOT_IN(Boolean.class),
COL_IS_EMPTY(Boolean.class),
COL_SIZE(Integer.class),
// array
ARRAY_SIZE(Number.class),
// map
CONTAINS_KEY(Boolean.class),
CONTAINS_VALUE(Boolean.class),
MAP_SIZE(Integer.class),
MAP_IS_EMPTY(Boolean.class),
// Boolean
AND(Boolean.class),
NOT(Boolean.class),
OR(Boolean.class),
XNOR(Boolean.class),
XOR(Boolean.class),
// Comparable
BETWEEN(Boolean.class),
GOE(Boolean.class),
GT(Boolean.class),
LOE(Boolean.class),
LT(Boolean.class),
// Number
NEGATE(Number.class),
ADD(Number.class),
DIV(Number.class),
MULT(Number.class),
SUB(Number.class),
MOD(Number.class),
// String
CHAR_AT(Character.class),
CONCAT(String.class),
LOWER(String.class),
SUBSTR_1ARG(String.class),
SUBSTR_2ARGS(String.class),
TRIM(String.class),
UPPER(String.class),
MATCHES(Boolean.class),
MATCHES_IC(Boolean.class),
STRING_LENGTH(Integer.class),
STRING_IS_EMPTY(Boolean.class),
STARTS_WITH(Boolean.class),
STARTS_WITH_IC(Boolean.class),
INDEX_OF_2ARGS(Integer.class),
INDEX_OF(Integer.class),
EQ_IGNORE_CASE(Boolean.class),
ENDS_WITH(Boolean.class),
ENDS_WITH_IC(Boolean.class),
STRING_CONTAINS(Boolean.class),
STRING_CONTAINS_IC(Boolean.class),
LIKE(Boolean.class),
LIKE_IC(Boolean.class),
LIKE_ESCAPE(Boolean.class),
LIKE_ESCAPE_IC(Boolean.class),
// case
CASE(Object.class),
CASE_WHEN(Object.class),
CASE_ELSE(Object.class),
// case for eq
CASE_EQ(Object.class),
CASE_EQ_WHEN(Object.class),
CASE_EQ_ELSE(Object.class),
// coalesce
COALESCE(Object.class),
NULLIF(Object.class),
// subquery operations
EXISTS(Boolean.class);
private final Class<?> type;
private Ops(Class<?> type) {
this.type = type;
}
@Override
public Class<?> getType() {
return type;
}
public static final Set<Operator> equalsOps = ImmutableSet.<Operator>of(EQ);
public static final Set<Operator> notEqualsOps = ImmutableSet.<Operator>of(NE);
public static final Set<Operator> compareOps = ImmutableSet.<Operator>of(EQ, NE, LT, GT, GOE, LOE);
public static final Set<Operator> aggOps = ImmutableSet.<Operator>of(
Ops.AggOps.AVG_AGG,
Ops.AggOps.COUNT_AGG,
Ops.AggOps.COUNT_DISTINCT_AGG,
Ops.AggOps.MAX_AGG,
Ops.AggOps.MIN_AGG,
Ops.AggOps.SUM_AGG);
/**
* Aggregation operators
*/
public enum AggOps implements Operator {
BOOLEAN_ALL(Boolean.class),
BOOLEAN_ANY(Boolean.class),
MAX_AGG(Comparable.class),
MIN_AGG(Comparable.class),
AVG_AGG(Number.class),
SUM_AGG(Number.class),
COUNT_AGG(Number.class),
COUNT_DISTINCT_AGG(Number.class),
COUNT_DISTINCT_ALL_AGG(Number.class),
COUNT_ALL_AGG(Number.class);
private final Class<?> type;
private AggOps(Class<?> type) {
this.type = type;
}
@Override
public Class<?> getType() {
return type;
}
}
/**
* Quantification operators
*/
public enum QuantOps implements Operator {
AVG_IN_COL(Number.class),
MAX_IN_COL(Comparable.class),
MIN_IN_COL(Comparable.class),
ANY(Object.class),
ALL(Object.class);
private final Class<?> type;
private QuantOps(Class<?> type) {
this.type = type;
}
@Override
public Class<?> getType() {
return type;
}
}
/**
* Date and time operators
*/
public enum DateTimeOps implements Operator {
DATE(Comparable.class),
CURRENT_DATE(Comparable.class),
CURRENT_TIME(Comparable.class),
CURRENT_TIMESTAMP(Comparable.class),
ADD_YEARS(Comparable.class),
ADD_MONTHS(Comparable.class),
ADD_WEEKS(Comparable.class),
ADD_DAYS(Comparable.class),
ADD_HOURS(Comparable.class),
ADD_MINUTES(Comparable.class),
ADD_SECONDS(Comparable.class),
DIFF_YEARS(Comparable.class),
DIFF_MONTHS(Comparable.class),
DIFF_WEEKS(Comparable.class),
DIFF_DAYS(Comparable.class),
DIFF_HOURS(Comparable.class),
DIFF_MINUTES(Comparable.class),
DIFF_SECONDS(Comparable.class),
TRUNC_YEAR(Comparable.class),
TRUNC_MONTH(Comparable.class),
TRUNC_WEEK(Comparable.class),
TRUNC_DAY(Comparable.class),
TRUNC_HOUR(Comparable.class),
TRUNC_MINUTE(Comparable.class),
TRUNC_SECOND(Comparable.class),
HOUR(Integer.class),
MINUTE(Integer.class),
MONTH(Integer.class),
SECOND(Integer.class),
MILLISECOND(Integer.class),
SYSDATE(Comparable.class),
YEAR(Integer.class),
WEEK(Integer.class),
YEAR_MONTH(Integer.class),
YEAR_WEEK(Integer.class),
DAY_OF_WEEK(Integer.class),
DAY_OF_MONTH(Integer.class),
DAY_OF_YEAR(Integer.class);
private final Class<?> type;
private DateTimeOps(Class<?> type) {
this.type = type;
}
@Override
public Class<?> getType() {
return type;
}
}
/**
* Math operators
*
*/
public enum MathOps implements Operator {
ABS(Number.class),
ACOS(Number.class),
ASIN(Number.class),
ATAN(Number.class),
CEIL(Number.class),
COS(Number.class),
TAN(Number.class),
SQRT(Number.class),
SIN(Number.class),
ROUND(Number.class),
ROUND2(Number.class),
RANDOM(Number.class),
RANDOM2(Number.class),
POWER(Number.class),
MIN(Number.class),
MAX(Number.class),
LOG(Number.class),
FLOOR(Number.class),
EXP(Number.class),
COSH(Number.class),
COT(Number.class),
COTH(Number.class),
DEG(Number.class),
LN(Number.class),
RAD(Number.class),
SIGN(Number.class),
SINH(Number.class),
TANH(Number.class);
private final Class<?> type;
private MathOps(Class<?> type) {
this.type = type;
}
@Override
public Class<?> getType() {
return type;
}
}
/**
* String operators
*/
public enum StringOps implements Operator {
LEFT(String.class),
RIGHT(String.class),
LTRIM(String.class),
RTRIM(String.class),
LPAD(String.class),
RPAD(String.class),
LPAD2(String.class),
RPAD2(String.class),
LOCATE(Number.class),
LOCATE2(Number.class);
private final Class<?> type;
private StringOps(Class<?> type) {
this.type = type;
}
@Override
public Class<?> getType() {
return type;
}
}
}