• Marko Mäkelä's avatar
    Bug#15874001 CREATE INDEX ON A UTF8 CHAR COLUMN FAILS WITH ROW_FORMAT=REDUNDANT · e5ad4171
    Marko Mäkelä authored
    CHAR(n) in ROW_FORMAT=REDUNDANT tables is always fixed-length
    (n*mbmaxlen bytes), but in the temporary file it is variable-length
    (n*mbminlen to n*mbmaxlen bytes) for variable-length character sets,
    such as UTF-8.
    
    The temporary file format used during index creation and online ALTER
    TABLE is based on ROW_FORMAT=COMPACT. Thus, it should use the
    variable-length encoding even if the base table is in
    ROW_FORMAT=REDUNDNAT.
    
    dtype_get_fixed_size_low(): Replace an assertion-like check with a
    debug assertion.
    
    rec_init_offsets_comp_ordinary(), rec_convert_dtuple_to_rec_comp():
    Make this an inline function.  Replace 'ulint extra' with 'bool temp'.
    
    rec_get_converted_size_comp_prefix_low(): Renamed from
    rec_get_converted_size_comp_prefix(), and made inline. Add the
    parameter 'bool temp'. If temp=true, do not add REC_N_NEW_EXTRA_BYTES.
    
    rec_get_converted_size_comp_prefix(): Remove the comment about
    dict_table_is_comp(). This function is only to be called for other
    than ROW_FORMAT=REDUNDANT records.
    
    rec_get_converted_size_temp(): New function for computing temporary
    file record size. Omit REC_N_NEW_EXTRA_BYTES from the sizes.
    
    rec_init_offsets_temp(), rec_convert_dtuple_to_temp(): New functions,
    for operating on temporary file records.
    
    rb:1559 approved by Jimmy Yang
    e5ad4171
rem0rec.h 29.1 KB