• Alexander Barkov's avatar
    Bug#31384 DATE_ADD() and DATE_SUB() return binary data · 7d88b552
    Alexander Barkov authored
    Problem: DATE_ADD() is a hybrid function and can return
    DATE, DATETIME or VARCHAR data type depending on arguments.
    
    In case of VARCHAR data type, DATE_ADD() reported "binary" character set,
    which was wrong.
    
    Fix: make DATE_ADD() return @character_set_connection in VARCHAR context.
     @ mysql-test/include/ctype_numconv.inc
       Adding tests
     @ mysql-test/r/ctype_binary.result
       Adding tests
     @ mysql-test/r/ctype_cp1251.result
       Adding tests
     @ mysql-test/r/ctype_latin1.result
       Adding tests
     @ mysql-test/r/ctype_ucs.result
       Adding tests
     @ mysql-test/r/ctype_utf8.result
       Adding tests
     @ sql/item_strfunc.cc
      - Moving code from Item_str_ascii_func::val_str() to
      Item_str_func::val_str_from_val_str_ascii(), as
      this code needs to be shared by Item_date_add_interval.
      - Adding str2 parameter to be used as a buffer, instead of
       using private ascii_buf member.
     @ sql/item_strfunc.h
      - Moving code from Item_str_ascii_func::val_str() to
      Item_str_func::val_str_from_val_str_ascii()
      - Removing "String *val_str_convert_from_ascii(String *str, String *ascii_buf)"
        prototype as it was neither used nor declared.
     @ sql/item_timefunc.h
      - Overwriting parent's charset_for_protocol() method,
        becase we need to behave differenlty in VARCHAR and DATE/DATETYPE context.
      - Adding ascii_buf for conversion.
      - Adding val_str_ascii() prototype.
      - Adding val_str() which uses newly added
        Item_str_func::val_str_from_val_str_ascii(),
        passing ascii_buf as a conversion buffer.
    7d88b552
item_timefunc.cc 92.8 KB