• unknown's avatar
    Proposed fix for Bug#4026 "Microseconds part of TIME/DATETIME types · b9862a88
    unknown authored
    is broken (prepared statements)": fixed date handling in many places 
    of prepared statements code.
    
    
    libmysql/libmysql.c:
      Fix for Bug#4026:
      - now buffer_length is defined for any buffer type. Network buffer 
        preallocation cleaned up.
      - added constants for maximum buffer sizes necessary for MYSQL_TYPE_DATE,
        MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME types.
      - TIME/DATETIME packing/unpacking functions fixed 
      - now result set metadata is always updated from fields sent to COM_EXECUTE.
        This is necessary to make 'SELECT ?' queries work without conversions.
    sql/item.cc:
      - added implementatoin of Item_param::get_date
    sql/item.h:
      - added enum_field_types Item_param::param_type. First step for proper
        handling of placeholders.
      - added get_date() implementation to prevent date -> string -> date 
        conversions when MYSQL_TYPE_DATE/DATETIME parameter is used in temporal 
        context.
    sql/protocol.cc:
      Fix for Bug#4026:
      - PACKET_BUFFET_EXTRA_ALLOC -> PACKET_BUFFER_EXTRA_ALLOC.
        The define itself was moved to .cc as it's used only in protocol.cc
      - fixed Protocol_prep::store_time() call.
    sql/protocol.h:
      - PACKET_BUFFER_EXTRA_ALLOC moved to protocol.cc
    sql/sql_prepare.cc:
      Fix for Bug#4026:
      - MYSQL_TYPE_TIME/DATETIME handling fixed.
      - added initialization for Item_param::param_type in 
        setup_one_conversion_function
    tests/client_test.c:
      Test case for Bug#4026
    b9862a88
item.cc 60 KB