Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Datetime type attempt to multiply with overflow from chrono #4874

Closed
BohuTANG opened this issue Apr 15, 2022 · 8 comments · Fixed by #5054
Closed

Datetime type attempt to multiply with overflow from chrono #4874

BohuTANG opened this issue Apr 15, 2022 · 8 comments · Fixed by #5054
Assignees
Labels
A-query Area: databend query C-bug Category: something isn't working
Milestone

Comments

@BohuTANG
Copy link
Member

Summary

create table t1(a datetime);
insert into t1 values('9999-12-31 23:59:59.999999');

ERROR 2013 (HY000): Lost connection to MySQL server during query

Server error log:

2022-04-15T08:14:41.711788Z ERROR common_tracing::panic_hook: panicked at 'attempt to multiply with overflow', /home/bohu/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/naive/datetime.rs:351:21 backtrace=   0: common_tracing::panic_hook::set_panic_hook::{{closure}}
             at common/tracing/src/panic_hook.rs:25:25
   1: std::panicking::rust_panic_with_hook
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/std/src/panicking.rs:702:17
   2: std::panicking::begin_panic_handler::{{closure}}
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/std/src/panicking.rs:586:13
   3: std::sys_common::backtrace::__rust_end_short_backtrace
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/std/src/sys_common/backtrace.rs:138:18
   4: rust_begin_unwind
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/std/src/panicking.rs:584:5
   5: core::panicking::panic_fmt
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/core/src/panicking.rs:143:14
   6: core::panicking::panic
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/core/src/panicking.rs:48:5
   7: chrono::naive::datetime::NaiveDateTime::timestamp_nanos
             at /home/bohu/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/naive/datetime.rs:351:21
   8: chrono::datetime::DateTime<Tz>::timestamp_nanos
             at /home/bohu/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/datetime.rs:164:9
   9: <common_datavalues::types::deserializations::date_time::DateTimeDeserializer<T> as common_datavalues::types::deserializations::TypeDeserializer>::de_text_quoted
             at common/datavalues/src/types/deserializations/date_time.rs:77:35
  10: databend_query::sql::statements::value_source::ValueSource::stream_read
             at query/src/sql/statements/value_source.rs:81:17
  11: databend_query::sql::statements::statement_insert::DfInsertStatement::analyze_insert_values::{{closure}}
             at query/src/sql/statements/statement_insert.rs:150:27
  12: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/core/src/future/mod.rs:91:19
  13: <databend_query::sql::statements::statement_insert::DfInsertStatement as databend_query::sql::statements::analyzer_statement::AnalyzableStatement>::analyze::{{closure}}::{{closure}}
             at query/src/sql/statements/statement_insert.rs:88:78
  14: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/core/src/future/mod.rs:91:19
  15: <databend_query::sql::statements::statement_insert::DfInsertStatement as databend_query::sql::statements::analyzer_statement::AnalyzableStatement>::analyze::{{closure}}
             at query/src/sql/statements/statement_insert.rs:76:5
  16: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/core/src/future/mod.rs:91:19
  17: <core::pin::Pin<P> as core::future::future::Future>::poll
             at /rustc/76d770ac21d9521db6a92a48c7b3d5b2cc535941/library/core/src/future/future.rs:124:9
  18: <databend_query::sql::sql_statement::DfStatement as databend_query::sql::statements::analyzer_statement::AnalyzableStatement>::analyze::{{closure}}
             at query/src/sql/statements/analyzer_statement.rs:171:58

@BohuTANG BohuTANG added C-bug Category: something isn't working A-query Area: databend query labels Apr 15, 2022
@BohuTANG
Copy link
Member Author

MySQL:

Schema Error: Error: ER_DATETIME_FUNCTION_OVERFLOW: Datetime function: datetime field overflow

@sundy-li
Copy link
Member

@BohuTANG
Copy link
Member Author

Right, this issue prefer an error not panic with all time type.

@sundy-li
Copy link
Member

sundy-li commented Apr 15, 2022

We need to check the maximum number before applying

7: chrono::naive::datetime::NaiveDateTime::timestamp_nanos
             at /home/sundy/.cargo/registry/src/rsproxy.cn-8f6827c7555bfaf8/chrono-0.4.19/src/naive/datetime.rs:351:21
   8: chrono::datetime::DateTime<Tz>::timestamp_nanos
             at /home/sundy/.cargo/registry/src/rsproxy.cn-8f6827c7555bfaf8/chrono-0.4.19/src/datetime.rs:164:9

@BohuTANG
Copy link
Member Author

Need Min and Max bound checking.

@BohuTANG
Copy link
Member Author

Note:
Format is 'YYYY-MM-DD hh:mm:ss[.fraction]', the range for DATETIME values is '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'.

@Veeupup
Copy link
Collaborator

Veeupup commented Apr 25, 2022

if we use nano second as the deep precision, the range for Timestamp is
1677-09-21T00:12:44UTC to 2262-04-11T23:47:16.999999999UTC
@BohuTANG

@sundy-li
Copy link
Member

We should have a union ranges that covers Date, Timestamp types.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-query Area: databend query C-bug Category: something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants