This is an automated email from the ASF dual-hosted git repository.

maxgekk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/master by this push:
     new ad9d9e7a0935 [SPARK-52460][SQL][FOLLOWUP] Fix names and test ranges of 
TIME values
ad9d9e7a0935 is described below

commit ad9d9e7a09352c305f4e2ac7caeab3a5eb06c970
Author: Max Gekk <max.g...@gmail.com>
AuthorDate: Tue Jun 24 09:06:09 2025 +0200

    [SPARK-52460][SQL][FOLLOWUP] Fix names and test ranges of TIME values
    
    ### What changes were proposed in this pull request?
    In the PR, I propose to rename TIME vars/vals from micros to nanos, and 
extend the test ranges in random generators by taking into account nanos 
precision of TIME values.
    
    ### Why are the changes needed?
    To improve code maintenance.
    
    ### Does this PR introduce _any_ user-facing change?
    No.
    
    ### How was this patch tested?
    By running the affected test suites:
    ```
    $ build/sbt "test:testOnly *DateTimeUtilsSuite"
    $ build/sbt "test:testOnly *CatalystTypeConvertersSuite"
    $ build/sbt "test:testOnly *CastWithAnsiOnSuite"
    $ build/sbt "test:testOnly *ParquetV1QuerySuite"
    ```
    
    ### Was this patch authored or co-authored using generative AI tooling?
    No.
    
    Closes #51248 from MaxGekk/time-nanos-followup.
    
    Authored-by: Max Gekk <max.g...@gmail.com>
    Signed-off-by: Max Gekk <max.g...@gmail.com>
---
 .../org/apache/spark/sql/catalyst/util/DateTimeUtils.scala   | 12 ++++++------
 .../scala/org/apache/spark/sql/RandomDataGenerator.scala     |  2 +-
 .../spark/sql/catalyst/CatalystTypeConvertersSuite.scala     |  5 +++--
 .../spark/sql/catalyst/expressions/LiteralGenerator.scala    |  7 ++++---
 .../apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala  |  4 ++--
 5 files changed, 16 insertions(+), 14 deletions(-)

diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
index afffb07da080..ef7e5c125999 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala
@@ -108,8 +108,8 @@ object DateTimeUtils extends SparkDateTimeUtils {
   /**
    * Returns the hour value of a given TIME (TimeType) value.
    */
-  def getHoursOfTime(micros: Long): Int = {
-    nanosToLocalTime(micros).getHour
+  def getHoursOfTime(nanos: Long): Int = {
+    nanosToLocalTime(nanos).getHour
   }
 
   /**
@@ -123,8 +123,8 @@ object DateTimeUtils extends SparkDateTimeUtils {
   /**
    * Returns the minute value of a given TIME (TimeType) value.
    */
-  def getMinutesOfTime(micros: Long): Int = {
-    nanosToLocalTime(micros).getMinute
+  def getMinutesOfTime(nanos: Long): Int = {
+    nanosToLocalTime(nanos).getMinute
   }
 
   /**
@@ -138,8 +138,8 @@ object DateTimeUtils extends SparkDateTimeUtils {
   /**
    * Returns the second value of a given TIME (TimeType) value.
    */
-  def getSecondsOfTime(micros: Long): Int = {
-    nanosToLocalTime(micros).getSecond
+  def getSecondsOfTime(nanos: Long): Int = {
+    nanosToLocalTime(nanos).getSecond
   }
   /**
    * Returns the seconds part and its fractional part with microseconds.
diff --git 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/RandomDataGenerator.scala 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/RandomDataGenerator.scala
index de916d13b1ba..655ff1e728dc 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/RandomDataGenerator.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/RandomDataGenerator.scala
@@ -292,7 +292,7 @@ object RandomDataGenerator {
         randomNumeric[LocalTime](
           rand,
           (rand: Random) => {
-            DateTimeUtils.nanosToLocalTime(rand.between(0, 24 * 60 * 60 * 1000 
* 1000L))
+            DateTimeUtils.nanosToLocalTime(rand.between(0, 24 * 60 * 60 * 1000 
* 1000L) * 1000L)
           },
           specialTimes.map(LocalTime.parse)
         )
diff --git 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystTypeConvertersSuite.scala
 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystTypeConvertersSuite.scala
index 00d8bd6633a9..44796e9fa381 100644
--- 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystTypeConvertersSuite.scala
+++ 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/CatalystTypeConvertersSuite.scala
@@ -449,8 +449,9 @@ class CatalystTypeConvertersSuite extends SparkFunSuite 
with SQLHelper {
       43200999999L,
       86399000000L,
       86399999999L).foreach { us =>
-      val localTime = DateTimeUtils.nanosToLocalTime(us)
-      assert(CatalystTypeConverters.createToScalaConverter(TimeType())(us) === 
localTime)
+      val nanos = us * 1000L
+      val localTime = DateTimeUtils.nanosToLocalTime(nanos)
+      assert(CatalystTypeConverters.createToScalaConverter(TimeType())(nanos) 
=== localTime)
     }
   }
 }
diff --git 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/LiteralGenerator.scala
 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/LiteralGenerator.scala
index bada54135653..49d6c73f506c 100644
--- 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/LiteralGenerator.scala
+++ 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/LiteralGenerator.scala
@@ -24,8 +24,9 @@ import java.util.concurrent.TimeUnit
 import org.scalacheck.{Arbitrary, Gen}
 import org.scalatest.Assertions._
 
-import 
org.apache.spark.sql.catalyst.util.DateTimeConstants.{MICROS_PER_MILLIS, 
MILLIS_PER_DAY}
+import 
org.apache.spark.sql.catalyst.util.DateTimeConstants.{MICROS_PER_MILLIS, 
MILLIS_PER_DAY, NANOS_PER_MICROS}
 import org.apache.spark.sql.catalyst.util.DateTimeUtils
+import org.apache.spark.sql.catalyst.util.DateTimeUtils.{localTimeToNanos, 
nanosToMicros}
 import org.apache.spark.sql.types._
 import org.apache.spark.unsafe.types.CalendarInterval
 
@@ -125,8 +126,8 @@ object LiteralGenerator {
 
   lazy val timeLiteralGen: Gen[Literal] = {
     // Valid range for TimeType is [00:00:00, 23:59:59.999999]
-    val minTime = DateTimeUtils.localTimeToNanos(LocalTime.MIN)
-    val maxTime = DateTimeUtils.localTimeToNanos(LocalTime.MAX)
+    val minTime = nanosToMicros(localTimeToNanos(LocalTime.MIN)) * 
NANOS_PER_MICROS
+    val maxTime = nanosToMicros(localTimeToNanos(LocalTime.MAX)) * 
NANOS_PER_MICROS
     for { t <- Gen.choose(minTime, maxTime) }
       yield Literal(t, TimeType())
   }
diff --git 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
index 5328d2de7ad9..80fc44c9097e 100644
--- 
a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
+++ 
b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/DateTimeUtilsSuite.scala
@@ -1118,9 +1118,9 @@ class DateTimeUtilsSuite extends SparkFunSuite with 
Matchers with SQLHelper {
     assert(nanosToLocalTime(24L * 60 * 60 * 1000 * 1000 * 1000 - 1) ===
       LocalTime.of(23, 59, 59, 999999999))
 
-    Seq(-1, 24L * 60 * 60 * 1000 * 1000 * 1000L).foreach { invalidMicros =>
+    Seq(-1, 24L * 60 * 60 * 1000 * 1000 * 1000L).foreach { invalidNanos =>
       val msg = intercept[DateTimeException] {
-        nanosToLocalTime(invalidMicros)
+        nanosToLocalTime(invalidNanos)
       }.getMessage
       assert(msg.contains("Invalid value"))
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to