• marko's avatar
    branches/zip: In purge, avoid dereferencing unset BLOB pointers of freshly · 06299ddd
    marko authored
    inserted, uncommitted clustered index records when determining if a
    secondary index record that contains a column prefix of an externally
    stored column is referencing the clustered index record.
    
    field_ref_zero[]: A BLOB pointer full of zero, for use in comparisons.
    
    btr_copy_externally_stored_field_prefix(): Assert that the BLOB pointer is set.
    
    row_ext_lookup_ith(), row_ext_lookup(), row_ext_lookup_low(): Document
    that field_ref_zero is returned when the BLOB cannot be fetched.
    
    row_ext_lookup_low(): Return field_ref_zero and *len = 0 when the
    BLOB pointer is unset.
    
    row_build_index_entry(): Return NULL when a needed BLOB pointer cannot
    be dereferenced (row_ext_lookup returns field_ref_zero).  Check the
    return value for NULL in callers.
    
    row_vers_impl_x_locked_off_kernel(): Avoid comparisons when
    row_build_index_entry() returns NULL.
    
    row_vers_old_has_index_entry(): Ignore records for which
    row_build_index_entry() returns NULL.  The entry should never be NULL
    in rollback, but it may be NULL in purge.
    
    row_merge_buf_add(): Assert that row_ext_lookup() does not return
    field_ref_zero.  The table will be locked during index creation.
    06299ddd
row0vers.c 20 KB