@@ -21,7 +21,7 @@ package org.apache.comet.serde
2121
2222import java .util .Locale
2323
24- import org .apache .spark .sql .catalyst .expressions .{Attribute , DateAdd , DateDiff , DateFormatClass , DateFromUnixDate , DateSub , DayOfMonth , DayOfWeek , DayOfYear , Days , FromUTCTimestamp , GetDateField , Hour , Hours , LastDay , Literal , MakeDate , Minute , Month , NextDay , Quarter , Second , SecondsToTimestamp , ToUTCTimestamp , TruncDate , TruncTimestamp , UnixDate , UnixTimestamp , WeekDay , WeekOfYear , Year }
24+ import org .apache .spark .sql .catalyst .expressions .{Attribute , ConvertTimezone , DateAdd , DateDiff , DateFormatClass , DateFromUnixDate , DateSub , DayOfMonth , DayOfWeek , DayOfYear , Days , FromUTCTimestamp , GetDateField , Hour , Hours , LastDay , Literal , MakeDate , Minute , Month , NextDay , Quarter , Second , SecondsToTimestamp , ToUTCTimestamp , TruncDate , TruncTimestamp , UnixDate , UnixTimestamp , WeekDay , WeekOfYear , Year }
2525import org .apache .spark .sql .internal .SQLConf
2626import org .apache .spark .sql .types .{DateType , DoubleType , FloatType , IntegerType , LongType , StringType , TimestampNTZType , TimestampType }
2727import org .apache .spark .unsafe .types .UTF8String
@@ -409,6 +409,27 @@ object CometToUTCTimestamp extends CometExpressionSerde[ToUTCTimestamp] {
409409 }
410410}
411411
412+ object CometConvertTimezone extends CometExpressionSerde [ConvertTimezone ] {
413+
414+ override def getSupportLevel (expr : ConvertTimezone ): SupportLevel =
415+ Incompatible (Some (UTCTimestampSerde .tzParseIncompatReason))
416+
417+ override def getIncompatibleReasons (): Seq [String ] =
418+ Seq (UTCTimestampSerde .tzParseIncompatReason)
419+
420+ override def convert (
421+ expr : ConvertTimezone ,
422+ inputs : Seq [Attribute ],
423+ binding : Boolean ): Option [ExprOuterClass .Expr ] = {
424+ val srcTz = exprToProtoInternal(expr.sourceTz, inputs, binding)
425+ val tgtTz = exprToProtoInternal(expr.targetTz, inputs, binding)
426+ val ts = exprToProtoInternal(expr.sourceTs, inputs, binding)
427+ val toUtc = scalarFunctionExprToProto(" to_utc_timestamp" , ts, srcTz)
428+ val fromUtc = scalarFunctionExprToProto(" from_utc_timestamp" , toUtc, tgtTz)
429+ optExprWithInfo(fromUtc, expr, expr.children: _* )
430+ }
431+ }
432+
412433object CometNextDay extends CometScalarFunction [NextDay ](" next_day" )
413434
414435object CometMakeDate extends CometScalarFunction [MakeDate ](" make_date" )
0 commit comments