Skip to content

Commit 2d1604e

Browse files
authored
Merge pull request ClickHouse#78919 from Avogar/csv-date-time-better-exception
Fix parsing of bad DateTime values in CSV format
2 parents 3dc10b8 + 1bd3dee commit 2d1604e

File tree

4 files changed

+24
-1
lines changed

4 files changed

+24
-1
lines changed

src/DataTypes/Serializations/SerializationDateTime.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
namespace DB
1414
{
1515

16+
namespace ErrorCodes
17+
{
18+
extern const int UNEXPECTED_DATA_AFTER_PARSED_VALUE;
19+
}
20+
1621
namespace
1722
{
1823

@@ -253,7 +258,11 @@ void SerializationDateTime::deserializeTextCSV(IColumn & column, ReadBuffer & is
253258
ReadBufferFromString buf(datetime_str);
254259
readText(x, buf, settings, time_zone, utc_time_zone);
255260
if (!buf.eof())
256-
throwUnexpectedDataAfterParsedValue(column, istr, settings, "DateTime");
261+
throw Exception(
262+
ErrorCodes::UNEXPECTED_DATA_AFTER_PARSED_VALUE,
263+
"Unexpected data '{}' after parsed DateTime value '{}'",
264+
String(buf.position(), buf.buffer().end()),
265+
String(buf.buffer().begin(), buf.position()));
257266
}
258267
}
259268

src/DataTypes/Serializations/SerializationDateTime64.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
namespace DB
1414
{
1515

16+
namespace ErrorCodes
17+
{
18+
extern const int UNEXPECTED_DATA_AFTER_PARSED_VALUE;
19+
}
20+
1621
SerializationDateTime64::SerializationDateTime64(
1722
UInt32 scale_, const TimezoneMixin & time_zone_)
1823
: SerializationDecimalBase<DateTime64>(DecimalUtils::max_precision<DateTime64>, scale_)
@@ -243,6 +248,12 @@ void SerializationDateTime64::deserializeTextCSV(IColumn & column, ReadBuffer &
243248
readCSVString(datetime_str, istr, settings.csv);
244249
ReadBufferFromString buf(datetime_str);
245250
readText(x, scale, buf, settings, time_zone, utc_time_zone);
251+
if (!buf.eof())
252+
throw Exception(
253+
ErrorCodes::UNEXPECTED_DATA_AFTER_PARSED_VALUE,
254+
"Unexpected data '{}' after parsed DateTime64 value '{}'",
255+
String(buf.position(), buf.buffer().end()),
256+
String(buf.buffer().begin(), buf.position()));
246257
}
247258
}
248259

tests/queries/0_stateless/03407_csv_bad_date_time_parsing.reference

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
select * from format(CSV, 'd DateTime64(3)', '1744042005 797') settings date_time_input_format='best_effort'; -- {serverError UNEXPECTED_DATA_AFTER_PARSED_VALUE}
2+
select * from format(CSV, 'd DateTime', '1744042005 797') settings date_time_input_format='best_effort'; -- {serverError UNEXPECTED_DATA_AFTER_PARSED_VALUE}
3+

0 commit comments

Comments
 (0)