• Alexander Barkov's avatar
    MDEV-12858 + MDEV+12859 + MDEV-12862 - a join patch fixing a few data type... · c84bbeda
    Alexander Barkov authored
    MDEV-12858 + MDEV+12859 + MDEV-12862 - a join patch fixing a few data type problems with CREATE..SELECT
    
    MDEV-12858 Out-of-range error for CREATE..SELECT unsigned_int_column+1
    MDEV-12859 Out-of-range error for CREATE..SELECT @A:=EXTRACT(MINUTE_MICROSECOND FROM..)
    MDEV-12862 Data type of @A:=1e0 depends on the session character set
    
    1. Moving a part of Item::create_tmp_field() into a new helper method
       Item::create_tmp_field_int() and reusing it in Item::create_tmp_field()
       and Item_func_signed::create_tmp_field().
       Fixing the code in Item::create_tmp_field_int() to call
       Type_handler::make_table_field() instead of doing "new Field_long[long]"
       directly. This change revealed a problem reported in MDEV-12862.
    
    2. Changing the "long vs longlong" cut-off length for
         - Item_func::create_tmp_field()
         - Item_sum::create_tmp_field()
         - Item_func_get_user_var::create_tmp_field()
       from MY_INT32_NUM_DECIMAL_DIGITS to (MY_INT32_NUM_DECIMAL_DIGITS - 2).
       This fixes MDEV-12858.
       After this change, the "convert_int_length" parameter to
       Item::create_tmp_field() is not needed any more, because
       (MY_INT32_NUM_DECIMAL_DIGITS - 2) is always passed.
       So removing the "convert_int_length" parameter.
    
    3. Fixing Item::create_tmp_field() to pass max_char_length() instead
       of max_length to the constructor of Field_double().
       This fixes MDEV-12862.
    
    4. Additionally, fixing
       - Type_handler_{tiny|short|int24|long|longlong}::make_table_field()
       - Type_handler_{float|double}::make_table_field()
       to pass max_char_length() instead of max_length to Field contructors.
       This is needed by the change (1).
    
    5. Adding new tests, and recording new correct results in the old tests in:
       - mysql-test/r/type_ranges.result
       - storage/tokudb/mysql-test/tokudb/r/type_ranges.result
    c84bbeda
sql_type.cc 158 KB