diff options
author | unknown <holyfoot/hf@mysql.com/hfmain.(none)> | 2007-10-05 15:48:42 +0500 |
---|---|---|
committer | unknown <holyfoot/hf@mysql.com/hfmain.(none)> | 2007-10-05 15:48:42 +0500 |
commit | c14e8c80ddeba63ab51fc6f0e8b7d01e3d9b728e (patch) | |
tree | a15536c48ebd7ef4fa3e0b460c558ca56d9b9731 /myisam | |
parent | 732f05a642279a569c6ed2b67fafff05b9de76c3 (diff) | |
parent | 6d54b5771bf3cce3e5a5e8ca295219fdbae80c00 (diff) | |
download | mariadb-git-c14e8c80ddeba63ab51fc6f0e8b7d01e3d9b728e.tar.gz |
Merge bk@192.168.21.1:mysql-4.1-opt
into mysql.com:/home/hf/work/30286/my41-30286
Diffstat (limited to 'myisam')
-rw-r--r-- | myisam/rt_index.c | 18 | ||||
-rw-r--r-- | myisam/rt_mbr.c | 5 |
2 files changed, 9 insertions, 14 deletions
diff --git a/myisam/rt_index.c b/myisam/rt_index.c index 238432006a4..f19ecacef63 100644 --- a/myisam/rt_index.c +++ b/myisam/rt_index.c @@ -485,15 +485,16 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uint key_length, uchar *page_buf, uint nod_flag) { double increase; - double best_incr = DBL_MAX; + double best_incr; double area; double best_area; - uchar *best_key; + uchar *best_key= NULL; uchar *k = rt_PAGE_FIRST_KEY(page_buf, nod_flag); uchar *last = rt_PAGE_END(page_buf); LINT_INIT(best_area); LINT_INIT(best_key); + LINT_INIT(best_incr); for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag)) { @@ -502,22 +503,13 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, &area)) == -1.0) return NULL; /* The following should be safe, even if we compare doubles */ - if (increase < best_incr) + if (!best_key || increase < best_incr || + ((increase == best_incr) && (area < best_area))) { best_key = k; best_area = area; best_incr = increase; } - else - { - /* The following should be safe, even if we compare doubles */ - if ((increase == best_incr) && (area < best_area)) - { - best_key = k; - best_area = area; - best_incr = increase; - } - } } return best_key; } diff --git a/myisam/rt_mbr.c b/myisam/rt_mbr.c index 897862c1c9a..31eaac0ae70 100644 --- a/myisam/rt_mbr.c +++ b/myisam/rt_mbr.c @@ -525,7 +525,10 @@ double rtree_overlapping_area(HA_KEYSEG *keyseg, uchar* a, uchar* b, } /* -Calculates MBR_AREA(a+b) - MBR_AREA(a) + Calculates MBR_AREA(a+b) - MBR_AREA(a) + Note: when 'a' and 'b' objects are far from each other, + the area increase can be really big, so this function + can return 'inf' as a result. */ double rtree_area_increase(HA_KEYSEG *keyseg, uchar* a, uchar* b, uint key_length, double *ab_area) |