Skip to content

Commit 171a5fd

Browse files
authored
fix: support uppercase when parsing Interval (#8478)
* fix: interval uppercase unit * feat: add test * chore: fmt * chore: remove redundant test
1 parent 1861c3d commit 171a5fd

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

datafusion/sql/src/expr/value.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
343343

344344
// TODO make interval parsing better in arrow-rs / expose `IntervalType`
345345
fn has_units(val: &str) -> bool {
346+
let val = val.to_lowercase();
346347
val.ends_with("century")
347348
|| val.ends_with("centuries")
348349
|| val.ends_with("decade")

datafusion/sqllogictest/test_files/interval.slt

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,86 @@ select interval '5' nanoseconds
126126
----
127127
0 years 0 mons 0 days 0 hours 0 mins 0.000000005 secs
128128

129+
query ?
130+
select interval '5 YEAR'
131+
----
132+
0 years 60 mons 0 days 0 hours 0 mins 0.000000000 secs
133+
134+
query ?
135+
select interval '5 MONTH'
136+
----
137+
0 years 5 mons 0 days 0 hours 0 mins 0.000000000 secs
138+
139+
query ?
140+
select interval '5 WEEK'
141+
----
142+
0 years 0 mons 35 days 0 hours 0 mins 0.000000000 secs
143+
144+
query ?
145+
select interval '5 DAY'
146+
----
147+
0 years 0 mons 5 days 0 hours 0 mins 0.000000000 secs
148+
149+
query ?
150+
select interval '5 HOUR'
151+
----
152+
0 years 0 mons 0 days 5 hours 0 mins 0.000000000 secs
153+
154+
query ?
155+
select interval '5 HOURS'
156+
----
157+
0 years 0 mons 0 days 5 hours 0 mins 0.000000000 secs
158+
159+
query ?
160+
select interval '5 MINUTE'
161+
----
162+
0 years 0 mons 0 days 0 hours 5 mins 0.000000000 secs
163+
164+
query ?
165+
select interval '5 SECOND'
166+
----
167+
0 years 0 mons 0 days 0 hours 0 mins 5.000000000 secs
168+
169+
query ?
170+
select interval '5 SECONDS'
171+
----
172+
0 years 0 mons 0 days 0 hours 0 mins 5.000000000 secs
173+
174+
query ?
175+
select interval '5 MILLISECOND'
176+
----
177+
0 years 0 mons 0 days 0 hours 0 mins 0.005000000 secs
178+
179+
query ?
180+
select interval '5 MILLISECONDS'
181+
----
182+
0 years 0 mons 0 days 0 hours 0 mins 0.005000000 secs
183+
184+
query ?
185+
select interval '5 MICROSECOND'
186+
----
187+
0 years 0 mons 0 days 0 hours 0 mins 0.000005000 secs
188+
189+
query ?
190+
select interval '5 MICROSECONDS'
191+
----
192+
0 years 0 mons 0 days 0 hours 0 mins 0.000005000 secs
193+
194+
query ?
195+
select interval '5 NANOSECOND'
196+
----
197+
0 years 0 mons 0 days 0 hours 0 mins 0.000000005 secs
198+
199+
query ?
200+
select interval '5 NANOSECONDS'
201+
----
202+
0 years 0 mons 0 days 0 hours 0 mins 0.000000005 secs
203+
204+
query ?
205+
select interval '5 YEAR 5 MONTH 5 DAY 5 HOUR 5 MINUTE 5 SECOND 5 MILLISECOND 5 MICROSECOND 5 NANOSECOND'
206+
----
207+
0 years 65 mons 5 days 5 hours 5 mins 5.005005005 secs
208+
129209
# Interval with string literal addition
130210
query ?
131211
select interval '1 month' + '1 month'

0 commit comments

Comments
 (0)