summaryrefslogtreecommitdiff
path: root/storage/maria/ma_rt_index.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage/maria/ma_rt_index.c')
-rw-r--r--storage/maria/ma_rt_index.c343
1 files changed, 174 insertions, 169 deletions
diff --git a/storage/maria/ma_rt_index.c b/storage/maria/ma_rt_index.c
index 4980233fc11..2530ae86a5c 100644
--- a/storage/maria/ma_rt_index.c
+++ b/storage/maria/ma_rt_index.c
@@ -60,48 +60,48 @@ static int maria_rtree_find_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
int res;
uchar *page_buf, *k, *last;
int k_len;
- uint *saved_key = (uint*) (info->maria_rtree_recursion_state) + level;
+ uint *saved_key= (uint*) (info->maria_rtree_recursion_state) + level;
- if (!(page_buf = (uchar*) my_alloca((uint)keyinfo->block_length)))
+ if (!(page_buf= (uchar*) my_alloca((uint)keyinfo->block_length)))
{
- my_errno = HA_ERR_OUT_OF_MEM;
+ my_errno= HA_ERR_OUT_OF_MEM;
return -1;
}
if (!_ma_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
goto err1;
- nod_flag = _ma_test_if_nod(page_buf);
+ nod_flag= _ma_test_if_nod(info, page_buf);
- k_len = keyinfo->keylength - info->s->base.rec_reflength;
+ k_len= keyinfo->keylength - info->s->base.rec_reflength;
- if(info->maria_rtree_recursion_depth >= level)
+ if (info->maria_rtree_recursion_depth >= level)
{
k= page_buf + *saved_key;
}
else
{
- k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
+ k= rt_PAGE_FIRST_KEY(info, page_buf, nod_flag);
}
- last= rt_PAGE_END(page_buf);
+ last= rt_PAGE_END(info, page_buf);
- for (; k < last; k = rt_PAGE_NEXT_KEY(k, k_len, nod_flag))
+ for (; k < last; k= rt_PAGE_NEXT_KEY(k, k_len, nod_flag))
{
if (nod_flag)
{
/* this is an internal node in the tree */
- if (!(res = maria_rtree_key_cmp(keyinfo->seg,
+ if (!(res= maria_rtree_key_cmp(keyinfo->seg,
info->first_mbr_key, k,
info->last_rkey_length, nod_cmp_flag)))
{
- switch ((res = maria_rtree_find_req(info, keyinfo, search_flag,
+ switch ((res= maria_rtree_find_req(info, keyinfo, search_flag,
nod_cmp_flag,
_ma_kpos(nod_flag, k),
level + 1)))
{
case 0: /* found - exit from recursion */
- *saved_key = k - page_buf;
+ *saved_key= k - page_buf;
goto ok;
case 1: /* not found - continue searching */
- info->maria_rtree_recursion_depth = level;
+ info->maria_rtree_recursion_depth= level;
break;
default: /* error */
case -1:
@@ -115,33 +115,33 @@ static int maria_rtree_find_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
if (!maria_rtree_key_cmp(keyinfo->seg, info->first_mbr_key,
k, info->last_rkey_length, search_flag))
{
- uchar *after_key = (uchar*) rt_PAGE_NEXT_KEY(k, k_len, nod_flag);
- info->cur_row.lastpos = _ma_dpos(info, 0, after_key);
- info->lastkey_length = k_len + info->s->base.rec_reflength;
+ uchar *after_key= (uchar*) rt_PAGE_NEXT_KEY(k, k_len, nod_flag);
+ info->cur_row.lastpos= _ma_dpos(info, 0, after_key);
+ info->lastkey_length= k_len + info->s->base.rec_reflength;
memcpy(info->lastkey, k, info->lastkey_length);
- info->maria_rtree_recursion_depth = level;
- *saved_key = last - page_buf;
+ info->maria_rtree_recursion_depth= level;
+ *saved_key= last - page_buf;
if (after_key < last)
{
- info->int_keypos = info->buff;
- info->int_maxpos = info->buff + (last - after_key);
+ info->int_keypos= info->buff;
+ info->int_maxpos= info->buff + (last - after_key);
memcpy(info->buff, after_key, last - after_key);
- info->keyread_buff_used = 0;
+ info->keyread_buff_used= 0;
}
else
{
- info->keyread_buff_used = 1;
+ info->keyread_buff_used= 1;
}
- res = 0;
+ res= 0;
goto ok;
}
}
}
- info->cur_row.lastpos = HA_OFFSET_ERROR;
- my_errno = HA_ERR_KEY_NOT_FOUND;
- res = 1;
+ info->cur_row.lastpos= HA_OFFSET_ERROR;
+ my_errno= HA_ERR_KEY_NOT_FOUND;
+ res= 1;
ok:
my_afree((uchar*)page_buf);
@@ -149,7 +149,7 @@ ok:
err1:
my_afree((uchar*)page_buf);
- info->cur_row.lastpos = HA_OFFSET_ERROR;
+ info->cur_row.lastpos= HA_OFFSET_ERROR;
return -1;
}
@@ -176,9 +176,9 @@ int maria_rtree_find_first(MARIA_HA *info, uint keynr, uchar *key,
{
my_off_t root;
uint nod_cmp_flag;
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
- if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
my_errno= HA_ERR_END_OF_FILE;
return -1;
@@ -190,10 +190,10 @@ int maria_rtree_find_first(MARIA_HA *info, uint keynr, uchar *key,
(minimum bounding rectangle)
*/
memcpy(info->first_mbr_key, key, keyinfo->keylength);
- info->last_rkey_length = key_length;
+ info->last_rkey_length= key_length;
- info->maria_rtree_recursion_depth = -1;
- info->keyread_buff_used = 1;
+ info->maria_rtree_recursion_depth= -1;
+ info->keyread_buff_used= 1;
nod_cmp_flag= ((search_flag & (MBR_EQUAL | MBR_WITHIN)) ?
MBR_WITHIN : MBR_INTERSECT);
@@ -221,7 +221,7 @@ int maria_rtree_find_next(MARIA_HA *info, uint keynr, uint search_flag)
{
my_off_t root;
uint nod_cmp_flag;
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
if (info->update & HA_STATE_DELETED)
return maria_rtree_find_first(info, keynr, info->lastkey,
@@ -252,13 +252,13 @@ int maria_rtree_find_next(MARIA_HA *info, uint keynr, uint search_flag)
key+= keyinfo->keylength;
}
}
- if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
my_errno= HA_ERR_END_OF_FILE;
return -1;
}
- nod_cmp_flag = ((search_flag & (MBR_EQUAL | MBR_WITHIN)) ?
+ nod_cmp_flag= ((search_flag & (MBR_EQUAL | MBR_WITHIN)) ?
MBR_WITHIN : MBR_INTERSECT);
return maria_rtree_find_req(info, keyinfo, search_flag, nod_cmp_flag, root, 0);
}
@@ -276,8 +276,8 @@ int maria_rtree_find_next(MARIA_HA *info, uint keynr, uint search_flag)
1 Not found
*/
-static int maria_rtree_get_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo, uint key_length,
- my_off_t page, int level)
+static int maria_rtree_get_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
+ uint key_length, my_off_t page, int level)
{
uchar *page_buf, *last, *k;
uint nod_flag, k_len;
@@ -288,39 +288,39 @@ static int maria_rtree_get_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo, uint key_l
return -1;
if (!_ma_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
goto err1;
- nod_flag = _ma_test_if_nod(page_buf);
+ nod_flag= _ma_test_if_nod(info, page_buf);
- k_len = keyinfo->keylength - info->s->base.rec_reflength;
+ k_len= keyinfo->keylength - info->s->base.rec_reflength;
if(info->maria_rtree_recursion_depth >= level)
{
- k = page_buf + *saved_key;
+ k= page_buf + *saved_key;
if (!nod_flag)
{
/* Only leaf pages contain data references. */
/* Need to check next key with data reference. */
- k = rt_PAGE_NEXT_KEY(k, k_len, nod_flag);
+ k= rt_PAGE_NEXT_KEY(k, k_len, nod_flag);
}
}
else
{
- k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
+ k= rt_PAGE_FIRST_KEY(info, page_buf, nod_flag);
}
- last = rt_PAGE_END(page_buf);
+ last= rt_PAGE_END(info, page_buf);
- for (; k < last; k = rt_PAGE_NEXT_KEY(k, k_len, nod_flag))
+ for (; k < last; k= rt_PAGE_NEXT_KEY(k, k_len, nod_flag))
{
if (nod_flag)
{
/* this is an internal node in the tree */
- switch ((res = maria_rtree_get_req(info, keyinfo, key_length,
+ switch ((res= maria_rtree_get_req(info, keyinfo, key_length,
_ma_kpos(nod_flag, k), level + 1)))
{
case 0: /* found - exit from recursion */
- *saved_key = k - page_buf;
+ *saved_key= k - page_buf;
goto ok;
case 1: /* not found - continue searching */
- info->maria_rtree_recursion_depth = level;
+ info->maria_rtree_recursion_depth= level;
break;
default:
case -1: /* error */
@@ -330,33 +330,33 @@ static int maria_rtree_get_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo, uint key_l
else
{
/* this is a leaf */
- uchar *after_key = rt_PAGE_NEXT_KEY(k, k_len, nod_flag);
- info->cur_row.lastpos = _ma_dpos(info, 0, after_key);
- info->lastkey_length = k_len + info->s->base.rec_reflength;
+ uchar *after_key= rt_PAGE_NEXT_KEY(k, k_len, nod_flag);
+ info->cur_row.lastpos= _ma_dpos(info, 0, after_key);
+ info->lastkey_length= k_len + info->s->base.rec_reflength;
memcpy(info->lastkey, k, info->lastkey_length);
- info->maria_rtree_recursion_depth = level;
- *saved_key = k - page_buf;
+ info->maria_rtree_recursion_depth= level;
+ *saved_key= k - page_buf;
if (after_key < last)
{
- info->int_keypos = (uchar*) saved_key;
+ info->int_keypos= (uchar*) saved_key;
memcpy(info->buff, page_buf, keyinfo->block_length);
- info->int_maxpos = rt_PAGE_END(info->buff);
- info->keyread_buff_used = 0;
+ info->int_maxpos= rt_PAGE_END(info, info->buff);
+ info->keyread_buff_used= 0;
}
else
{
- info->keyread_buff_used = 1;
+ info->keyread_buff_used= 1;
}
- res = 0;
+ res= 0;
goto ok;
}
}
- info->cur_row.lastpos = HA_OFFSET_ERROR;
- my_errno = HA_ERR_KEY_NOT_FOUND;
- res = 1;
+ info->cur_row.lastpos= HA_OFFSET_ERROR;
+ my_errno= HA_ERR_KEY_NOT_FOUND;
+ res= 1;
ok:
my_afree((uchar*)page_buf);
@@ -364,7 +364,7 @@ ok:
err1:
my_afree((uchar*)page_buf);
- info->cur_row.lastpos = HA_OFFSET_ERROR;
+ info->cur_row.lastpos= HA_OFFSET_ERROR;
return -1;
}
@@ -381,16 +381,16 @@ err1:
int maria_rtree_get_first(MARIA_HA *info, uint keynr, uint key_length)
{
my_off_t root;
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
- if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
my_errno= HA_ERR_END_OF_FILE;
return -1;
}
- info->maria_rtree_recursion_depth = -1;
- info->keyread_buff_used = 1;
+ info->maria_rtree_recursion_depth= -1;
+ info->keyread_buff_used= 1;
return maria_rtree_get_req(info, &keyinfo[keynr], key_length, root, 0);
}
@@ -408,32 +408,32 @@ int maria_rtree_get_first(MARIA_HA *info, uint keynr, uint key_length)
int maria_rtree_get_next(MARIA_HA *info, uint keynr, uint key_length)
{
my_off_t root;
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
if (!info->keyread_buff_used)
{
- uint k_len = keyinfo->keylength - info->s->base.rec_reflength;
+ uint k_len= keyinfo->keylength - info->s->base.rec_reflength;
/* rt_PAGE_NEXT_KEY(info->int_keypos) */
- uchar *key = info->buff + *(int*)info->int_keypos + k_len +
+ uchar *key= info->buff + *(int*)info->int_keypos + k_len +
info->s->base.rec_reflength;
/* rt_PAGE_NEXT_KEY(key) */
- uchar *after_key = key + k_len + info->s->base.rec_reflength;
+ uchar *after_key= key + k_len + info->s->base.rec_reflength;
- info->cur_row.lastpos = _ma_dpos(info, 0, after_key);
- info->lastkey_length = k_len + info->s->base.rec_reflength;
+ info->cur_row.lastpos= _ma_dpos(info, 0, after_key);
+ info->lastkey_length= k_len + info->s->base.rec_reflength;
memcpy(info->lastkey, key, k_len + info->s->base.rec_reflength);
- *(int*)info->int_keypos = key - info->buff;
+ *(int*)info->int_keypos= key - info->buff;
if (after_key >= info->int_maxpos)
{
- info->keyread_buff_used = 1;
+ info->keyread_buff_used= 1;
}
return 0;
}
else
{
- if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
my_errno= HA_ERR_END_OF_FILE;
return -1;
@@ -455,27 +455,27 @@ static uchar *maria_rtree_pick_key(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
uint nod_flag)
{
double increase;
- double best_incr = DBL_MAX;
+ double best_incr= DBL_MAX;
double perimeter;
double best_perimeter;
uchar *best_key;
- uchar *k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
- uchar *last = rt_PAGE_END(page_buf);
+ uchar *k= rt_PAGE_FIRST_KEY(page_buf, nod_flag);
+ uchar *last= rt_PAGE_END(info, page_buf);
LINT_INIT(best_perimeter);
LINT_INIT(best_key);
- for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
+ for (; k < last; k= rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
{
- if ((increase = maria_rtree_perimeter_increase(keyinfo->seg, k, key, key_length,
+ if ((increase= maria_rtree_perimeter_increase(keyinfo->seg, k, key, key_length,
&perimeter)) == -1)
return NULL;
if ((increase < best_incr)||
(increase == best_incr && perimeter < best_perimeter))
{
- best_key = k;
+ best_key= k;
best_perimeter= perimeter;
- best_incr = increase;
+ best_incr= increase;
}
}
return best_key;
@@ -490,37 +490,37 @@ static uchar *maria_rtree_pick_key(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
uint nod_flag)
{
double increase;
- double best_incr = DBL_MAX;
+ double best_incr= DBL_MAX;
double area;
double best_area;
uchar *best_key;
- uchar *k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
- uchar *last = rt_PAGE_END(page_buf);
+ uchar *k= rt_PAGE_FIRST_KEY(info, page_buf, nod_flag);
+ uchar *last= rt_PAGE_END(info, page_buf);
LINT_INIT(best_area);
LINT_INIT(best_key);
- for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
+ for (; k < last; k= rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
{
/* The following is safe as -1.0 is an exact number */
- if ((increase = maria_rtree_area_increase(keyinfo->seg, k, key, key_length,
+ if ((increase= maria_rtree_area_increase(keyinfo->seg, k, key, key_length,
&area)) == -1.0)
return NULL;
/* The following should be safe, even if we compare doubles */
if (increase < best_incr)
{
- best_key = k;
- best_area = area;
- best_incr = increase;
+ 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;
+ best_key= k;
+ best_area= area;
+ best_incr= increase;
}
}
}
@@ -552,22 +552,22 @@ static int maria_rtree_insert_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
if (!(page_buf= (uchar*) my_alloca((uint)keyinfo->block_length +
HA_MAX_KEY_BUFF)))
{
- my_errno = HA_ERR_OUT_OF_MEM;
+ my_errno= HA_ERR_OUT_OF_MEM;
DBUG_RETURN(-1); /* purecov: inspected */
}
if (!_ma_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
goto err1;
- nod_flag = _ma_test_if_nod(page_buf);
+ nod_flag= _ma_test_if_nod(info, page_buf);
DBUG_PRINT("rtree", ("page: %lu level: %d ins_level: %d nod_flag: %u",
(ulong) page, level, ins_level, nod_flag));
if ((ins_level == -1 && nod_flag) || /* key: go down to leaf */
(ins_level > -1 && ins_level > level)) /* branch: go down to ins_level */
{
- if ((k = maria_rtree_pick_key(info, keyinfo, key, key_length, page_buf,
+ if ((k= maria_rtree_pick_key(info, keyinfo, key, key_length, page_buf,
nod_flag)) == NULL)
goto err1;
- switch ((res = maria_rtree_insert_req(info, keyinfo, key, key_length,
+ switch ((res= maria_rtree_insert_req(info, keyinfo, key, key_length,
_ma_kpos(nod_flag, k), new_page,
ins_level, level + 1)))
{
@@ -580,7 +580,7 @@ static int maria_rtree_insert_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
}
case 1: /* child was split */
{
- uchar *new_key = page_buf + keyinfo->block_length + nod_flag;
+ uchar *new_key= page_buf + keyinfo->block_length + nod_flag;
/* set proper MBR for key */
if (maria_rtree_set_key_mbr(info, keyinfo, k, key_length,
_ma_kpos(nod_flag, k)))
@@ -590,8 +590,8 @@ static int maria_rtree_insert_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
if (maria_rtree_set_key_mbr(info, keyinfo, new_key, key_length,
*new_page))
goto err1;
- res = maria_rtree_add_key(info, keyinfo, new_key, key_length,
- page_buf, new_page);
+ res= maria_rtree_add_key(info, keyinfo, new_key, key_length,
+ page_buf, new_page);
if (_ma_write_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf))
goto err1;
goto ok;
@@ -605,7 +605,7 @@ static int maria_rtree_insert_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
}
else
{
- res = maria_rtree_add_key(info, keyinfo, key, key_length, page_buf,
+ res= maria_rtree_add_key(info, keyinfo, key, key_length, page_buf,
new_page);
if (_ma_write_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf))
goto err1;
@@ -634,26 +634,27 @@ static int maria_rtree_insert_level(MARIA_HA *info, uint keynr, uchar *key,
uint key_length, int ins_level)
{
my_off_t old_root;
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
int res;
my_off_t new_page;
DBUG_ENTER("maria_rtree_insert_level");
- if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((old_root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
- if ((old_root = _ma_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
+ if ((old_root= _ma_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
DBUG_RETURN(-1);
- info->keyread_buff_used = 1;
- maria_putint(info->buff, 2, 0);
- res = maria_rtree_add_key(info, keyinfo, key, key_length, info->buff, NULL);
+ info->keyread_buff_used= 1;
+ _ma_store_page_used(info, info->buff, info->s->keypage_header, 0);
+ res= maria_rtree_add_key(info, keyinfo, key, key_length, info->buff,
+ NULL);
if (_ma_write_keypage(info, keyinfo, old_root, DFLT_INIT_HITS, info->buff))
DBUG_RETURN(1);
- info->s->state.key_root[keynr] = old_root;
+ info->s->state.key_root[keynr]= old_root;
DBUG_RETURN(res);
}
- switch ((res = maria_rtree_insert_req(info, keyinfo, key, key_length,
- old_root, &new_page, ins_level, 0)))
+ switch ((res= maria_rtree_insert_req(info, keyinfo, key, key_length,
+ old_root, &new_page, ins_level, 0)))
{
case 0: /* root was not split */
{
@@ -663,22 +664,23 @@ static int maria_rtree_insert_level(MARIA_HA *info, uint keynr, uchar *key,
{
uchar *new_root_buf, *new_key;
my_off_t new_root;
- uint nod_flag = info->s->base.key_reflength;
+ uint nod_flag= info->s->base.key_reflength;
DBUG_PRINT("rtree", ("root was split, grow a new root"));
if (!(new_root_buf= (uchar*) my_alloca((uint)keyinfo->block_length +
HA_MAX_KEY_BUFF)))
{
- my_errno = HA_ERR_OUT_OF_MEM;
+ my_errno= HA_ERR_OUT_OF_MEM;
DBUG_RETURN(-1); /* purecov: inspected */
}
- maria_putint(new_root_buf, 2, nod_flag);
- if ((new_root = _ma_new(info, keyinfo, DFLT_INIT_HITS)) ==
+ _ma_store_page_used(info, new_root_buf, info->s->keypage_header,
+ nod_flag);
+ if ((new_root= _ma_new(info, keyinfo, DFLT_INIT_HITS)) ==
HA_OFFSET_ERROR)
goto err1;
- new_key = new_root_buf + keyinfo->block_length + nod_flag;
+ new_key= new_root_buf + keyinfo->block_length + nod_flag;
_ma_kpointer(info, new_key - nod_flag, old_root);
if (maria_rtree_set_key_mbr(info, keyinfo, new_key, key_length,
@@ -699,10 +701,10 @@ static int maria_rtree_insert_level(MARIA_HA *info, uint keynr, uchar *key,
if (_ma_write_keypage(info, keyinfo, new_root,
DFLT_INIT_HITS, new_root_buf))
goto err1;
- info->s->state.key_root[keynr] = new_root;
+ info->s->state.key_root[keynr]= new_root;
DBUG_PRINT("rtree", ("new root page: %lu level: %d nod_flag: %u",
(ulong) new_root, 0,
- _ma_test_if_nod(new_root_buf)));
+ _ma_test_if_nod(info, new_root_buf)));
my_afree((uchar*)new_root_buf);
break;
@@ -753,13 +755,13 @@ static int maria_rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t pag
if (ReinsertList->n_pages == ReinsertList->m_pages)
{
ReinsertList->m_pages += REINSERT_BUFFER_INC;
- if (!(ReinsertList->pages = (stPageLevel*)my_realloc((uchar*)ReinsertList->pages,
+ if (!(ReinsertList->pages= (stPageLevel*)my_realloc((uchar*)ReinsertList->pages,
ReinsertList->m_pages * sizeof(stPageLevel), MYF(MY_ALLOW_ZERO_PTR))))
goto err1;
}
/* save page to ReinsertList */
- ReinsertList->pages[ReinsertList->n_pages].offs = page;
- ReinsertList->pages[ReinsertList->n_pages].level = level;
+ ReinsertList->pages[ReinsertList->n_pages].offs= page;
+ ReinsertList->pages[ReinsertList->n_pages].level= level;
ReinsertList->n_pages++;
DBUG_RETURN(0);
@@ -790,28 +792,28 @@ static int maria_rtree_delete_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
uchar *page_buf, *last, *k;
DBUG_ENTER("maria_rtree_delete_req");
- if (!(page_buf = (uchar*) my_alloca((uint)keyinfo->block_length)))
+ if (!(page_buf= (uchar*) my_alloca((uint)keyinfo->block_length)))
{
- my_errno = HA_ERR_OUT_OF_MEM;
+ my_errno= HA_ERR_OUT_OF_MEM;
DBUG_RETURN(-1); /* purecov: inspected */
}
if (!_ma_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
goto err1;
- nod_flag = _ma_test_if_nod(page_buf);
+ nod_flag= _ma_test_if_nod(info, page_buf);
DBUG_PRINT("rtree", ("page: %lu level: %d nod_flag: %u",
(ulong) page, level, nod_flag));
- k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
- last = rt_PAGE_END(page_buf);
+ k= rt_PAGE_FIRST_KEY(info, page_buf, nod_flag);
+ last= rt_PAGE_END(info, page_buf);
- for (i = 0; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag), i++)
+ for (i= 0; k < last; k= rt_PAGE_NEXT_KEY(k, key_length, nod_flag), i++)
{
if (nod_flag)
{
/* not leaf */
if (!maria_rtree_key_cmp(keyinfo->seg, key, k, key_length, MBR_WITHIN))
{
- switch ((res = maria_rtree_delete_req(info, keyinfo, key, key_length,
+ switch ((res= maria_rtree_delete_req(info, keyinfo, key, key_length,
_ma_kpos(nod_flag, k), page_size, ReinsertList, level + 1)))
{
case 0: /* deleted */
@@ -853,7 +855,7 @@ static int maria_rtree_delete_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
if (_ma_write_keypage(info, keyinfo, page,
DFLT_INIT_HITS, page_buf))
goto err1;
- *page_size = maria_data_on_page(page_buf);
+ *page_size= _ma_get_page_used(info, page_buf);
}
goto ok;
@@ -868,8 +870,8 @@ static int maria_rtree_delete_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
if (_ma_write_keypage(info, keyinfo, page,
DFLT_INIT_HITS, page_buf))
goto err1;
- *page_size = maria_data_on_page(page_buf);
- res = 0;
+ *page_size= _ma_get_page_used(info, page_buf);
+ res= 0;
goto ok;
}
default: /* error */
@@ -883,20 +885,21 @@ static int maria_rtree_delete_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
else
{
/* leaf */
- if (!maria_rtree_key_cmp(keyinfo->seg, key, k, key_length, MBR_EQUAL | MBR_DATA))
+ if (!maria_rtree_key_cmp(keyinfo->seg, key, k, key_length,
+ MBR_EQUAL | MBR_DATA))
{
maria_rtree_delete_key(info, page_buf, k, key_length, nod_flag);
- *page_size = maria_data_on_page(page_buf);
- if (*page_size == 2)
+ *page_size= _ma_get_page_used(info, page_buf);
+ if (*page_size == info->s->keypage_header)
{
/* last key in the leaf */
- res = 2;
+ res= 2;
if (_ma_dispose(info, keyinfo, page, DFLT_INIT_HITS))
goto err1;
}
else
{
- res = 0;
+ res= 0;
if (_ma_write_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf))
goto err1;
}
@@ -904,7 +907,7 @@ static int maria_rtree_delete_req(MARIA_HA *info, MARIA_KEYDEF *keyinfo,
}
}
}
- res = 1;
+ res= 1;
ok:
my_afree((uchar*)page_buf);
@@ -929,10 +932,10 @@ int maria_rtree_delete(MARIA_HA *info, uint keynr, uchar *key, uint key_length)
uint page_size;
stPageList ReinsertList;
my_off_t old_root;
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
DBUG_ENTER("maria_rtree_delete");
- if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((old_root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
my_errno= HA_ERR_END_OF_FILE;
DBUG_RETURN(-1); /* purecov: inspected */
@@ -940,43 +943,43 @@ int maria_rtree_delete(MARIA_HA *info, uint keynr, uchar *key, uint key_length)
DBUG_PRINT("rtree", ("starting deletion at root page: %lu",
(ulong) old_root));
- ReinsertList.pages = NULL;
- ReinsertList.n_pages = 0;
- ReinsertList.m_pages = 0;
+ ReinsertList.pages= NULL;
+ ReinsertList.n_pages= 0;
+ ReinsertList.m_pages= 0;
switch (maria_rtree_delete_req(info, keyinfo, key, key_length, old_root,
&page_size, &ReinsertList, 0))
{
case 2: /* empty */
{
- info->s->state.key_root[keynr] = HA_OFFSET_ERROR;
+ info->s->state.key_root[keynr]= HA_OFFSET_ERROR;
DBUG_RETURN(0);
}
case 0: /* deleted */
{
uint nod_flag;
ulong i;
- for (i = 0; i < ReinsertList.n_pages; ++i)
+ for (i= 0; i < ReinsertList.n_pages; ++i)
{
uchar *page_buf, *k, *last;
- if (!(page_buf = (uchar*) my_alloca((uint)keyinfo->block_length)))
+ if (!(page_buf= (uchar*) my_alloca((uint)keyinfo->block_length)))
{
- my_errno = HA_ERR_OUT_OF_MEM;
+ my_errno= HA_ERR_OUT_OF_MEM;
goto err1;
}
if (!_ma_fetch_keypage(info, keyinfo, ReinsertList.pages[i].offs,
DFLT_INIT_HITS, page_buf, 0))
goto err1;
- nod_flag = _ma_test_if_nod(page_buf);
+ nod_flag= _ma_test_if_nod(info, page_buf);
DBUG_PRINT("rtree", ("reinserting keys from "
"page: %lu level: %d nod_flag: %u",
(ulong) ReinsertList.pages[i].offs,
ReinsertList.pages[i].level, nod_flag));
- k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
- last = rt_PAGE_END(page_buf);
- for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
+ k= rt_PAGE_FIRST_KEY(info, page_buf, nod_flag);
+ last= rt_PAGE_END(info, page_buf);
+ for (; k < last; k= rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
{
int res;
if ((res=
@@ -1008,20 +1011,22 @@ int maria_rtree_delete(MARIA_HA *info, uint keynr, uchar *key, uint key_length)
my_free((uchar*) ReinsertList.pages, MYF(0));
/* check for redundant root (not leaf, 1 child) and eliminate */
- if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((old_root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
goto err1;
if (!_ma_fetch_keypage(info, keyinfo, old_root, DFLT_INIT_HITS,
info->buff, 0))
goto err1;
- nod_flag = _ma_test_if_nod(info->buff);
- page_size = maria_data_on_page(info->buff);
- if (nod_flag && (page_size == 2 + key_length + nod_flag))
+ nod_flag= _ma_test_if_nod(info, info->buff);
+ page_size= _ma_get_page_used(info, info->buff);
+ if (nod_flag && (page_size == info->s->keypage_header + key_length +
+ nod_flag))
{
- my_off_t new_root = _ma_kpos(nod_flag,
- rt_PAGE_FIRST_KEY(info->buff, nod_flag));
+ my_off_t new_root= _ma_kpos(nod_flag,
+ rt_PAGE_FIRST_KEY(info, info->buff,
+ nod_flag));
if (_ma_dispose(info, keyinfo, old_root, DFLT_INIT_HITS))
goto err1;
- info->s->state.key_root[keynr] = new_root;
+ info->s->state.key_root[keynr]= new_root;
}
info->update= HA_STATE_DELETED;
DBUG_RETURN(0);
@@ -1031,7 +1036,7 @@ err1:
}
case 1: /* not found */
{
- my_errno = HA_ERR_KEY_NOT_FOUND;
+ my_errno= HA_ERR_KEY_NOT_FOUND;
DBUG_RETURN(-1); /* purecov: inspected */
}
default:
@@ -1051,35 +1056,35 @@ err1:
ha_rows maria_rtree_estimate(MARIA_HA *info, uint keynr, uchar *key,
uint key_length, uint flag)
{
- MARIA_KEYDEF *keyinfo = info->s->keyinfo + keynr;
+ MARIA_KEYDEF *keyinfo= info->s->keyinfo + keynr;
my_off_t root;
- uint i = 0;
+ uint i= 0;
uint nod_flag, k_len;
uchar *page_buf, *k, *last;
- double area = 0;
- ha_rows res = 0;
+ double area= 0;
+ ha_rows res= 0;
if (flag & MBR_DISJOINT)
return info->state->records;
- if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
+ if ((root= info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
return HA_POS_ERROR;
if (!(page_buf= (uchar*) my_alloca((uint)keyinfo->block_length)))
return HA_POS_ERROR;
if (!_ma_fetch_keypage(info, keyinfo, root, DFLT_INIT_HITS, page_buf, 0))
goto err1;
- nod_flag = _ma_test_if_nod(page_buf);
+ nod_flag= _ma_test_if_nod(info, page_buf);
- k_len = keyinfo->keylength - info->s->base.rec_reflength;
+ k_len= keyinfo->keylength - info->s->base.rec_reflength;
- k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
- last = rt_PAGE_END(page_buf);
+ k= rt_PAGE_FIRST_KEY(info, page_buf, nod_flag);
+ last= rt_PAGE_END(info, page_buf);
- for (; k < last; k = rt_PAGE_NEXT_KEY(k, k_len, nod_flag), i++)
+ for (; k < last; k= rt_PAGE_NEXT_KEY(k, k_len, nod_flag), i++)
{
if (nod_flag)
{
- double k_area = maria_rtree_rect_volume(keyinfo->seg, k, key_length);
+ double k_area= maria_rtree_rect_volume(keyinfo->seg, k, key_length);
/* The following should be safe, even if we compare doubles */
if (k_area == 0)
@@ -1124,9 +1129,9 @@ ha_rows maria_rtree_estimate(MARIA_HA *info, uint keynr, uchar *key,
if (nod_flag)
{
if (i)
- res = (ha_rows) (area / i * info->state->records);
+ res= (ha_rows) (area / i * info->state->records);
else
- res = HA_POS_ERROR;
+ res= HA_POS_ERROR;
}
my_afree((uchar*)page_buf);