mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fixes and code cleanups after merge with 4.0.3
Warning handling and initial prepared statement handling (last not complete yet) Changed a lot of functions that returned 0/1 to my_bool type. GRANT handling now uses read/write locks instead of mutex Change basic net functions to use THD instead of NET (needed for 4.1 protocol) Use my_sprintf instead of sprintf() + strlen() Added alloc_query() to be able to chare query initialization code with prepared statements. Cleanup handling of SHOW COUNT(*) WARNINGS and SELECT LAST_INSERT_ID() Note that the following test fails (will be fixed ASAP): sub_select, union, rpl_rotate_logs and rpl_mystery22
This commit is contained in:
@ -1,5 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB & Ramil Kalimullin & MySQL Finland AB
|
||||
& TCX DataKonsult AB
|
||||
/* Copyright (C) 2000 MySQL AB & Ramil Kalimullin
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -22,14 +21,16 @@
|
||||
#include "rt_mbr.h"
|
||||
|
||||
/*
|
||||
Add key to the page
|
||||
Result values:
|
||||
-1 - error
|
||||
0 - not split
|
||||
1 - split
|
||||
Add key to the page
|
||||
|
||||
RESULT VALUES
|
||||
-1 Error
|
||||
0 Not split
|
||||
1 Split
|
||||
*/
|
||||
|
||||
int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
uint key_length, uchar *page_buf, my_off_t *new_page)
|
||||
uint key_length, uchar *page_buf, my_off_t *new_page)
|
||||
{
|
||||
uint page_size = mi_getint(page_buf);
|
||||
uint nod_flag = mi_test_if_nod(page_buf);
|
||||
@ -53,47 +54,39 @@ int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
mi_putint(page_buf, page_size, nod_flag);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rtree_split_page(info, keyinfo, page_buf, key, key_length, new_page))
|
||||
return -1;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
return (rtree_split_page(info, keyinfo, page_buf, key, key_length,
|
||||
new_page) ? -1 : 0);
|
||||
}
|
||||
|
||||
/*
|
||||
Delete key from the page
|
||||
Delete key from the page
|
||||
*/
|
||||
int rtree_delete_key(MI_INFO *info, uchar *page_buf, uchar *key,
|
||||
uint key_length, uint nod_flag)
|
||||
uint key_length, uint nod_flag)
|
||||
{
|
||||
uint16 page_size = mi_getint(page_buf);
|
||||
uchar *key_start;
|
||||
|
||||
key_start= key - nod_flag;
|
||||
if (nod_flag)
|
||||
{
|
||||
key_start = key - nod_flag;
|
||||
}
|
||||
else
|
||||
{
|
||||
key_start = key;
|
||||
key_length += info->s->base.rec_reflength;
|
||||
}
|
||||
memmove(key_start, key + key_length, page_size - key_length -
|
||||
(key - page_buf));
|
||||
page_size -= key_length + nod_flag;
|
||||
|
||||
memmove(key_start, key + key_length, page_size - key_length -
|
||||
(key - page_buf));
|
||||
page_size-= key_length + nod_flag;
|
||||
|
||||
mi_putint(page_buf, page_size, nod_flag);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Calculate and store key MBR
|
||||
Calculate and store key MBR
|
||||
*/
|
||||
|
||||
int rtree_set_key_mbr(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
uint key_length, my_off_t child_page)
|
||||
uint key_length, my_off_t child_page)
|
||||
{
|
||||
uchar *k;
|
||||
uchar *last;
|
||||
@ -114,21 +107,25 @@ err1:
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Choose non-leaf better key for insertion
|
||||
Choose non-leaf better key for insertion
|
||||
*/
|
||||
|
||||
uchar *rtree_choose_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
uint key_length, uchar *page_buf, uint nod_flag)
|
||||
uint key_length, uchar *page_buf, uint nod_flag)
|
||||
{
|
||||
double increase;
|
||||
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);
|
||||
|
||||
LINT_INIT(best_area);
|
||||
LINT_INIT(best_key);
|
||||
|
||||
for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
|
||||
{
|
||||
if ((increase = rtree_area_increase(keyinfo->seg, key, k, key_length,
|
||||
|
Reference in New Issue
Block a user