diff options
author | unknown <hf@deer.(none)> | 2004-05-25 15:06:32 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2004-05-25 15:06:32 +0500 |
commit | c690204c701f35bda2d19f14b0e8423c80cff1bb (patch) | |
tree | 1bd30ca9cbdba7bdacc7453d22bf1f95af138fd0 /myisam/rt_split.c | |
parent | de861db3e73b72a01eceed23095c4793f893d6c4 (diff) | |
download | mariadb-git-c690204c701f35bda2d19f14b0e8423c80cff1bb.tar.gz |
WL#1562 (Improving spatial code)
A set of changes improving our RTree indexes and fixed few bugs
found during the tests
myisam/rt_index.c:
Algorythm for picking the branch to insert was fixed.
pick_by_perimeter version of the algorythm added (mostly for testing
purposes)
myisam/rt_index.h:
minimal size of the page set to 1/3
It noticeable increases searching performance
myisam/rt_key.c:
counting of the size of the filled part of the page fixed
rtree_choose_key moved to rt_index.c
myisam/rt_key.h:
no need to make rtree_choose_key global
myisam/rt_mbr.c:
operations for counting the perimeter of MBR added
myisam/rt_mbr.h:
interface for rtree_perimeter_increase
myisam/rt_split.c:
my_multi_malloc changed with my_alloca
sql/spatial.cc:
LINESTRING object can consist of single point
Diffstat (limited to 'myisam/rt_split.c')
-rw-r--r-- | myisam/rt_split.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/myisam/rt_split.c b/myisam/rt_split.c index 62b8ea6a65b..e4b2212f959 100644 --- a/myisam/rt_split.c +++ b/myisam/rt_split.c @@ -265,12 +265,12 @@ int rtree_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key, n_dim = keyinfo->keysegs / 2; - if (!my_multi_malloc(MYF(0), - &coord_buf, n_dim * 2 * sizeof(double) * (max_keys + 1 + 4), - &task, sizeof(SplitStruct) * (max_keys + 1), - NullS)) + if (!(coord_buf= my_alloca(n_dim * 2 * sizeof(double) * (max_keys + 1 + 4) + + sizeof(SplitStruct) * (max_keys + 1)))) return -1; + task= (SplitStruct *)(coord_buf + n_dim * 2 * (max_keys + 1 + 4)); + next_coord = coord_buf; stop = task + max_keys; @@ -343,6 +343,6 @@ int rtree_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key, my_afree((byte*)new_page); split_err: - my_free((gptr) coord_buf, MYF(0)); + my_afree((byte*) coord_buf); return err_code; } |