Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-1478

SqlDatetimeSubtractionOperator unparse error

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Not A Problem
    • 1.11.0
    • 1.11.0
    • core
    • None

    Description

      The expression date '1998-12-01' - interval '108' day(3) parse to SqlNode its operator is SqlMonotonicBinaryOperator, when convert it to RelNode, its operator is SqlDatetimeSubtractionOperator. When I use RelToSqlConverter to convert the RelNode to SqlNode, its operator is also SqlDatetimeSubtractionOperator. Now, sqlNode.toSqlString(sqlDialect).getSql() has a IndexOutOfBoundsException. The source code as follows:

       final SqlWriter.Frame frame = writer.startList("(", ")");
          call.operand(0).unparse(writer, leftPrec, rightPrec);
          writer.sep("-");
          call.operand(1).unparse(writer, leftPrec, rightPrec);
          writer.endList(frame);
          call.operand(2).unparse(writer, leftPrec, rightPrec);
      

      SqlDatetimeSubtractionOperator must have three operands, now it only has two operands.

      The following code convert SqlMonotonicBinaryOperator to SqlDatetimeSubtractionOperator,

      registerOp(SqlStdOperatorTable.MINUS,
              new SqlRexConvertlet() {
                public RexNode convertCall(SqlRexContext cx, SqlCall call) {
                  final RexCall e =
                      (RexCall) StandardConvertletTable.this.convertCall(cx, call,
                          call.getOperator());
                  switch (e.getOperands().get(0).getType().getSqlTypeName()) {
                  case DATE:
                  case TIME:
                  case TIMESTAMP:
                      return convertDatetimeMinus(cx, SqlStdOperatorTable.MINUS_DATE, call);
                  default:
                    return e;
                  }
                }
              });
      

      For date '1998-12-01' - interval '108' day(3), this converter is OK? It only has two operands.

      Attachments

        Activity

          People

            julianhyde Julian Hyde
            dongming Dongming Liu
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: