• unknown's avatar
    Fix for bug #31207: Test "join_nested" shows different strategy on IA64 · ce8bf087
    unknown 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.
    
    
    include/my_sys.h:
      Renamed qsort() and qsort2() to my_qsort() and my_qsort2(). Since
      previously we relied on stdlib.h to provide a declaration for qsort(), a
      separate declaration for my_qsort() is now required.
    libmysql/Makefile.shared:
      Added mf_qsort.c to libmysql, since my_lib.c now uses my_qsort() instead of qsort().
    myisam/ft_boolean_search.c:
      Replaced qsort2() with my_qsort2().
    myisam/ft_nlq_search.c:
      Replaced qsort2() with my_qsort2().
    myisam/myisampack.c:
      Replaced qsort() with my_qsort().
    myisam/sort.c:
      Replaced qsort2() with my_qsort2().
    mysys/mf_keycache.c:
      Replaced qsort() with my_qsort().
    mysys/mf_qsort.c:
      Renamed qsort() to my_qsort() and qsort2() to my_qsort2().
    mysys/mf_sort.c:
      Replaced qsort2() with my_qsort2().
    mysys/my_lib.c:
      Replaced qsort() with my_qsort().
    mysys/queues.c:
      Replaced qsort2() with my_qsort2().
    sql/item_cmpfunc.cc:
      Replaced qsort2() with my_qsort2().
    sql/item_cmpfunc.h:
      Replaced qsort2() with my_qsort2().
    sql/opt_range.cc:
      Replaced qsort() with my_qsort().
    sql/records.cc:
      Replaced qsort() with my_qsort().
    sql/sql_acl.cc:
      Replaced qsort() with my_qsort().
    sql/sql_array.h:
      Replaced qsort() with my_qsort().
    sql/sql_help.cc:
      Replaced qsort() with my_qsort().
    sql/sql_select.cc:
      Replaced qsort() with my_qsort().
    sql/examples/ha_tina.cc:
      Replaced qsort() with my_qsort().
    sql/sql_table.cc:
      Replaced qsort() with my_qsort().
    ce8bf087
item_cmpfunc.cc 125 KB