Mihai Budiu created CALCITE-7451:
------------------------------------

             Summary: REINTERPRET should not be used in logical plans
                 Key: CALCITE-7451
                 URL: https://issues.apache.org/jira/browse/CALCITE-7451
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.41.0
            Reporter: Mihai Budiu


This one may not be easy to fix.

Calcite has a version of a cast named REINTERPRET.

Here is the documentation from SqlStdOperatorTable:
{code:java}
  /**
   * An <code>REINTERPRET</code> operator is internal to the planner. When the
   * physical storage of two types is the same, this operator may be used to
   * reinterpret values of one type as the other. This operator is similar to
   * a cast, except that it does not alter the data value. Like a regular cast
   * it accepts one operand and stores the target type as the return type. It
   * performs an overflow check if it has <i>any</i> second operand, whether
   * true or not.
   */
  public static final SqlSpecialOperator REINTERPRET =
      new SqlSpecialOperator("Reinterpret", SqlKind.REINTERPRET) {
        @Override public SqlOperandCountRange getOperandCountRange() {
          return SqlOperandCountRanges.between(1, 2);
        }
      };{code}
As the documentation says, this should only be used when the physical size is 
known. However, in logical plans the physical size is not known.

This cast is introduced by RexBuilder in the conversion from Sql to Rel, via 
the SqlRexConvertletTable. That is very early in the compilation process, in a 
layer which should know nothing about physical sizes.

I have seen this cast used mostly for converting intervals to integers; this 
assumes that the cast knows the representation of intervals. But this layer has 
no business assuming a representation for the intervals, that's for much later 
in the compilation process. Intervals could be represented, for example, as 
DECIMAL values, or perhaps as a long number of nanoseconds.

This code seems to be there since 2012.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to