Skip to content
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
@apavlo

Description

@apavlo

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    beginnerGood for newcomers. Mark issues with this.bugSomething isn't working (correctness). Mark issues with this.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions