• marko's avatar
    branches/zip: Implement the reporting of duplicate key values to MySQL. · 03a7cb22
    marko authored
    innobase_rec_to_mysql(): New function, for converting an InnoDB clustered
    index record to MySQL table->record[0].  TODO: convert integer fields.
    Currently, integer fields are in big-endian byte order instead of
    host byte order, and signed integer fields are offset by 0x80000000.
    
    innobase_rec_reset(): New function, for resetting table->record[0].
    
    row_merge_build_indexes(): Add the parameter TABLE* table (the MySQL table
    handle) for reporting duplicate key values.
    
    dtuple_from_fields(): New function, to convert an array of dfield_t* to
    dtuple_t.
    
    dtuple_get_n_ext(): New function, to compute the number of externally stored
    fields.
    
    row_merge_dup_t: Structure for counting and reporting duplicate records.
    
    row_merge_dup_report(): Function for counting and reporting duplicate records.
    
    row_merge_tuple_cmp(), row_merge_tuple_sort(): Replace the ulint* n_dup
    parameter with row_merge_dup_t* dup.
    
    row_merge_buf_sort(): Add the parameter row_merge_dup_t* dup, which is
    NULL when sorting a non-unique index.
    
    row_merge_buf_write(), row_merge_heap_create(), row_merge_read_rec(),
    row_merge_cmp(), row_merge_read_clustered_index(), row_merge_blocks(),
    row_merge(), row_merge_sort(): Add const qualifiers.
    
    row_merge_read_clustered_index(): Use a common error handling branch err_exit.
    Invoke row_merge_buf_sort() differently on unique indexes.
    
    row_merge_blocks(): note TODO: We could invoke innobase_rec_to_mysql()
    to report duplicate key values when creating a clustered index.
    03a7cb22
row0merge.c 59.1 KB