diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/timeExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/timeExpressions.scala index 8b4fa13fe2766..5f542e7a75331 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/timeExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/timeExpressions.scala @@ -246,7 +246,8 @@ case class HoursOfTime(child: Expression) Seq(child.dataType) ) - override def inputTypes: Seq[AbstractDataType] = Seq(TimeType()) + override def inputTypes: Seq[AbstractDataType] = + Seq(TypeCollection(TimeType.MIN_PRECISION to TimeType.MAX_PRECISION map TimeType: _*)) override def children: Seq[Expression] = Seq(child) diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/TimeExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/TimeExpressionsSuite.scala index e0aebb46cccec..ef324b71f219f 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/TimeExpressionsSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/TimeExpressionsSuite.scala @@ -73,6 +73,18 @@ class TimeExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper { assert(builtExprForTime.isInstanceOf[HoursOfTime]) assert(builtExprForTime.asInstanceOf[HoursOfTime].child eq timeExpr) + assert(builtExprForTime.checkInputDataTypes().isSuccess) + + // test TIME-typed child should build HoursOfTime for all allowed custom precision values + (TimeType.MIN_PRECISION to TimeType.MICROS_PRECISION).foreach { precision => + val timeExpr = Literal(localTime(12, 58, 59), TimeType(precision)) + val builtExpr = HourExpressionBuilder.build("hour", Seq(timeExpr)) + + assert(builtExpr.isInstanceOf[HoursOfTime]) + assert(builtExpr.asInstanceOf[HoursOfTime].child eq timeExpr) + assert(builtExpr.checkInputDataTypes().isSuccess) + } + // test non TIME-typed child should build hour val tsExpr = Literal("2007-09-03 10:45:23") val builtExprForTs = HourExpressionBuilder.build("hour", Seq(tsExpr))