Skip to content

Commit 4321ade

Browse files
committed
[SPARK-52715][SQL] Pretty SQL string of TIME - DAY-TIME INTERVAL
### What changes were proposed in this pull request? In the PR, I propose to changes SQL representation of TIME and DAY-TIME INTERVAL subtraction via wrapping it by `DatetimeSub`. ### Why are the changes needed? To improve user experience with Spark SQL. Before the changes, subtraction looks like: ```sql TIME '12:30:00' + (- INTERVAL '12:29:59.000001' HOUR TO SECOND ``` , and after the changes `+-` is replaced by just `-`: ```sql TIME '12:30:00' - INTERVAL '12:29:59.000001' HOUR TO SECOND ``` ### Does this PR introduce _any_ user-facing change? No. The TIME data type hasn't been released yet. ### How was this patch tested? By running the affected tests: ``` $ build/sbt "sql/testOnly org.apache.spark.sql.SQLQueryTestSuite -- -z time.sql" ``` ### Was this patch authored or co-authored using generative AI tooling? No. Closes #51403 from MaxGekk/time-nice-subtract. Authored-by: Max Gekk <max.gekk@gmail.com> Signed-off-by: Max Gekk <max.gekk@gmail.com>
1 parent 308d3e8 commit 4321ade

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/BinaryArithmeticWithDatetimeResolver.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ object BinaryArithmeticWithDatetimeResolver {
123123
)
124124
)
125125
case (_: TimeType, _: DayTimeIntervalType) =>
126-
TimeAddInterval(l, UnaryMinus(r, mode == EvalMode.ANSI))
126+
DatetimeSub(l, r, TimeAddInterval(l, UnaryMinus(r, mode == EvalMode.ANSI)))
127127
case (_, CalendarIntervalType | _: DayTimeIntervalType) =>
128128
Cast(DatetimeSub(l, r,
129129
TimestampAddInterval(l, UnaryMinus(r, mode == EvalMode.ANSI))), l.dataType)

sql/core/src/test/resources/sql-tests/analyzer-results/time.sql.out

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -476,28 +476,28 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException
476476
-- !query
477477
SELECT TIME'12:30' - INTERVAL '12:29:59.000001' HOUR TO SECOND
478478
-- !query analysis
479-
Project [12:30:00 + -INTERVAL '12:29:59.000001' HOUR TO SECOND AS TIME '12:30:00' + (- INTERVAL '12:29:59.000001' HOUR TO SECOND)#x]
479+
Project [12:30:00 - INTERVAL '12:29:59.000001' HOUR TO SECOND AS TIME '12:30:00' - INTERVAL '12:29:59.000001' HOUR TO SECOND#x]
480480
+- OneRowRelation
481481

482482

483483
-- !query
484484
SELECT '23:59:59.999999' :: TIME - INTERVAL '23:59:59.999999' HOUR TO SECOND
485485
-- !query analysis
486-
Project [cast(23:59:59.999999 as time(6)) + -INTERVAL '23:59:59.999999' HOUR TO SECOND AS CAST(23:59:59.999999 AS TIME(6)) + (- INTERVAL '23:59:59.999999' HOUR TO SECOND)#x]
486+
Project [cast(23:59:59.999999 as time(6)) - INTERVAL '23:59:59.999999' HOUR TO SECOND AS CAST(23:59:59.999999 AS TIME(6)) - INTERVAL '23:59:59.999999' HOUR TO SECOND#x]
487487
+- OneRowRelation
488488

489489

490490
-- !query
491491
SELECT '00:00:00.0001' :: TIME(4) - INTERVAL '0 00:00:00.0001' DAY TO SECOND
492492
-- !query analysis
493-
Project [cast(00:00:00.0001 as time(4)) + -INTERVAL '0 00:00:00.0001' DAY TO SECOND AS CAST(00:00:00.0001 AS TIME(4)) + (- INTERVAL '0 00:00:00.0001' DAY TO SECOND)#x]
493+
Project [cast(00:00:00.0001 as time(4)) - INTERVAL '0 00:00:00.0001' DAY TO SECOND AS CAST(00:00:00.0001 AS TIME(4)) - INTERVAL '0 00:00:00.0001' DAY TO SECOND#x]
494494
+- OneRowRelation
495495

496496

497497
-- !query
498498
SELECT '08:30' :: TIME(0) - INTERVAL '6' HOUR
499499
-- !query analysis
500-
Project [cast(08:30 as time(0)) + -INTERVAL '06' HOUR AS CAST(08:30 AS TIME(0)) + (- INTERVAL '06' HOUR)#x]
500+
Project [cast(08:30 as time(0)) - INTERVAL '06' HOUR AS CAST(08:30 AS TIME(0)) - INTERVAL '06' HOUR#x]
501501
+- OneRowRelation
502502

503503

sql/core/src/test/resources/sql-tests/results/time.sql.out

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -583,31 +583,31 @@ org.apache.spark.sql.catalyst.ExtendedAnalysisException
583583
-- !query
584584
SELECT TIME'12:30' - INTERVAL '12:29:59.000001' HOUR TO SECOND
585585
-- !query schema
586-
struct<TIME '12:30:00' + (- INTERVAL '12:29:59.000001' HOUR TO SECOND):time(6)>
586+
struct<TIME '12:30:00' - INTERVAL '12:29:59.000001' HOUR TO SECOND:time(6)>
587587
-- !query output
588588
00:00:00.999999
589589

590590

591591
-- !query
592592
SELECT '23:59:59.999999' :: TIME - INTERVAL '23:59:59.999999' HOUR TO SECOND
593593
-- !query schema
594-
struct<CAST(23:59:59.999999 AS TIME(6)) + (- INTERVAL '23:59:59.999999' HOUR TO SECOND):time(6)>
594+
struct<CAST(23:59:59.999999 AS TIME(6)) - INTERVAL '23:59:59.999999' HOUR TO SECOND:time(6)>
595595
-- !query output
596596
00:00:00
597597

598598

599599
-- !query
600600
SELECT '00:00:00.0001' :: TIME(4) - INTERVAL '0 00:00:00.0001' DAY TO SECOND
601601
-- !query schema
602-
struct<CAST(00:00:00.0001 AS TIME(4)) + (- INTERVAL '0 00:00:00.0001' DAY TO SECOND):time(6)>
602+
struct<CAST(00:00:00.0001 AS TIME(4)) - INTERVAL '0 00:00:00.0001' DAY TO SECOND:time(6)>
603603
-- !query output
604604
00:00:00
605605

606606

607607
-- !query
608608
SELECT '08:30' :: TIME(0) - INTERVAL '6' HOUR
609609
-- !query schema
610-
struct<CAST(08:30 AS TIME(0)) + (- INTERVAL '06' HOUR):time(0)>
610+
struct<CAST(08:30 AS TIME(0)) - INTERVAL '06' HOUR:time(0)>
611611
-- !query output
612612
02:30:00
613613

0 commit comments

Comments
 (0)