Ngone51 commented on a change in pull request #26472: [SPARK-29838][SQL] 
PostgreSQL dialect: cast to timestamp
URL: https://github.com/apache/spark/pull/26472#discussion_r347095852
 
 

 ##########
 File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/postgreSQL/PostgreCastBase.scala
 ##########
 @@ -68,16 +91,47 @@ case class PostgreCastToBoolean(child: Expression, 
timeZoneId: Option[String])
             throw new IllegalArgumentException("invalid input syntax for type 
boolean: $c");
           }
         """
-
     case IntegerType =>
       super.castToBooleanCode(from)
   }
+}
 
-  override def dataType: DataType = BooleanType
+case class PostgreCastToTimestamp(child: Expression, timeZoneId: 
Option[String])
+  extends PostgreCastBase(TimestampType) {
 
-  override def nullable: Boolean = child.nullable
+  override def fromTypes: TypeCollection = TypeCollection(StringType, 
DateType, NullType)
 
-  override def toString: String = s"PostgreCastToBoolean($child as 
${dataType.simpleString})"
+  override def withTimeZone(timeZoneId: String): TimeZoneAwareExpression =
+    copy(timeZoneId = Option(timeZoneId))
 
-  override def sql: String = s"CAST(${child.sql} AS ${dataType.sql})"
+  override def castToTimestamp(from: DataType): Any => Any = from match {
+    case StringType =>
+      buildCast[UTF8String](_, utfs => DateTimeUtils.stringToTimestamp(utfs, 
zoneId)
 
 Review comment:
   I believe that postgre could correctly parse string `19700101`, 
`1970/01/01`, `January 1 04:05:06 1970 PST` while spark can't. So, I think that 
we may also need to support it in `PostgreCastToTimestamp`.

----------------------------------------------------------------
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:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to