This repository was archived by the owner on Feb 20, 2023. It is now read-only.
This repository was archived by the owner on Feb 20, 2023. It is now read-only.
Unable to Convert American-style Date Strings #1334
Open
Description
Summary
We are not able to parse American (???) dates: <month>/<day>/<year>
.
I personally don't like this style of dates but it would be nice if we supported it.
Steps to Reproduce
noisepage=# CREATE TABLE types_test (col DATE);
CREATE TABLE
noisepage=# INSERT INTO types_test (col) VALUES ('2020-01-11');
INSERT 0 1
noisepage=# SELECT * FROM types_test;
col
------------
2020-01-11
(1 row)
noisepage=# INSERT INTO types_test (col) VALUES ('01/11/2020');
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
Server
terminate called after throwing an instance of 'noisepage::ConversionException'
what(): 01/11/2020 is not a valid date
#1 0x00007ffff78d3859 in __GI_abort () at abort.c:79
#2 0x00007ffff7ca8951 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff7cb447c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff7cb44e7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff7cb4799 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00005555578eea70 in noisepage::execution::sql::Date::FromString (str=0x7fff60007f54 "01/11/2020", len=10) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/execution/sql/runtime_types.cpp:199
#7 0x000055555765d4c9 in noisepage::execution::sql::Date::FromString (str="01/11/2020") at ../src/include/execution/sql/runtime_types.h:138
#8 0x0000555557aea9d8 in noisepage::binder::BinderUtil::CheckAndTryPromoteType (value=..., desired_type=noisepage::type::TypeId::DATE) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/binder/binder_util.cpp:69
#9 0x0000555557ae58fb in noisepage::binder::BindNodeVisitor::Visit (this=0x7fffeedfb310, expr=...) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/binder/bind_node_visitor.cpp:666
#10 0x000055555754ce61 in noisepage::parser::ConstantValueExpression::Accept (this=0x7fff60007ed0, v=...) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/parser/expression/constant_value_expression.cpp:347
#11 0x0000555557ae35c0 in noisepage::binder::BindNodeVisitor::Visit (this=0x7fffeedfb310, node=...) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/binder/bind_node_visitor.cpp:442
#12 0x000055555748eeb1 in noisepage::parser::InsertStatement::Accept (this=0x7fff60009270, v=...) at ../src/include/parser/insert_statement.h:53
#13 0x0000555557adf9a9 in noisepage::binder::BindNodeVisitor::BindNameToNode (this=0x7fffeedfb310, parse_result=..., parameters=..., desired_parameter_types=...)
at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/binder/bind_node_visitor.cpp:61
#14 0x0000555557267f57 in noisepage::trafficcop::TrafficCop::BindQuery (this=0x555558e2ddf0, connection_ctx=..., statement=..., parameters=...)
at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/traffic_cop/traffic_cop.cpp:311
#15 0x0000555557653959 in noisepage::network::SimpleQueryCommand::Exec (this=0x7fff60007260, interpreter=..., out=..., t_cop=..., connection=...)
at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/postgres/postgres_network_commands.cpp:168
#16 0x0000555557658abb in noisepage::network::PostgresProtocolInterpreter::Process (this=0x7fff5c004e90, in=..., out=..., t_cop=..., context=...)
at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/postgres/postgres_protocol_interpreter.cpp:45
#17 0x000055555768dc45 in noisepage::network::ConnectionHandle::Process (this=0x7fff60000ef0) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/connection_handle.cpp:182
#18 0x000055555769622f in noisepage::network::ConnectionHandleStateMachineTransition::Process (handle=...) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/connection_handle.cpp:76
#19 0x000055555768d6d1 in noisepage::network::ConnectionHandle::StateMachine::Accept (this=0x7fff60000f10, action=noisepage::network::Transition::WAKEUP, handle=...)
at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/connection_handle.cpp:129
#20 0x000055555768db20 in noisepage::network::ConnectionHandle::HandleEvent (this=0x7fff60000ef0, fd=126, flags=2) at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/connection_handle.cpp:169
#21 0x000055555768de3c in noisepage::network::ConnectionHandle::<lambda(int, int16_t, void*)>::operator()(int, int16_t, void *) const (__closure=0x0, fd=126, flags=2, arg=0x7fff60000ef0)
at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/connection_handle.cpp:217
#22 0x000055555768de72 in noisepage::network::ConnectionHandle::<lambda(int, int16_t, void*)>::_FUN(int, int16_t, void *) () at /home/wanshenl/Documents/RareTerrierPhotos/noisepage/src/network/connection_handle.cpp:218
#23 0x00007ffff7ece13f in ?? () from /lib/x86_64-linux-gnu/libevent-2.1.so.7
#24 0x00007ffff7ece87f in event_base_loop () from /lib/x86_64-linux-gnu/libevent-2.1.so.7
#25 0x000055555767a177 in noisepage::EventUtil::EventBaseDispatch (base=0x7fff5c000ff0) at ../src/include/common/event_util.h:100
#26 0x000055555767a1b4 in noisepage::common::NotifiableTask::EventLoop (this=0x7fff5c000ee0) at ../src/include/common/notifiable_task.h:151
#27 0x000055555767a1f2 in noisepage::common::NotifiableTask::RunTask (this=0x7fff5c000ee0) at ../src/include/common/notifiable_task.h:158
#28 0x000055555769e44a in noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}::operator()() const (this=0x555558d22330)
at ../src/include/common/dedicated_thread_registry.h:82
#29 0x00005555576c06db in std::__invoke_impl<void, noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}>(std::__invoke_other, noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}&&) (__f=...) at /usr/include/c++/9/bits/invoke.h:60
#30 0x00005555576c0625 in std::__invoke<noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}>(noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}&&) (__fn=...) at /usr/include/c++/9/bits/invoke.h:95
#31 0x00005555576c0596 in std::thread::_Invoker<std::tuple<noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x7fff5c001d58) at /usr/include/c++/9/thread:244
#32 0x00005555576c050e in std::thread::_Invoker<std::tuple<noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}> >::operator()()
(this=0x7fff5c001d58) at /usr/include/c++/9/thread:251
#33 0x00005555576c03c2 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<noisepage::common::DedicatedThreadRegistry::RegisterDedicatedThread<noisepage::network::ConnectionHandlerTask, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory> >(noisepage::common::DedicatedThreadOwner*, unsigned int, noisepage::common::ManagedPointer<noisepage::network::ConnectionHandleFactory>)::{lambda()#1}> > >::_M_run() (this=0x7fff5c001d50) at /usr/include/c++/9/thread:195
Expected Behavior
Postgres handles this without any problems:
pavlo=# CREATE TABLE types_test (col DATE);
CREATE TABLE
pavlo=# INSERT INTO types_test (col) VALUES ('2020-01-11');
INSERT 0 1
pavlo=# SELECT * FROM types_test;
col
------------
2020-01-11
(1 row)
pavlo=# INSERT INTO types_test (col) VALUES ('01/11/2020');
INSERT 0 1
pavlo=# SELECT * FROM types_test;
col
------------
2020-01-11
2020-01-11
(2 rows)