Skip to content

Commit d8c88f9

Browse files
authored
fix parsing dt64 from csv in cli (#6580)
1 parent 88dc77f commit d8c88f9

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

ydb/public/lib/ydb_cli/common/csv_parser.cpp

+24-6
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,33 @@ class TCsvToYdbConverter {
133133
case EPrimitiveType::Interval:
134134
Builder.Interval(GetArithmetic<i64>(token));
135135
break;
136-
case EPrimitiveType::Date32:
137-
Builder.Date32(GetArithmetic<i32>(token));
136+
case EPrimitiveType::Date32: {
137+
TInstant date;
138+
if (TInstant::TryParseIso8601(token, date)) {
139+
Builder.Date32(date.Days());
140+
} else {
141+
Builder.Date32(GetArithmetic<i32>(token));
142+
}
138143
break;
139-
case EPrimitiveType::Datetime64:
140-
Builder.Datetime64(GetArithmetic<i64>(token));
144+
}
145+
case EPrimitiveType::Datetime64: {
146+
TInstant date;
147+
if (TInstant::TryParseIso8601(token, date)) {
148+
Builder.Datetime64(date.Seconds());
149+
} else {
150+
Builder.Datetime64(GetArithmetic<i64>(token));
151+
}
141152
break;
142-
case EPrimitiveType::Timestamp64:
143-
Builder.Timestamp64(GetArithmetic<i64>(token));
153+
}
154+
case EPrimitiveType::Timestamp64: {
155+
TInstant date;
156+
if (TInstant::TryParseIso8601(token, date)) {
157+
Builder.Timestamp64(date.MicroSeconds());
158+
} else {
159+
Builder.Timestamp64(GetArithmetic<i64>(token));
160+
}
144161
break;
162+
}
145163
case EPrimitiveType::Interval64:
146164
Builder.Interval64(GetArithmetic<i64>(token));
147165
break;

0 commit comments

Comments
 (0)