• malff/marcsql@weblab.(none)'s avatar
    Bug#12976 (stored procedures local variables of type bit) · b5f8b636
    malff/marcsql@weblab.(none) authored
    Before this change, a local variables in stored procedures / stored functions
    or triggers, when declared with a type of bit(N), would not evaluate their
    value properly.
    
    The problem was that the data was incorrectly typed as a string,
    causing for example bit b'1', implemented as a byte 0x01, to be interpreted
    as a string starting with the character 0x01. This later would cause
    implicit conversions to integers or booleans to fail.
    
    The root cause of this problem was an incorrect translation between field
    types, like bit(N), and internal types used when representing values in Item
    objects.
    
    Also, before this change, the function HEX() would sometime print extra "0"
    characters when invoked with bit(N) values.
    
    With this fix, the type translation (sp_map_result_type, sp_map_item_type)
    has been changed so that bit(N) fields are represented with integer values.
    
    A consequence is that, for the function HEX(), when called with a stored
    procedure local variable of type bit(N) as argument, HEX() is provided with an
    integer instead of a string, and therefore does not print "0" padding.
    
    A test case for Bug 12976 was present in the test suite, and has been updated.
    b5f8b636
sp_head.cc 92.8 KB