uros-db commented on code in PR #56288:
URL: https://github.com/apache/spark/pull/56288#discussion_r3346962242
##########
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Cast.scala:
##########
@@ -1772,6 +1809,62 @@ case class Cast(
code"$evPrim = $dateTimeUtilsCls.convertTz($c,
java.time.ZoneOffset.UTC, $zid);"
}
+ private[this] def castToTimestampLTZNanosCode(
+ from: DataType,
+ precision: Int,
+ ctx: CodegenContext): CastFunction = from match {
+ case _: StringType =>
+ val zoneIdClass = classOf[ZoneId]
+ val zid = JavaCode.global(
+ ctx.addReferenceObj("zoneId", zoneId, zoneIdClass.getName),
+ zoneIdClass)
+ val tsOpt = ctx.freshVariable("tsOpt",
classOf[Option[TimestampNanosVal]])
+ (c, evPrim, evNull) =>
+ if (ansiEnabled) {
+ val errorContext = getContextOrNullCode(ctx)
+ code"""
+ $evPrim = $dateTimeUtilsCls.stringToTimestampLTZNanosAnsi(
+ $c, $precision, $zid, $errorContext);
+ """
+ } else {
+ code"""
+ scala.Option<TimestampNanosVal> $tsOpt =
+ $dateTimeUtilsCls.stringToTimestampLTZNanos($c, $precision,
$zid);
+ if ($tsOpt.isDefined()) {
+ $evPrim = (TimestampNanosVal) $tsOpt.get();
+ } else {
+ $evNull = true;
+ }
+ """
+ }
+ }
+
+ private[this] def castToTimestampNTZNanosCode(
+ from: DataType,
+ precision: Int,
+ ctx: CodegenContext): CastFunction = from match {
+ case _: StringType =>
+ val tsOpt = ctx.freshVariable("tsOpt",
classOf[Option[TimestampNanosVal]])
+ (c, evPrim, evNull) =>
+ if (ansiEnabled) {
+ val errorContext = getContextOrNullCode(ctx)
+ code"""
+ $evPrim = $dateTimeUtilsCls.stringToTimestampNTZNanosAnsi(
+ $c, $precision, $errorContext);
+ """
+ } else {
+ code"""
+ scala.Option<TimestampNanosVal> $tsOpt =
+ $dateTimeUtilsCls.stringToTimestampNTZNanos($c, $precision,
true);
Review Comment:
Nit: Interpreted vs. codegen NTZ call inconsistency: the interpreted path
uses the 2-arg stringToTimestampNTZNanos(utfs, precision).orNull while codegen
uses the explicit 3-arg stringToTimestampNTZNanos($c, $precision, true). Both
are equivalent (default allowTimeZone = true), but matching them (either both
explicit or both default) reads better and signals intent.
--
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.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]