1
0
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:
monty@mashka.mysql.fi
2002-10-02 13:33:08 +03:00
parent 7134ffec21
commit d69250a969
108 changed files with 3054 additions and 2944 deletions

View File

@ -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,