Backporting Bug#32391 Character sets: crash with --character-set-server
from mysql-trunk-bugfixing (5.6.1-m5) from mysql-5.5-bugfixing (5.5.6-m3).
This commit is contained in:
parent
cdce606121
commit
89e6eb0b1e
9
mysql-test/r/ctype_utf16_def.result
Normal file
9
mysql-test/r/ctype_utf16_def.result
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
SHOW VARIABLES LIKE 'collation_server';
|
||||||
|
Variable_name Value
|
||||||
|
collation_server utf16_general_ci
|
||||||
|
SHOW VARIABLES LIKE 'character_set_server';
|
||||||
|
Variable_name Value
|
||||||
|
character_set_server utf16
|
||||||
|
SHOW VARIABLES LIKE 'ft_stopword_file';
|
||||||
|
Variable_name Value
|
||||||
|
ft_stopword_file (built-in)
|
1
mysql-test/t/ctype_utf16_def-master.opt
Normal file
1
mysql-test/t/ctype_utf16_def-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--character-set-server=utf16,latin1
|
8
mysql-test/t/ctype_utf16_def.test
Normal file
8
mysql-test/t/ctype_utf16_def.test
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
--source include/have_utf16.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #32391 Character sets: crash with --character-set-server
|
||||||
|
#
|
||||||
|
SHOW VARIABLES LIKE 'collation_server';
|
||||||
|
SHOW VARIABLES LIKE 'character_set_server';
|
||||||
|
SHOW VARIABLES LIKE 'ft_stopword_file';
|
@ -18,6 +18,10 @@
|
|||||||
#include "ftdefs.h"
|
#include "ftdefs.h"
|
||||||
#include "my_handler.h"
|
#include "my_handler.h"
|
||||||
|
|
||||||
|
|
||||||
|
static CHARSET_INFO *ft_stopword_cs= NULL;
|
||||||
|
|
||||||
|
|
||||||
typedef struct st_ft_stopwords
|
typedef struct st_ft_stopwords
|
||||||
{
|
{
|
||||||
const char * pos;
|
const char * pos;
|
||||||
@ -29,7 +33,7 @@ static TREE *stopwords3=NULL;
|
|||||||
static int FT_STOPWORD_cmp(void* cmp_arg __attribute__((unused)),
|
static int FT_STOPWORD_cmp(void* cmp_arg __attribute__((unused)),
|
||||||
FT_STOPWORD *w1, FT_STOPWORD *w2)
|
FT_STOPWORD *w1, FT_STOPWORD *w2)
|
||||||
{
|
{
|
||||||
return ha_compare_text(default_charset_info,
|
return ha_compare_text(ft_stopword_cs,
|
||||||
(uchar *)w1->pos,w1->len,
|
(uchar *)w1->pos,w1->len,
|
||||||
(uchar *)w2->pos,w2->len,0,0);
|
(uchar *)w2->pos,w2->len,0,0);
|
||||||
}
|
}
|
||||||
@ -59,6 +63,14 @@ int ft_init_stopwords()
|
|||||||
0,
|
0,
|
||||||
(ft_stopword_file ? (tree_element_free)&FT_STOPWORD_free : 0),
|
(ft_stopword_file ? (tree_element_free)&FT_STOPWORD_free : 0),
|
||||||
NULL);
|
NULL);
|
||||||
|
/*
|
||||||
|
Stopword engine currently does not support tricky
|
||||||
|
character sets UCS2, UTF16, UTF32.
|
||||||
|
Use latin1 to compare stopwords in case of these character sets.
|
||||||
|
It's also fine to use latin1 with the built-in stopwords.
|
||||||
|
*/
|
||||||
|
ft_stopword_cs= default_charset_info->mbminlen == 1 ?
|
||||||
|
default_charset_info : &my_charset_latin1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ft_stopword_file)
|
if (ft_stopword_file)
|
||||||
@ -80,7 +92,7 @@ int ft_init_stopwords()
|
|||||||
goto err0;
|
goto err0;
|
||||||
len=my_read(fd, buffer, len, MYF(MY_WME));
|
len=my_read(fd, buffer, len, MYF(MY_WME));
|
||||||
end=start+len;
|
end=start+len;
|
||||||
while (ft_simple_get_word(default_charset_info, &start, end, &w, TRUE))
|
while (ft_simple_get_word(ft_stopword_cs, &start, end, &w, TRUE))
|
||||||
{
|
{
|
||||||
if (ft_add_stopword(my_strndup((char*) w.pos, w.len, MYF(0))))
|
if (ft_add_stopword(my_strndup((char*) w.pos, w.len, MYF(0))))
|
||||||
goto err1;
|
goto err1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user