Skip to content

Commit 5267ad5

Browse files
authored
Merge pull request #7529 from TCeason/ISSUE-7528/auto_extend_ts
feat(query): auto extend datetime time part
2 parents 40d9483 + 9b5945c commit 5267ad5

File tree

4 files changed

+71
-13
lines changed

4 files changed

+71
-13
lines changed

src/common/io/src/buffer/buffer_read_datetime_ext.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,27 @@ where R: BufferRead
9797
loop {
9898
buf.clear();
9999
let size = self.keep_read(&mut buf, |f| (b'0'..=b'9').contains(&f))?;
100-
match get_time(&mut buf, size) {
101-
Ok(time) => times.push(time),
102-
Err(e) => return Err(e),
103-
}
104-
if times.len() == 3 {
100+
if size == 0 {
105101
break;
102+
} else {
103+
let time = get_time(&mut buf, size)?;
104+
times.push(time);
105+
if times.len() == 3 {
106+
break;
107+
}
108+
self.ignore_byte(b':')?;
106109
}
107-
self.must_ignore_byte(b':')?;
108110
}
111+
// Time part is HH:MM or HH or empty
112+
// Examples: '2022-02-02T', '2022-02-02 ', '2022-02-02T02', '2022-02-02T3:', '2022-02-03T03:13', '2022-02-03T03:13:'
113+
if times.len() < 3 {
114+
times.resize(3, 0);
115+
dt = tz
116+
.from_local_datetime(&d.and_hms(times[0], times[1], times[2]))
117+
.unwrap();
118+
return less_1000(dt);
119+
}
120+
109121
dt = tz
110122
.from_local_datetime(&d.and_hms(times[0], times[1], times[2]))
111123
.unwrap();

src/common/io/tests/it/buffer/buffer_read_datetime_ext.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ use common_io::prelude::*;
1919
#[test]
2020
fn test_read_datetime_ext() -> Result<()> {
2121
let mut reader = BufferReader::new(
22-
"2023-03-03,2022-02-02,2009-01-01 3:2:1.123,2009-01-01 0:00:00,2009-01-01 00:00:00.123,2009-01-01 00:00:00.123456,0002-03-03T00:01:02,2022-03-04T00:01:02+08:00,2022-03-04T00:01:02-08:00,0000-00-00,0000-00-00 00:00:00,0001-01-01 00:00:00,2020-01-01T11:11:11Z,2009-01-03 00:00:00,2020-01-01T11:11:11.123Z,2055-02-03 10:00:20.234+08:00,2055-02-03 10:00:20.234-08:00,1022-05-16T03:25:02.000000+08:00".as_bytes(),
22+
"2022-02-02T,2022-02-02 12,2022-02-02T13:4:,2022-02-02 12:03,2023-03-03,2022-02-02,2009-01-01 3:2:1.123,2009-01-01 0:00:00,2009-01-01 00:00:00.123,2009-01-01 00:00:00.123456,0002-03-03T00:01:02,2022-03-04T00:01:02+08:00,2022-03-04T00:01:02-08:00,0000-00-00,0000-00-00 00:00:00,0001-01-01 00:00:00,2020-01-01T11:11:11Z,2009-01-03 00:00:00,2020-01-01T11:11:11.123Z,2055-02-03 10:00:20.234+08:00,2055-02-03 10:00:20.234-08:00,1022-05-16T03:25:02.000000+08:00".as_bytes(),
2323
);
2424
let tz = Tz::UTC;
2525
let expected = vec![
26+
"2022-02-02T00:00:00UTC",
27+
"2022-02-02T12:00:00UTC",
28+
"2022-02-02T13:04:00UTC",
29+
"2022-02-02T12:03:00UTC",
2630
"2023-03-03T00:00:00UTC",
2731
"2022-02-02T00:00:00UTC",
2832
"2009-01-01T03:02:01.123UTC",

tests/logictest/suites/base/02_function/02_0012_function_datetimes

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,54 @@ select to_datetime('9999-12-31 23:59:59');
9595
----
9696
9999-12-31 23:59:59.000000
9797

98+
statement query T
99+
select to_datetime('9999-12-31 ');
100+
101+
----
102+
9999-12-31 00:00:00.000000
103+
104+
statement query T
105+
select to_datetime('9999-12-31T');
106+
107+
----
108+
9999-12-31 00:00:00.000000
109+
110+
statement query T
111+
select to_datetime('9999-12-31 23');
112+
113+
----
114+
9999-12-31 23:00:00.000000
115+
116+
statement query T
117+
select to_datetime('9999-12-31 23:');
118+
119+
----
120+
9999-12-31 23:00:00.000000
121+
122+
statement query T
123+
select to_datetime('9999-12-31 23:59');
124+
125+
----
126+
9999-12-31 23:59:00.000000
127+
128+
statement query T
129+
select to_datetime('9999-12-31 23:59:');
130+
131+
----
132+
9999-12-31 23:59:00.000000
133+
134+
statement error 1010
135+
select to_datetime('9999-01-01 00x');
136+
137+
statement error 1010
138+
select to_datetime('9999-01-01 001');
139+
140+
statement error 1010
141+
select to_datetime('9999-01-01 01:123');
142+
143+
statement error 1010
144+
select to_datetime('9999-01-01 01:12.123+02:00');
145+
98146
statement error 1010
99147
select to_datetime('10000-01-01 00:00:00');
100148

tests/logictest/suites/base/11_data_type/11_0001_data_type_date_time

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,6 @@ select * from t order by id;
269269
2 2022-02-03 11:00:00.000000
270270
3 2022-02-03 11:02:01.123456
271271

272-
statement error 1010
273-
insert into t values(1, '2022-02-03T');
274-
275-
statement error 1010
276-
insert into t values(1, '2022-02-03 ');
277-
278272
statement error 1010
279273
insert into t values(1, '2022-02-03 003:02:02');
280274

0 commit comments

Comments
 (0)