wuchong commented on a change in pull request #15133: URL: https://github.com/apache/flink/pull/15133#discussion_r592071263
########## File path: flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala ########## @@ -224,28 +224,32 @@ object ScalarOperatorGens { } // minus arithmetic of time points (i.e. for TIMESTAMPDIFF) - case (TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE, - TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE) if !plus => + case ( + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE) if !plus => resultType.getTypeRoot match { case INTERVAL_YEAR_MONTH => generateOperatorIfNotNull(ctx, resultType, left, right) { (ll, rr) => (left.resultType.getTypeRoot, right.resultType.getTypeRoot) match { - case (TIMESTAMP_WITHOUT_TIME_ZONE, DATE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, DATE) => val leftTerm = s"$ll.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($leftTerm, $rr * ${MILLIS_PER_DAY}L)" - case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => val rightTerm = s"$rr.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($ll * ${MILLIS_PER_DAY}L, $rightTerm)" - case (TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => val leftTerm = s"$ll.getMillisecond()" val rightTerm = s"$rr.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}($leftTerm, $rightTerm)" - case (TIMESTAMP_WITHOUT_TIME_ZONE, _) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, _) => Review comment: It seems this will never happen. ########## File path: flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala ########## @@ -224,28 +224,32 @@ object ScalarOperatorGens { } // minus arithmetic of time points (i.e. for TIMESTAMPDIFF) - case (TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE, - TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE) if !plus => + case ( + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE) if !plus => resultType.getTypeRoot match { case INTERVAL_YEAR_MONTH => generateOperatorIfNotNull(ctx, resultType, left, right) { (ll, rr) => (left.resultType.getTypeRoot, right.resultType.getTypeRoot) match { - case (TIMESTAMP_WITHOUT_TIME_ZONE, DATE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, DATE) => val leftTerm = s"$ll.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($leftTerm, $rr * ${MILLIS_PER_DAY}L)" - case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => val rightTerm = s"$rr.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($ll * ${MILLIS_PER_DAY}L, $rightTerm)" - case (TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => val leftTerm = s"$ll.getMillisecond()" val rightTerm = s"$rr.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}($leftTerm, $rightTerm)" - case (TIMESTAMP_WITHOUT_TIME_ZONE, _) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, _) => val leftTerm = s"$ll.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}($leftTerm, $rr)" - case (_, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (_, TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => Review comment: ditto. ########## File path: flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala ########## @@ -224,28 +224,32 @@ object ScalarOperatorGens { } // minus arithmetic of time points (i.e. for TIMESTAMPDIFF) - case (TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE, - TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE) if !plus => + case ( + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE) if !plus => resultType.getTypeRoot match { case INTERVAL_YEAR_MONTH => generateOperatorIfNotNull(ctx, resultType, left, right) { (ll, rr) => (left.resultType.getTypeRoot, right.resultType.getTypeRoot) match { - case (TIMESTAMP_WITHOUT_TIME_ZONE, DATE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, DATE) => val leftTerm = s"$ll.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($leftTerm, $rr * ${MILLIS_PER_DAY}L)" - case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => Review comment: Add tests for this? ########## File path: flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala ########## @@ -256,16 +260,17 @@ object ScalarOperatorGens { case INTERVAL_DAY_TIME => generateOperatorIfNotNull(ctx, resultType, left, right) { (ll, rr) => (left.resultType.getTypeRoot, right.resultType.getTypeRoot) match { - case (TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => val leftTerm = s"$ll.getMillisecond()" val rightTerm = s"$rr.getMillisecond()" s"$leftTerm $op $rightTerm" case (DATE, DATE) => s"($ll * ${MILLIS_PER_DAY}L) $op ($rr * ${MILLIS_PER_DAY}L)" - case (TIMESTAMP_WITHOUT_TIME_ZONE, DATE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, DATE) => val leftTerm = s"$ll.getMillisecond()" s"$leftTerm $op ($rr * ${MILLIS_PER_DAY}L)" - case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => Review comment: Add tests for this? ########## File path: flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala ########## @@ -224,28 +224,32 @@ object ScalarOperatorGens { } // minus arithmetic of time points (i.e. for TIMESTAMPDIFF) - case (TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE, - TIMESTAMP_WITHOUT_TIME_ZONE | TIME_WITHOUT_TIME_ZONE | DATE) if !plus => + case ( + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE | + TIME_WITHOUT_TIME_ZONE | DATE) if !plus => resultType.getTypeRoot match { case INTERVAL_YEAR_MONTH => generateOperatorIfNotNull(ctx, resultType, left, right) { (ll, rr) => (left.resultType.getTypeRoot, right.resultType.getTypeRoot) match { - case (TIMESTAMP_WITHOUT_TIME_ZONE, DATE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, DATE) => val leftTerm = s"$ll.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($leftTerm, $rr * ${MILLIS_PER_DAY}L)" - case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (DATE, TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => val rightTerm = s"$rr.getMillisecond()" s"${qualifyMethod(BuiltInMethods.SUBTRACT_MONTHS)}" + s"($ll * ${MILLIS_PER_DAY}L, $rightTerm)" - case (TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITHOUT_TIME_ZONE) => + case (TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE, + TIMESTAMP_WITHOUT_TIME_ZONE | TIMESTAMP_WITH_LOCAL_TIME_ZONE) => Review comment: Don't we need to consider time zone offset when comparing `TIMESTAMP` and `TIMESTAMP_LTZ`? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org