Package org.apache.calcite.sql.fun
Class SqlBetweenOperator
- java.lang.Object
-
- org.apache.calcite.sql.SqlOperator
-
- org.apache.calcite.sql.SqlSpecialOperator
-
- org.apache.calcite.sql.SqlInfixOperator
-
- org.apache.calcite.sql.fun.SqlBetweenOperator
-
public class SqlBetweenOperator extends SqlInfixOperator
Defines the BETWEEN operator.Syntax:
X [NOT] BETWEEN [ASYMMETRIC | SYMMETRIC] Y AND Z
If the asymmetric/symmeteric keywords are left out ASYMMETRIC is default.
This operator is always expanded (into something like
Y <= X AND X <= Z
) before being converted into Rex nodes.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
SqlBetweenOperator.AndFinder
Finds an AND operator in an expression.static class
SqlBetweenOperator.Flag
Defines the "SYMMETRIC" and "ASYMMETRIC" keywords.-
Nested classes/interfaces inherited from class org.apache.calcite.sql.SqlSpecialOperator
SqlSpecialOperator.ReduceResult, SqlSpecialOperator.TokenSequence
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String[]
BETWEEN_NAMES
SqlBetweenOperator.Flag
flag
private static SqlWriter.FrameType
FRAME_TYPE
static int
LOWER_OPERAND
Ordinal of the 'lower' operand.private boolean
negated
If true the call represents 'NOT BETWEEN'.private static java.lang.String[]
NOT_BETWEEN_NAMES
private static SqlOperandTypeChecker
OTC_CUSTOM
Custom operand-type checking strategy.static int
UPPER_OPERAND
Ordinal of the 'upper' operand.static int
VALUE_OPERAND
Ordinal of the 'value' operand.-
Fields inherited from class org.apache.calcite.sql.SqlOperator
kind, MDX_PRECEDENCE, NL
-
-
Constructor Summary
Constructors Constructor Description SqlBetweenOperator(SqlBetweenOperator.Flag flag, boolean negated)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.util.List<RelDataType>
collectOperandTypes(SqlValidator validator, SqlValidatorScope scope, SqlCall call)
java.lang.String
getName()
java.lang.String
getSignatureTemplate(int operandsCount)
Returns a template describing how the operator signature is to be built.RelDataType
inferReturnType(SqlOperatorBinding opBinding)
Infers the return type of an invocation of this operator; only called after the number and types of operands have already been validated.boolean
isNegated()
SqlSpecialOperator.ReduceResult
reduceExpr(int opOrdinal, SqlSpecialOperator.TokenSequence list)
Reduces a list of operators and arguments according to the rules of precedence and associativity.void
unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec)
Writes a SQL representation of a call to this operator to a writer, including parentheses if the operators on either side are of greater precedence.-
Methods inherited from class org.apache.calcite.sql.SqlInfixOperator
getSyntax
-
Methods inherited from class org.apache.calcite.sql.SqlOperator
acceptCall, acceptCall, adjustType, allowsFraming, argumentMustBeScalar, checkOperandCount, checkOperandTypes, constructArgNameList, constructArgTypeList, constructOperandList, createCall, createCall, createCall, createCall, deriveType, equals, getAllowedSignatures, getAllowedSignatures, getKind, getLeftPrec, getMonotonicity, getMonotonicity, getNameAsId, getOperandCountRange, getOperandTypeChecker, getOperandTypeInference, getReturnTypeInference, getRightPrec, hashCode, inferReturnType, isAggregator, isDeterministic, isDynamicFunction, isGroup, isGroupAuxiliary, isName, leftPrec, preValidateCall, requiresDecimalExpansion, requiresOrder, requiresOver, rewriteCall, rightPrec, toString, unparseListClause, unparseListClause, validateCall, validateOperands, validRexOperands
-
-
-
-
Field Detail
-
BETWEEN_NAMES
private static final java.lang.String[] BETWEEN_NAMES
-
NOT_BETWEEN_NAMES
private static final java.lang.String[] NOT_BETWEEN_NAMES
-
VALUE_OPERAND
public static final int VALUE_OPERAND
Ordinal of the 'value' operand.- See Also:
- Constant Field Values
-
LOWER_OPERAND
public static final int LOWER_OPERAND
Ordinal of the 'lower' operand.- See Also:
- Constant Field Values
-
UPPER_OPERAND
public static final int UPPER_OPERAND
Ordinal of the 'upper' operand.- See Also:
- Constant Field Values
-
OTC_CUSTOM
private static final SqlOperandTypeChecker OTC_CUSTOM
Custom operand-type checking strategy.
-
FRAME_TYPE
private static final SqlWriter.FrameType FRAME_TYPE
-
flag
public final SqlBetweenOperator.Flag flag
-
negated
private final boolean negated
If true the call represents 'NOT BETWEEN'.
-
-
Constructor Detail
-
SqlBetweenOperator
public SqlBetweenOperator(SqlBetweenOperator.Flag flag, boolean negated)
-
-
Method Detail
-
isNegated
public boolean isNegated()
-
collectOperandTypes
private java.util.List<RelDataType> collectOperandTypes(SqlValidator validator, SqlValidatorScope scope, SqlCall call)
-
inferReturnType
public RelDataType inferReturnType(SqlOperatorBinding opBinding)
Description copied from class:SqlOperator
Infers the return type of an invocation of this operator; only called after the number and types of operands have already been validated. Subclasses must either override this method or supply an instance ofSqlReturnTypeInference
to the constructor.- Overrides:
inferReturnType
in classSqlOperator
- Parameters:
opBinding
- description of invocation (not necessarily aSqlCall
)- Returns:
- inferred return type
-
getSignatureTemplate
public java.lang.String getSignatureTemplate(int operandsCount)
Description copied from class:SqlOperator
Returns a template describing how the operator signature is to be built. E.g for the binary + operator the template looks like "{1} {0} {2}" {0} is the operator, subsequent numbers are operands.- Overrides:
getSignatureTemplate
in classSqlOperator
- Parameters:
operandsCount
- is used with functions that can take a variable number of operands- Returns:
- signature template, or null to indicate that a default template will suffice
-
getName
public java.lang.String getName()
- Overrides:
getName
in classSqlOperator
-
unparse
public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec)
Description copied from class:SqlOperator
Writes a SQL representation of a call to this operator to a writer, including parentheses if the operators on either side are of greater precedence.The default implementation of this method delegates to
SqlSyntax.unparse(org.apache.calcite.sql.SqlWriter, org.apache.calcite.sql.SqlOperator, org.apache.calcite.sql.SqlCall, int, int)
.- Overrides:
unparse
in classSqlInfixOperator
-
reduceExpr
public SqlSpecialOperator.ReduceResult reduceExpr(int opOrdinal, SqlSpecialOperator.TokenSequence list)
Description copied from class:SqlSpecialOperator
Reduces a list of operators and arguments according to the rules of precedence and associativity. Returns the ordinal of the node which replaced the expression.The default implementation throws
UnsupportedOperationException
.- Overrides:
reduceExpr
in classSqlSpecialOperator
- Parameters:
opOrdinal
- indicating the ordinal of the current operator in the list on which a possible reduction can be madelist
- List of alternatingSqlParserUtil.ToTreeListItem
andSqlNode
- Returns:
- ordinal of the node which replaced the expression
-
-