Below is the list of changes that have just been committed into a local
5.0 repository of kaa. When kaa does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-10-17 19:24:19+04:00, kaa@polly.(none) +21 -0
Fix for bug #31207: Test "join_nested" shows different strategy on IA64
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@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +4 -2
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@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +1 -1
Added mf_qsort.c to libmysql, since my_lib.c now uses my_qsort() instead of qsort().
myisam/ft_boolean_search.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +2 -2
Replaced qsort2() with my_qsort2().
myisam/ft_nlq_search.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +2 -1
Replaced qsort2() with my_qsort2().
myisam/myisampack.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +1 -1
Replaced qsort() with my_qsort().
myisam/sort.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +6 -6
Replaced qsort2() with my_qsort2().
mysys/mf_keycache.c@stripped, 2007-10-17 19:24:12+04:00, kaa@polly.(none) +1 -1
Replaced qsort() with my_qsort().
mysys/mf_qsort.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +2 -2
Renamed qsort() to my_qsort() and qsort2() to my_qsort2().
mysys/mf_sort.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort2() with my_qsort2().
mysys/my_lib.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +3 -3
Replaced qsort() with my_qsort().
mysys/queues.c@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +2 -2
Replaced qsort2() with my_qsort2().
sql/examples/ha_tina.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort() with my_qsort().
sql/item_cmpfunc.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort2() with my_qsort2().
sql/item_cmpfunc.h@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort2() with my_qsort2().
sql/opt_range.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +4 -4
Replaced qsort() with my_qsort().
sql/records.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +2 -1
Replaced qsort() with my_qsort().
sql/sql_acl.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +10 -10
Replaced qsort() with my_qsort().
sql/sql_array.h@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort() with my_qsort().
sql/sql_help.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort() with my_qsort().
sql/sql_select.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +4 -3
Replaced qsort() with my_qsort().
sql/sql_table.cc@stripped, 2007-10-17 19:24:13+04:00, kaa@polly.(none) +1 -1
Replaced qsort() with my_qsort().
diff -Nrup a/include/my_sys.h b/include/my_sys.h
--- a/include/my_sys.h 2007-08-29 19:20:12 +04:00
+++ b/include/my_sys.h 2007-10-17 19:24:12 +04:00
@@ -709,8 +709,10 @@ extern sig_handler my_set_alarm_variable
extern void my_string_ptr_sort(void *base,uint items,size_s size);
extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
size_s size_of_element,uchar *buffer[]);
-extern qsort_t qsort2(void *base_ptr, size_t total_elems, size_t size,
- qsort2_cmp cmp, void *cmp_argument);
+extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size,
+ qsort_cmp cmp);
+extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size,
+ qsort2_cmp cmp, void *cmp_argument);
extern qsort2_cmp get_ptr_compare(uint);
void my_store_ptr(byte *buff, uint pack_length, my_off_t pos);
my_off_t my_get_ptr(byte *ptr, uint pack_length);
diff -Nrup a/libmysql/Makefile.shared b/libmysql/Makefile.shared
--- a/libmysql/Makefile.shared 2006-11-27 23:12:37 +03:00
+++ b/libmysql/Makefile.shared 2007-10-17 19:24:12 +04:00
@@ -73,7 +73,7 @@ sqlobjects = net.lo
sql_cmn_objects = pack.lo client.lo my_time.lo
# Not needed in the minimum library
-mysysobjects2 = my_lib.lo
+mysysobjects2 = my_lib.lo mf_qsort.lo
mysysobjects = $(mysysobjects1) $(mysysobjects2)
target_libadd = $(mysysobjects) $(mystringsobjects) $(dbugobjects) \
$(sql_cmn_objects) $(vio_objects) $(sqlobjects)
diff -Nrup a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c
--- a/myisam/ft_boolean_search.c 2007-01-22 15:10:36 +03:00
+++ b/myisam/ft_boolean_search.c 2007-10-17 19:24:12 +04:00
@@ -430,8 +430,8 @@ FT_INFO * ft_init_boolean_search(MI_INFO
ftb->list=(FTB_WORD **)alloc_root(&ftb->mem_root,
sizeof(FTB_WORD *)*ftb->queue.elements);
memcpy(ftb->list, ftb->queue.root+1, sizeof(FTB_WORD *)*ftb->queue.elements);
- qsort2(ftb->list, ftb->queue.elements, sizeof(FTB_WORD *),
- (qsort2_cmp)FTB_WORD_cmp_list, ftb->charset);
+ my_qsort2(ftb->list, ftb->queue.elements, sizeof(FTB_WORD *),
+ (qsort2_cmp)FTB_WORD_cmp_list, ftb->charset);
if (ftb->queue.elements<2) ftb->with_scan &= ~FTB_FLAG_TRUNC;
ftb->state=READY;
return ftb;
diff -Nrup a/myisam/ft_nlq_search.c b/myisam/ft_nlq_search.c
--- a/myisam/ft_nlq_search.c 2006-12-30 23:02:04 +03:00
+++ b/myisam/ft_nlq_search.c 2007-10-17 19:24:12 +04:00
@@ -281,7 +281,8 @@ FT_INFO *ft_init_nlq_search(MI_INFO *inf
&dptr, left_root_right);
if (flags & FT_SORTED)
- qsort2(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort2_cmp)&FT_DOC_cmp, 0);
+ my_qsort2(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort2_cmp)&FT_DOC_cmp,
+ 0);
err:
delete_tree(&aio.dtree);
diff -Nrup a/myisam/myisampack.c b/myisam/myisampack.c
--- a/myisam/myisampack.c 2007-01-22 15:10:36 +03:00
+++ b/myisam/myisampack.c 2007-10-17 19:24:12 +04:00
@@ -3148,7 +3148,7 @@ static void fakebigcodes(HUFF_COUNTS *hu
cur_sort_p= sort_counts;
while (cur_count_p < end_count_p)
*(cur_sort_p++)= cur_count_p++;
- (void) qsort(sort_counts, 256, sizeof(my_off_t*), (qsort_cmp) fakecmp);
+ (void) my_qsort(sort_counts, 256, sizeof(my_off_t*), (qsort_cmp) fakecmp);
/*
Assign faked counts.
diff -Nrup a/myisam/sort.c b/myisam/sort.c
--- a/myisam/sort.c 2007-06-21 20:52:16 +04:00
+++ b/myisam/sort.c 2007-10-17 19:24:12 +04:00
@@ -649,8 +649,8 @@ static int NEAR_F write_keys(MI_SORT_PAR
uint sort_length=info->key_length;
DBUG_ENTER("write_keys");
- qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
- info);
+ my_qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
+ info);
if (!my_b_inited(tempfile) &&
open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST",
DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
@@ -692,8 +692,8 @@ static int NEAR_F write_keys_varlen(MI_S
int err;
DBUG_ENTER("write_keys_varlen");
- qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
- info);
+ my_qsort2((byte*) sort_keys,count,sizeof(byte*),(qsort2_cmp) info->key_cmp,
+ info);
if (!my_b_inited(tempfile) &&
open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST",
DISK_BUFFER_SIZE, info->sort_info->param->myf_rw))
@@ -735,8 +735,8 @@ static int NEAR_F write_index(MI_SORT_PA
{
DBUG_ENTER("write_index");
- qsort2((gptr) sort_keys,(size_t) count,sizeof(byte*),
- (qsort2_cmp) info->key_cmp,info);
+ my_qsort2((gptr) sort_keys,(size_t) count,sizeof(byte*),
+ (qsort2_cmp) info->key_cmp,info);
while (count--)
{
if ((*info->key_write)(info,*sort_keys++))
diff -Nrup a/mysys/mf_keycache.c b/mysys/mf_keycache.c
--- a/mysys/mf_keycache.c 2007-08-29 20:45:00 +04:00
+++ b/mysys/mf_keycache.c 2007-10-17 19:24:12 +04:00
@@ -2268,7 +2268,7 @@ static int flush_cached_blocks(KEY_CACHE
As all blocks referred in 'cache' are marked by BLOCK_IN_FLUSH
we are guarunteed no thread will change them
*/
- qsort((byte*) cache, count, sizeof(*cache), (qsort_cmp) cmp_sec_link);
+ my_qsort((byte*) cache, count, sizeof(*cache), (qsort_cmp) cmp_sec_link);
keycache_pthread_mutex_lock(&keycache->cache_lock);
for ( ; cache != end ; cache++)
diff -Nrup a/mysys/mf_qsort.c b/mysys/mf_qsort.c
--- a/mysys/mf_qsort.c 2006-12-23 22:04:07 +03:00
+++ b/mysys/mf_qsort.c 2007-10-17 19:24:13 +04:00
@@ -91,10 +91,10 @@ typedef struct st_stack
*****************************************************************************/
#ifdef QSORT_EXTRA_CMP_ARGUMENT
-qsort_t qsort2(void *base_ptr, size_t count, size_t size, qsort2_cmp cmp,
+qsort_t my_qsort2(void *base_ptr, size_t count, size_t size, qsort2_cmp cmp,
void *cmp_argument)
#else
-qsort_t qsort(void *base_ptr, size_t count, size_t size, qsort_cmp cmp)
+qsort_t my_qsort(void *base_ptr, size_t count, size_t size, qsort_cmp cmp)
#endif
{
char *low, *high, *pivot;
diff -Nrup a/mysys/mf_sort.c b/mysys/mf_sort.c
--- a/mysys/mf_sort.c 2006-12-23 22:04:07 +03:00
+++ b/mysys/mf_sort.c 2007-10-17 19:24:13 +04:00
@@ -35,7 +35,7 @@ void my_string_ptr_sort(void *base, uint
if (size && items)
{
uint size_arg=size;
- qsort2(base,items,sizeof(byte*),get_ptr_compare(size),(void*) &size_arg);
+ my_qsort2(base,items,sizeof(byte*),get_ptr_compare(size),(void*) &size_arg);
}
}
}
diff -Nrup a/mysys/my_lib.c b/mysys/my_lib.c
--- a/mysys/my_lib.c 2007-03-28 21:46:36 +04:00
+++ b/mysys/my_lib.c 2007-10-17 19:24:13 +04:00
@@ -187,7 +187,7 @@ MY_DIR *my_dir(const char *path, myf MyF
result->number_off_files= dir_entries_storage->elements;
if (!(MyFlags & MY_DONT_SORT))
- qsort((void *) result->dir_entry, result->number_off_files,
+ my_qsort((void *) result->dir_entry, result->number_off_files,
sizeof(FILEINFO), (qsort_cmp) comp_names);
DBUG_RETURN(result);
@@ -498,7 +498,7 @@ MY_DIR *my_dir(const char *path, myf MyF
result->number_off_files= dir_entries_storage->elements;
if (!(MyFlags & MY_DONT_SORT))
- qsort((void *) result->dir_entry, result->number_off_files,
+ my_qsort((void *) result->dir_entry, result->number_off_files,
sizeof(FILEINFO), (qsort_cmp) comp_names);
DBUG_PRINT("exit", ("found %d files", result->number_off_files));
DBUG_RETURN(result);
@@ -605,7 +605,7 @@ MY_DIR *my_dir(const char* path, myf MyF
result->number_off_files= dir_entries_storage->elements;
if (!(MyFlags & MY_DONT_SORT))
- qsort((void *) result->dir_entry, result->number_off_files,
+ my_qsort((void *) result->dir_entry, result->number_off_files,
sizeof(FILEINFO), (qsort_cmp) comp_names);
DBUG_RETURN(result);
diff -Nrup a/mysys/queues.c b/mysys/queues.c
--- a/mysys/queues.c 2006-12-23 22:04:08 +03:00
+++ b/mysys/queues.c 2007-10-17 19:24:13 +04:00
@@ -250,6 +250,6 @@ static int queue_fix_cmp(QUEUE *queue, v
void queue_fix(QUEUE *queue)
{
- qsort2(queue->root+1,queue->elements, sizeof(void *),
- (qsort2_cmp)queue_fix_cmp, queue);
+ my_qsort2(queue->root+1,queue->elements, sizeof(void *),
+ (qsort2_cmp)queue_fix_cmp, queue);
}
diff -Nrup a/sql/examples/ha_tina.cc b/sql/examples/ha_tina.cc
--- a/sql/examples/ha_tina.cc 2007-06-15 10:19:34 +04:00
+++ b/sql/examples/ha_tina.cc 2007-10-17 19:24:13 +04:00
@@ -852,7 +852,7 @@ int ha_tina::rnd_end()
It also sorts so that we move the final blocks to the
beginning so that we move the smallest amount of data possible.
*/
- qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set), (qsort_cmp)sort_set);
+ my_qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set), (qsort_cmp)sort_set);
for (ptr= chain; ptr < chain_ptr; ptr++)
{
memmove(share->mapped_file + ptr->begin, share->mapped_file + ptr->end,
diff -Nrup a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
--- a/sql/item_cmpfunc.cc 2007-07-16 01:03:32 +04:00
+++ b/sql/item_cmpfunc.cc 2007-10-17 19:24:13 +04:00
@@ -2775,7 +2775,7 @@ static inline int cmp_ulongs (ulonglong
SYNOPSIS
cmp_longlong()
- cmp_arg an argument passed to the calling function (qsort2)
+ cmp_arg an argument passed to the calling function (my_qsort2)
a left argument
b right argument
diff -Nrup a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
--- a/sql/item_cmpfunc.h 2007-08-31 03:23:36 +04:00
+++ b/sql/item_cmpfunc.h 2007-10-17 19:24:13 +04:00
@@ -781,7 +781,7 @@ public:
virtual byte *get_value(Item *item)=0;
void sort()
{
- qsort2(base,used_count,size,compare,collation);
+ my_qsort2(base,used_count,size,compare,collation);
}
int find(Item *item);
diff -Nrup a/sql/opt_range.cc b/sql/opt_range.cc
--- a/sql/opt_range.cc 2007-09-12 18:13:15 +04:00
+++ b/sql/opt_range.cc 2007-10-17 19:24:13 +04:00
@@ -3159,8 +3159,8 @@ TRP_ROR_INTERSECT *get_best_ror_intersec
ROR_SCAN_INFO's.
Step 2: Get best ROR-intersection using an approximate algorithm.
*/
- qsort(tree->ror_scans, tree->n_ror_scans, sizeof(ROR_SCAN_INFO*),
- (qsort_cmp)cmp_ror_scan_info);
+ my_qsort(tree->ror_scans, tree->n_ror_scans, sizeof(ROR_SCAN_INFO*),
+ (qsort_cmp)cmp_ror_scan_info);
DBUG_EXECUTE("info",print_ror_scans_arr(param->table, "ordered",
tree->ror_scans,
tree->ror_scans_end););
@@ -3349,8 +3349,8 @@ TRP_ROR_INTERSECT *get_best_covering_ror
bitmap_get_first(&(*scan)->covered_fields);
}
- qsort(ror_scan_mark, ror_scans_end-ror_scan_mark, sizeof(ROR_SCAN_INFO*),
- (qsort_cmp)cmp_ror_scan_info_covering);
+ my_qsort(ror_scan_mark, ror_scans_end-ror_scan_mark, sizeof(ROR_SCAN_INFO*),
+ (qsort_cmp)cmp_ror_scan_info_covering);
DBUG_EXECUTE("info", print_ror_scans_arr(param->table,
"remaining scans",
diff -Nrup a/sql/records.cc b/sql/records.cc
--- a/sql/records.cc 2006-12-30 23:02:07 +03:00
+++ b/sql/records.cc 2007-10-17 19:24:13 +04:00
@@ -497,7 +497,8 @@ static int rr_from_cache(READ_RECORD *in
int3store(ref_position,(long) i);
ref_position+=3;
}
- qsort(info->read_positions,length,info->struct_length,(qsort_cmp) rr_cmp);
+ my_qsort(info->read_positions, length, info->struct_length,
+ (qsort_cmp) rr_cmp);
position=info->read_positions;
for (i=0 ; i < length ; i++)
diff -Nrup a/sql/sql_acl.cc b/sql/sql_acl.cc
--- a/sql/sql_acl.cc 2007-06-20 16:24:27 +04:00
+++ b/sql/sql_acl.cc 2007-10-17 19:24:13 +04:00
@@ -248,8 +248,8 @@ static my_bool acl_load(THD *thd, TABLE_
#endif
VOID(push_dynamic(&acl_hosts,(gptr) &host));
}
- qsort((gptr) dynamic_element(&acl_hosts,0,ACL_HOST*),acl_hosts.elements,
- sizeof(ACL_HOST),(qsort_cmp) acl_compare);
+ my_qsort((gptr) dynamic_element(&acl_hosts,0,ACL_HOST*),acl_hosts.elements,
+ sizeof(ACL_HOST),(qsort_cmp) acl_compare);
end_read_record(&read_record_info);
freeze_size(&acl_hosts);
@@ -421,8 +421,8 @@ static my_bool acl_load(THD *thd, TABLE_
allow_all_hosts=1; // Anyone can connect
}
}
- qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
- sizeof(ACL_USER),(qsort_cmp) acl_compare);
+ my_qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
+ sizeof(ACL_USER),(qsort_cmp) acl_compare);
end_read_record(&read_record_info);
freeze_size(&acl_users);
@@ -479,8 +479,8 @@ static my_bool acl_load(THD *thd, TABLE_
#endif
VOID(push_dynamic(&acl_dbs,(gptr) &db));
}
- qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
- sizeof(ACL_DB),(qsort_cmp) acl_compare);
+ my_qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
+ sizeof(ACL_DB),(qsort_cmp) acl_compare);
end_read_record(&read_record_info);
freeze_size(&acl_dbs);
init_check_host();
@@ -1110,8 +1110,8 @@ static void acl_insert_user(const char *
if (!acl_user.host.hostname ||
(acl_user.host.hostname[0] == wild_many && !acl_user.host.hostname[1]))
allow_all_hosts=1; // Anyone can connect /* purecov: tested */
- qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
- sizeof(ACL_USER),(qsort_cmp) acl_compare);
+ my_qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
+ sizeof(ACL_USER),(qsort_cmp) acl_compare);
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
rebuild_check_host();
@@ -1173,8 +1173,8 @@ static void acl_insert_db(const char *us
acl_db.access=privileges;
acl_db.sort=get_sort(3,acl_db.host.hostname,acl_db.db,acl_db.user);
VOID(push_dynamic(&acl_dbs,(gptr) &acl_db));
- qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
- sizeof(ACL_DB),(qsort_cmp) acl_compare);
+ my_qsort((gptr) dynamic_element(&acl_dbs,0,ACL_DB*),acl_dbs.elements,
+ sizeof(ACL_DB),(qsort_cmp) acl_compare);
}
diff -Nrup a/sql/sql_array.h b/sql/sql_array.h
--- a/sql/sql_array.h 2006-12-23 22:04:26 +03:00
+++ b/sql/sql_array.h 2007-10-17 19:24:13 +04:00
@@ -62,7 +62,7 @@ public:
void sort(CMP_FUNC cmp_func)
{
- qsort(array.buffer, array.elements, sizeof(Elem), (qsort_cmp)cmp_func);
+ my_qsort(array.buffer, array.elements, sizeof(Elem), (qsort_cmp)cmp_func);
}
};
diff -Nrup a/sql/sql_help.cc b/sql/sql_help.cc
--- a/sql/sql_help.cc 2007-02-19 15:39:27 +03:00
+++ b/sql/sql_help.cc 2007-10-17 19:24:13 +04:00
@@ -524,7 +524,7 @@ int send_variant_2_list(MEM_ROOT *mem_ro
List_iterator<String> it(*names);
for (pos= pointers; pos!=end; (*pos++= it++));
- qsort(pointers,names->elements,sizeof(String*),string_ptr_cmp);
+ my_qsort(pointers,names->elements,sizeof(String*),string_ptr_cmp);
for (pos= pointers; pos!=end; pos++)
{
diff -Nrup a/sql/sql_select.cc b/sql/sql_select.cc
--- a/sql/sql_select.cc 2007-09-24 13:33:23 +04:00
+++ b/sql/sql_select.cc 2007-10-17 19:24:13 +04:00
@@ -3658,7 +3658,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_AR
{
KEYUSE key_end,*prev,*save_pos,*use;
- qsort(keyuse->buffer,keyuse->elements,sizeof(KEYUSE),
+ my_qsort(keyuse->buffer,keyuse->elements,sizeof(KEYUSE),
(qsort_cmp) sort_keyuse);
bzero((char*) &key_end,sizeof(key_end)); /* Add for easy testing */
@@ -4371,8 +4371,9 @@ choose_plan(JOIN *join, table_map join_t
Apply heuristic: pre-sort all access plans with respect to the number of
records accessed.
*/
- qsort(join->best_ref + join->const_tables, join->tables - join->const_tables,
- sizeof(JOIN_TAB*), straight_join?join_tab_cmp_straight:join_tab_cmp);
+ my_qsort(join->best_ref + join->const_tables,
+ join->tables - join->const_tables, sizeof(JOIN_TAB*),
+ straight_join ? join_tab_cmp_straight : join_tab_cmp);
if (straight_join)
{
diff -Nrup a/sql/sql_table.cc b/sql/sql_table.cc
--- a/sql/sql_table.cc 2007-08-05 07:53:13 +04:00
+++ b/sql/sql_table.cc 2007-10-17 19:24:13 +04:00
@@ -1476,7 +1476,7 @@ static int mysql_prepare_table(THD *thd,
DBUG_RETURN(-1);
}
/* Sort keys in optimized order */
- qsort((gptr) *key_info_buffer, *key_count, sizeof(KEY),
+ my_qsort((gptr) *key_info_buffer, *key_count, sizeof(KEY),
(qsort_cmp) sort_keys);
create_info->null_bits= null_fields;
| Thread |
|---|
| • bk commit into 5.0 tree (kaa:1.2527) BUG#31207 | Alexey Kopytov | 17 Oct |