Class SqlCallBinding

java.lang.Object
org.apache.calcite.sql.SqlOperatorBinding
org.apache.calcite.sql.SqlCallBinding
Direct Known Subclasses:
SqlWithinGroupOperator.PercentileDiscCallBinding

public class SqlCallBinding extends SqlOperatorBinding
SqlCallBinding implements SqlOperatorBinding by analyzing to the operands of a SqlCall with a SqlValidator.
  • Constructor Details

    • SqlCallBinding

      public SqlCallBinding(SqlValidator validator, SqlValidatorScope scope, SqlCall call)
      Creates a call binding.
      Parameters:
      validator - Validator
      scope - Scope of call
      call - Call node
  • Method Details

    • getGroupCount

      public int getGroupCount()
      Description copied from class: SqlOperatorBinding
      If the operator call occurs in an aggregate query, returns the number of columns in the GROUP BY clause. For example, for "SELECT count(*) FROM emp GROUP BY deptno, gender", returns 2.

      Returns 0 if the query is implicitly "GROUP BY ()" because of an aggregate expression. For example, "SELECT sum(sal) FROM emp".

      Returns -1 if the query is not an aggregate query.

      Overrides:
      getGroupCount in class SqlOperatorBinding
    • getValidator

      public SqlValidator getValidator()
      Returns the validator.
    • getScope

      public SqlValidatorScope getScope()
      Returns the scope of the call.
    • getCall

      public SqlCall getCall()
      Returns the call node.
    • operands

      public List<SqlNode> operands()
      Returns the operands to a call permuted into the same order as the formal parameters of the function.
    • operand

      public SqlNode operand(int i)
      Returns a particular operand.
    • permutedCall

      public SqlCall permutedCall()
      Returns a call that is equivalent except that arguments have been permuted into the logical order. Any arguments whose default value is being used are null.
    • getOperandMonotonicity

      public SqlMonotonicity getOperandMonotonicity(int ordinal)
      Description copied from class: SqlOperatorBinding
      Gets the monotonicity of a bound operand.
      Overrides:
      getOperandMonotonicity in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      Returns:
      monotonicity of operand
    • getStringLiteralOperand

      public @Nullable String getStringLiteralOperand(int ordinal)
      Description copied from class: SqlOperatorBinding
      Gets the string value of a string literal operand.
      Overrides:
      getStringLiteralOperand in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      Returns:
      string value
    • getIntLiteralOperand

      public int getIntLiteralOperand(int ordinal)
      Description copied from class: SqlOperatorBinding
      Gets the integer value of a numeric literal operand.
      Overrides:
      getIntLiteralOperand in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      Returns:
      integer value
    • getOperandLiteralValue

      public <T> @Nullable T getOperandLiteralValue(int ordinal, Class<T> clazz)
      Description copied from class: SqlOperatorBinding
      Gets the value of a literal operand.

      Cases:

      • If the operand is not a literal, the value is null.
      • If the operand is a string literal, the value will be of type NlsString.
      • If the operand is a numeric literal, the value will be of type BigDecimal.
      • If the operand is an interval qualifier, the value will be of type SqlIntervalQualifier
      • Otherwise the type is undefined, and the value may be null.
      Overrides:
      getOperandLiteralValue in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      clazz - Desired valued type
      Returns:
      value of operand
    • isOperandNull

      public boolean isOperandNull(int ordinal, boolean allowCast)
      Description copied from class: SqlOperatorBinding
      Determines whether a bound operand is NULL.

      This is only relevant for SQL validation.

      Overrides:
      isOperandNull in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      allowCast - whether to regard CAST(constant) as a constant
      Returns:
      whether operand is null; false for everything except SQL validation
    • isOperandLiteral

      public boolean isOperandLiteral(int ordinal, boolean allowCast)
      Description copied from class: SqlOperatorBinding
      Determines whether an operand is a literal.
      Overrides:
      isOperandLiteral in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      allowCast - whether to regard CAST(literal) as a literal
      Returns:
      whether operand is literal
    • getOperandCount

      public int getOperandCount()
      Description copied from class: SqlOperatorBinding
      Returns the number of bound operands. Includes pre-operands and regular operands.
      Specified by:
      getOperandCount in class SqlOperatorBinding
    • getOperandType

      public RelDataType getOperandType(int ordinal)
      Description copied from class: SqlOperatorBinding
      Gets the type of a bound operand.
      Specified by:
      getOperandType in class SqlOperatorBinding
      Parameters:
      ordinal - zero-based ordinal of operand of interest
      Returns:
      bound operand type
    • getCursorOperand

      public @Nullable RelDataType getCursorOperand(int ordinal)
      Description copied from class: SqlOperatorBinding
      Returns the rowtype of the ordinalth operand, which is a cursor.

      This is only implemented for SqlCallBinding.

      Overrides:
      getCursorOperand in class SqlOperatorBinding
      Parameters:
      ordinal - Ordinal of the operand
      Returns:
      Rowtype of the query underlying the cursor
    • getColumnListParamInfo

      public @Nullable String getColumnListParamInfo(int ordinal, String paramName, List<String> columnList)
      Description copied from class: SqlOperatorBinding
      Retrieves information about a column list parameter.
      Overrides:
      getColumnListParamInfo in class SqlOperatorBinding
      Parameters:
      ordinal - ordinal position of the column list parameter
      paramName - name of the column list parameter
      columnList - returns a list of the column names that are referenced in the column list parameter
      Returns:
      the name of the parent cursor referenced by the column list parameter if it is a column list parameter; otherwise, null is returned
    • newError

      public CalciteException newError(org.apache.calcite.runtime.Resources.ExInst<SqlValidatorException> e)
      Description copied from class: SqlOperatorBinding
      Wraps a validation error with context appropriate to this operator call.
      Specified by:
      newError in class SqlOperatorBinding
      Parameters:
      e - Validation error, not null
      Returns:
      Error wrapped, if possible, with positional information
    • newValidationSignatureError

      public CalciteException newValidationSignatureError()
      Constructs a new validation signature error for the call.
      Returns:
      signature exception
    • newValidationError

      public CalciteException newValidationError(org.apache.calcite.runtime.Resources.ExInst<SqlValidatorException> ex)
      Constructs a new validation error for the call. (Do not use this to construct a validation error for other nodes such as an operands.)
      Parameters:
      ex - underlying exception
      Returns:
      wrapped exception
    • isTypeCoercionEnabled

      public boolean isTypeCoercionEnabled()
      Returns whether to allow implicit type coercion when validation. This is a short-cut method.