mirror of
https://github.com/MariaDB/server.git
synced 2026-05-10 17:14:30 +02:00
Merge with 4.0.13
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union BUILD/SETUP.sh: Auto merged BitKeeper/deleted/.del-libmysql.def~29fc6d70335f1c4c: Auto merged Makefile.am: Auto merged acinclude.m4: Auto merged BitKeeper/triggers/post-commit: Auto merged Build-tools/Do-compile: Auto merged VC++Files/libmysql/libmysql.dsp: Auto merged VC++Files/mysql.dsw: Auto merged client/mysql.cc: Auto merged client/mysqlbinlog.cc: Auto merged client/mysqldump.c: Auto merged include/config-win.h: Auto merged include/my_base.h: Auto merged include/my_global.h: Auto merged include/my_pthread.h: Auto merged include/my_sys.h: Auto merged include/violite.h: Auto merged innobase/buf/buf0flu.c: Auto merged innobase/buf/buf0lru.c: Auto merged innobase/include/buf0buf.h: Auto merged innobase/include/buf0lru.h: Auto merged innobase/include/row0mysql.h: Auto merged innobase/include/srv0srv.h: Auto merged innobase/lock/lock0lock.c: Auto merged innobase/log/log0log.c: Auto merged innobase/log/log0recv.c: Auto merged innobase/os/os0file.c: Auto merged innobase/row/row0mysql.c: Auto merged innobase/row/row0sel.c: Auto merged innobase/srv/srv0srv.c: Auto merged innobase/srv/srv0start.c: Auto merged innobase/trx/trx0sys.c: Auto merged innobase/trx/trx0trx.c: Auto merged innobase/ut/ut0ut.c: Auto merged myisam/ft_boolean_search.c: Auto merged myisam/mi_check.c: Auto merged myisam/mi_key.c: Auto merged myisam/mi_open.c: Auto merged myisam/mi_range.c: Auto merged myisam/mi_search.c: Auto merged myisam/sort.c: Auto merged mysql-test/r/delete.result: Auto merged mysql-test/r/fulltext.result: Auto merged mysql-test/r/innodb_handler.result: Auto merged mysql-test/r/join.result: Auto merged mysql-test/r/join_outer.result: Auto merged mysql-test/r/key.result: Auto merged mysql-test/r/multi_update.result: Auto merged mysql-test/r/myisam.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/r/variables.result: Auto merged mysql-test/t/alter_table.test: Auto merged mysql-test/t/ctype_latin1_de.test: Auto merged mysql-test/t/delete.test: Auto merged mysql-test/t/fulltext.test: Auto merged mysql-test/t/innodb_handler.test: Auto merged mysql-test/t/join.test: Auto merged mysql-test/t/join_outer.test: Auto merged mysql-test/t/key.test: Auto merged mysql-test/t/multi_update.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/query_cache.test: Auto merged mysql-test/t/repair.test: Auto merged mysql-test/t/select_safe.test: Auto merged mysql-test/t/type_decimal.test: Auto merged mysql-test/t/variables.test: Auto merged mysys/default.c: Auto merged mysys/my_pthread.c: Auto merged scripts/mysql_fix_privilege_tables.sh: Auto merged scripts/mysqld_safe.sh: Auto merged sql/ha_heap.h: Auto merged sql/ha_innodb.h: Auto merged sql/ha_myisam.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/init.cc: Auto merged sql/item.cc: Auto merged sql/item_create.cc: Auto merged sql/item_strfunc.cc: Auto merged sql/item_sum.cc: Auto merged sql/mini_client.cc: Auto merged sql/net_serv.cc: Auto merged sql/opt_range.cc: Auto merged sql/records.cc: Auto merged sql/slave.cc: Auto merged sql/sql_acl.h: Auto merged sql/sql_analyse.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_list.h: Auto merged sql/sql_load.cc: Auto merged sql/share/czech/errmsg.txt: Auto merged sql/share/danish/errmsg.txt: Auto merged sql/share/dutch/errmsg.txt: Auto merged sql/share/english/errmsg.txt: Auto merged sql/share/estonian/errmsg.txt: Auto merged sql/share/french/errmsg.txt: Auto merged sql/share/greek/errmsg.txt: Auto merged sql/share/hungarian/errmsg.txt: Auto merged sql/share/italian/errmsg.txt: Auto merged sql/share/japanese/errmsg.txt: Auto merged sql/share/korean/errmsg.txt: Auto merged sql/share/norwegian-ny/errmsg.txt: Auto merged sql/share/norwegian/errmsg.txt: Auto merged sql/share/portuguese/errmsg.txt: Auto merged sql/share/romanian/errmsg.txt: Auto merged sql/share/russian/errmsg.txt: Auto merged sql/share/slovak/errmsg.txt: Auto merged sql/share/spanish/errmsg.txt: Auto merged sql/share/swedish/errmsg.txt: Auto merged sql/share/ukrainian/errmsg.txt: Auto merged sql/unireg.h: Auto merged sql-bench/crash-me.sh: Auto merged sql-bench/test-transactions.sh: Auto merged strings/ctype-tis620.c: Auto merged tests/grant.res: Auto merged sql/log_event.cc: Merge with 4.0.13 Cleaned up comment syntax
This commit is contained in:
commit
daac922bc3
317 changed files with 6691 additions and 3495 deletions
|
|
@ -455,82 +455,78 @@ uchar NEAR sort_order_tis620[]=
|
|||
Arg: const source string and length of converted string
|
||||
Ret: Sortable string
|
||||
*/
|
||||
|
||||
/*
|
||||
NOTE: isn't it faster to alloc buffer in calling function?
|
||||
*/
|
||||
static uchar* thai2sortable(const uchar * tstr,uint len)
|
||||
{
|
||||
/* We use only 3 levels (neglect capitalization). */
|
||||
|
||||
const uchar* p = tstr;
|
||||
const uchar* p= tstr;
|
||||
uchar *outBuf;
|
||||
/* uchar *pRight1, *pRight2, *pRight3, *pRight4; */
|
||||
/* uchar *pLeft1, *pLeft2, *pLeft3, *pLeft4; */
|
||||
uchar *pRight1, *pRight2, *pRight3;
|
||||
uchar *pLeft1, *pLeft2, *pLeft3;
|
||||
uint bufSize;
|
||||
uint RightSize;
|
||||
|
||||
len = (uint) strnlen((char*) tstr,len);
|
||||
bufSize = (uint) buffsize((char*) tstr);
|
||||
if(!(pRight1 = (uchar *)malloc(sizeof(uchar) * bufSize))) {
|
||||
return( (uchar*) tstr);
|
||||
}
|
||||
pLeft1 = pRight1;
|
||||
outBuf = pRight1;
|
||||
if(!(pRight2 = (uchar *)malloc(sizeof(uchar) * (len + 1)))) {
|
||||
free(pRight1);
|
||||
return((uchar*) tstr);
|
||||
}
|
||||
pLeft2 = pRight2;
|
||||
if(!(pRight3 = (uchar *)malloc(sizeof(uchar) * (len + 1)))) {
|
||||
free(pRight1);
|
||||
free(pRight2);
|
||||
return((uchar*) tstr);
|
||||
}
|
||||
pLeft3 = pRight3;
|
||||
/* if(!(pRight4 = (uchar *)malloc(sizeof(uchar) * (len + 1)))) {
|
||||
free(pRight1);
|
||||
free(pRight2);
|
||||
free(pRight3);
|
||||
return((uchar*) tstr);
|
||||
}
|
||||
pLeft4 = pRight4;*/
|
||||
while(len--) {
|
||||
if(isldvowel(*p) && isconsnt(p[1])) {
|
||||
*pRight1++ = t_ctype[p[1]][0];
|
||||
*pRight2++ = t_ctype[p[1]][1];
|
||||
*pRight3++ = t_ctype[p[1]][2];
|
||||
/* *pRight4++ = t_ctype[p[1]][3]; */
|
||||
*pRight1++ = t_ctype[*p][0];
|
||||
*pRight2++ = t_ctype[*p][1];
|
||||
*pRight3++ = t_ctype[*p][2];
|
||||
/* *pRight4++ = t_ctype[*p][3]; */
|
||||
len= (uint) strnlen((char*) tstr,len);
|
||||
bufSize= (uint) buffsize((char*) tstr);
|
||||
RightSize= sizeof(uchar) * (len + 1);
|
||||
if (!(outBuf= pLeft1= pRight1=
|
||||
(uchar *)malloc(sizeof(uchar) * bufSize + RightSize*2)))
|
||||
return (uchar*) tstr;
|
||||
pLeft2= pRight2= pRight1 + sizeof(uchar) * bufSize;
|
||||
pLeft3= pRight3= pRight2 + RightSize;
|
||||
|
||||
while (--len)
|
||||
{
|
||||
int *t_ctype0= t_ctype[p[0]];
|
||||
if (isldvowel(*p) && isconsnt(p[1]))
|
||||
{
|
||||
int *t_ctype1= t_ctype[p[1]];
|
||||
*pRight1++= t_ctype1[0];
|
||||
*pRight2++= t_ctype1[1];
|
||||
*pRight3++= t_ctype1[2];
|
||||
*pRight1++= t_ctype0[0];
|
||||
*pRight2++= t_ctype0[1];
|
||||
*pRight3++= t_ctype0[2];
|
||||
p+= 2;
|
||||
len--;
|
||||
p += 2;
|
||||
} else {
|
||||
*pRight1 = t_ctype[*p][0];
|
||||
if(*pRight1 != IGNORE) pRight1++;
|
||||
*pRight2 = t_ctype[*p][1];
|
||||
if(*pRight2 != IGNORE) pRight2++;
|
||||
*pRight3 = t_ctype[*p][2];
|
||||
if(*pRight3 != IGNORE) pRight3++;
|
||||
/* *pRight4 = t_ctype[*p][3];
|
||||
if(*pRight4 != IGNORE) pRight4++;*/
|
||||
}
|
||||
else
|
||||
{
|
||||
*pRight1= t_ctype0[0];
|
||||
if(*pRight1 != IGNORE)
|
||||
pRight1++;
|
||||
*pRight2= t_ctype0[1];
|
||||
if (*pRight2 != IGNORE)
|
||||
pRight2++;
|
||||
*pRight3= t_ctype0[2];
|
||||
if(*pRight3 != IGNORE)
|
||||
pRight3++;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
*pRight1++ = L2_BLANK;
|
||||
*pRight2++ = L3_BLANK;
|
||||
/* *pRight3++ = L4_BLANK; */
|
||||
*pRight3++ = '\0';
|
||||
/* *pRight4++ = '\0'; */
|
||||
if (!len)
|
||||
{
|
||||
int *t_ctype0= t_ctype[p[0]];
|
||||
*pRight1= t_ctype0[0];
|
||||
if (*pRight1 != IGNORE)
|
||||
pRight1++;
|
||||
*pRight2= t_ctype0[1];
|
||||
if (*pRight2 != IGNORE)
|
||||
pRight2++;
|
||||
*pRight3= t_ctype0[2];
|
||||
if (*pRight3 != IGNORE)
|
||||
pRight3++;
|
||||
}
|
||||
*pRight1++= L2_BLANK;
|
||||
*pRight2++= L3_BLANK;
|
||||
*pRight3++= '\0';
|
||||
memcpy(pRight1, pLeft2, pRight2 - pLeft2);
|
||||
pRight1 += pRight2 - pLeft2;
|
||||
pRight1+= pRight2 - pLeft2;
|
||||
memcpy(pRight1, pLeft3, pRight3 - pLeft3);
|
||||
/* pRight1 += pRight3 - pLeft3; */
|
||||
/* memcpy(pRight1, pLeft4, pRight4 - pLeft4); */
|
||||
free(pLeft2);
|
||||
free(pLeft3);
|
||||
/* free(pLeft4); */
|
||||
return(outBuf);
|
||||
return outBuf;
|
||||
}
|
||||
|
||||
/* strncoll() replacement, compare 2 string, both are conveted to sortable string
|
||||
|
|
@ -543,12 +539,12 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
|||
{
|
||||
uchar *tc1, *tc2;
|
||||
int i;
|
||||
tc1 = thai2sortable(s1, len1);
|
||||
tc2 = thai2sortable(s2, len2);
|
||||
i = strcmp((char*)tc1, (char*)tc2);
|
||||
tc1= thai2sortable(s1, len1);
|
||||
tc2= thai2sortable(s2, len2);
|
||||
i= strcmp((char*)tc1, (char*)tc2);
|
||||
free(tc1);
|
||||
free(tc2);
|
||||
return(i);
|
||||
return i;
|
||||
}
|
||||
|
||||
static
|
||||
|
|
@ -572,12 +568,12 @@ int my_strnxfrm_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
|||
{
|
||||
uint bufSize;
|
||||
uchar *tmp;
|
||||
bufSize = (uint) buffsize((char*)src);
|
||||
tmp = thai2sortable(src,srclen);
|
||||
bufSize= (uint) buffsize((char*)src);
|
||||
tmp= thai2sortable(src,srclen);
|
||||
set_if_smaller(bufSize,(uint) len);
|
||||
memcpy((uchar *)dest, tmp, bufSize);
|
||||
free(tmp);
|
||||
return (int) bufSize;
|
||||
return (int)bufSize;
|
||||
}
|
||||
|
||||
/* strcoll replacment, compare 2 strings
|
||||
|
|
@ -588,12 +584,12 @@ int my_strcoll_tis620(const uchar * s1, const uchar * s2)
|
|||
{
|
||||
uchar *tc1, *tc2;
|
||||
int i;
|
||||
tc1 = thai2sortable(s1, (uint) strlen((char*)s1));
|
||||
tc2 = thai2sortable(s2, (uint) strlen((char*)s2));
|
||||
i = strcmp((char*)tc1, (char*)tc2);
|
||||
tc1= thai2sortable(s1, (uint) strlen((char*)s1));
|
||||
tc2= thai2sortable(s2, (uint) strlen((char*)s2));
|
||||
i= strcmp((char*)tc1, (char*)tc2);
|
||||
free(tc1);
|
||||
free(tc2);
|
||||
return(i);
|
||||
return i;
|
||||
}
|
||||
|
||||
/* strxfrm replacment, convert Thai string to sortable string
|
||||
|
|
@ -605,9 +601,9 @@ int my_strxfrm_tis620(uchar * dest, const uchar * src, int len)
|
|||
uint bufSize;
|
||||
uchar *tmp;
|
||||
|
||||
bufSize = (uint) buffsize((char*) src);
|
||||
tmp = thai2sortable(src, len);
|
||||
memcpy((uchar *) dest, tmp, bufSize);
|
||||
bufSize= (uint)buffsize((char*) src);
|
||||
tmp= thai2sortable(src, len);
|
||||
memcpy((uchar *)dest, tmp, bufSize);
|
||||
free(tmp);
|
||||
return bufSize;
|
||||
}
|
||||
|
|
@ -637,7 +633,7 @@ my_bool my_like_range_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
|||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skipp escape */
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
*min_str++ = *max_str++ = *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
|
|
@ -671,28 +667,24 @@ my_bool my_like_range_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
|||
*/
|
||||
void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length)
|
||||
{
|
||||
const uchar* fr = from;
|
||||
uchar* p = ptr;
|
||||
const uchar* fr= from;
|
||||
uchar* p= ptr;
|
||||
|
||||
if (length > field_length)
|
||||
length= field_length;
|
||||
|
||||
if(length > field_length) {
|
||||
length = field_length;
|
||||
}
|
||||
while (length--)
|
||||
{
|
||||
if((istone(*fr) || isdiacrt1(*fr)) &&
|
||||
if ((istone(*fr) || isdiacrt1(*fr)) &&
|
||||
(islwrvowel(fr[1]) || isuprvowel(fr[1])))
|
||||
{
|
||||
*p = fr[1];
|
||||
p[1] = *fr;
|
||||
fr += 2;
|
||||
p += 2;
|
||||
*p= fr[1];
|
||||
p[1]= *fr;
|
||||
fr+= 2;
|
||||
p+= 2;
|
||||
length--;
|
||||
}
|
||||
else
|
||||
{
|
||||
*p++ = *fr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue