• kaa@polly.(none)'s avatar
    Fix for bug #31207: Test "join_nested" shows different strategy on IA64 · 6d1f3e8d
    kaa@polly.(none) authored
    CPUs / Intel's ICC compile
    
    The bug is a combination of two problems:
    
    1. IA64/ICC MySQL binaries use glibc's qsort(), not the one in mysys.
    
    2. The order relation implemented by join_tab_cmp() is not transitive,
    i.e. it is possible to choose such a, b and c that (a < b) && (b < c)
    but (c < a). This implies that result of a sort using the relation
    implemented by join_tab_cmp() depends on the order in which
    elements are compared, i.e. the result is implementation-specific. Since
    choose_plan() uses qsort() to pre-sort the
    join tables using join_tab_cmp() as a compare function, the results of
    the sorting may vary depending on qsort() implementation.
    
    It is neither possible nor important to implement a better ordering
    algorithm in join_tab_cmp(). Therefore the only way to fix it is to
    force our own qsort() to be used by renaming it to my_qsort(), so we don't depend
    on linker to decide that.
    
    This patch also "fixes" bug #20530: qsort redefinition violates the
    standard.
    6d1f3e8d
opt_range.cc 298 KB