merge from 5.1 main
This commit is contained in:
commit
037d9fae72
@ -218,4 +218,10 @@ hex(a) hex(lower(a)) hex(upper(a))
|
|||||||
8352835E 8352835E 8352835E
|
8352835E 8352835E 8352835E
|
||||||
8372835E 8372835E 8372835E
|
8372835E 8372835E 8372835E
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#11766519 - Bug#59648: MY_STRTOLL10_MB2: ASSERTION `(*ENDPTR - S) % 2 == 0' FAILED.
|
||||||
|
#
|
||||||
|
SELECT QUOTE('ƒ\');
|
||||||
|
QUOTE('ƒ\')
|
||||||
|
'ƒ\'
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
|
@ -990,8 +990,8 @@ old_password(name)
|
|||||||
????????
|
????????
|
||||||
select quote(name) from bug20536;
|
select quote(name) from bug20536;
|
||||||
quote(name)
|
quote(name)
|
||||||
????????
|
'test1'
|
||||||
????????????????
|
'\'test\\_2\''
|
||||||
drop table bug20536;
|
drop table bug20536;
|
||||||
set names ucs2;
|
set names ucs2;
|
||||||
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
||||||
@ -1238,4 +1238,15 @@ CREATE VIEW v1 AS SELECT 1 from t1
|
|||||||
WHERE t1.b <=> (SELECT a FROM t1 WHERE a < SOME(SELECT '1'));
|
WHERE t1.b <=> (SELECT a FROM t1 WHERE a < SOME(SELECT '1'));
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||||
|
#
|
||||||
|
SELECT HEX(CHAR(COALESCE(NULL, CHAR(COUNT('%s') USING ucs2), 1, @@global.license, NULL) USING cp850));
|
||||||
|
HEX(CHAR(COALESCE(NULL, CHAR(COUNT('%s') USING ucs2), 1, @@global.license, NULL) USING cp850))
|
||||||
|
00
|
||||||
|
SELECT CONVERT(QUOTE(CHAR(0xf5 using ucs2)), SIGNED);
|
||||||
|
CONVERT(QUOTE(CHAR(0xf5 using ucs2)), SIGNED)
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: ''
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
19
mysql-test/r/func_encrypt_ucs2.result
Normal file
19
mysql-test/r/func_encrypt_ucs2.result
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#
|
||||||
|
# Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||||
|
#
|
||||||
|
SELECT CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)));
|
||||||
|
CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)))
|
||||||
|
9
|
||||||
|
SELECT CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED);
|
||||||
|
CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED)
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '?T?iK?j??'
|
||||||
|
SELECT CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2)));
|
||||||
|
CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2)))
|
||||||
|
4
|
||||||
|
SELECT CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED);
|
||||||
|
CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED)
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
@ -1124,4 +1124,12 @@ Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: END-OF-INPUT une
|
|||||||
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||||
UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1')
|
UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1')
|
||||||
NULL
|
NULL
|
||||||
|
#
|
||||||
|
# Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332
|
||||||
|
#
|
||||||
|
SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1);
|
||||||
|
ExtractValue(CONVERT('<\"', BINARY(10)), 1)
|
||||||
|
NULL
|
||||||
|
Warnings:
|
||||||
|
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 11: STRING unexpected (ident or '/' wanted)'
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -2431,7 +2431,7 @@ c1 c2 c3 c4
|
|||||||
2155 2155 1998-12-26 1998-12-26 11:30:45
|
2155 2155 1998-12-26 1998-12-26 11:30:45
|
||||||
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t3;
|
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t3;
|
||||||
total_rows min_value max(c2)
|
total_rows min_value max(c2)
|
||||||
21 1901 2155
|
21 0 2155
|
||||||
SELECT * FROM t3 WHERE c3 = '1998-12-11';
|
SELECT * FROM t3 WHERE c3 = '1998-12-11';
|
||||||
c1 c2 c3 c4
|
c1 c2 c3 c4
|
||||||
1990 1990 1998-12-11 1998-12-11 11:30:45
|
1990 1990 1998-12-11 1998-12-11 11:30:45
|
||||||
@ -2838,7 +2838,7 @@ c1 c2 c3 c4
|
|||||||
2155 2155 1998-12-26 1998-12-26 11:30:45
|
2155 2155 1998-12-26 1998-12-26 11:30:45
|
||||||
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t3;
|
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t3;
|
||||||
total_rows min_value max(c2)
|
total_rows min_value max(c2)
|
||||||
21 1901 2155
|
21 0 2155
|
||||||
SELECT * FROM t3 WHERE c3 = '1998-12-11';
|
SELECT * FROM t3 WHERE c3 = '1998-12-11';
|
||||||
c1 c2 c3 c4
|
c1 c2 c3 c4
|
||||||
1990 1990 1998-12-11 1998-12-11 11:30:45
|
1990 1990 1998-12-11 1998-12-11 11:30:45
|
||||||
|
@ -92,4 +92,12 @@ INSERT INTO t1 VALUES (0x8372835E),(0x8352835E);
|
|||||||
SELECT hex(a), hex(lower(a)), hex(upper(a)) FROM t1 ORDER BY binary(a);
|
SELECT hex(a), hex(lower(a)), hex(upper(a)) FROM t1 ORDER BY binary(a);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#11766519 - Bug#59648: MY_STRTOLL10_MB2: ASSERTION `(*ENDPTR - S) % 2 == 0' FAILED.
|
||||||
|
--echo #
|
||||||
|
# In the below string backslash (0x5C) is a part of a multi-byte
|
||||||
|
# character, so it should not be quoted.
|
||||||
|
SELECT QUOTE('ƒ\');
|
||||||
|
|
||||||
|
|
||||||
--echo # End of 5.1 tests
|
--echo # End of 5.1 tests
|
||||||
|
@ -741,4 +741,10 @@ WHERE t1.b <=> (SELECT a FROM t1 WHERE a < SOME(SELECT '1'));
|
|||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||||
|
--echo #
|
||||||
|
SELECT HEX(CHAR(COALESCE(NULL, CHAR(COUNT('%s') USING ucs2), 1, @@global.license, NULL) USING cp850));
|
||||||
|
SELECT CONVERT(QUOTE(CHAR(0xf5 using ucs2)), SIGNED);
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
12
mysql-test/t/func_encrypt_ucs2.test
Normal file
12
mysql-test/t/func_encrypt_ucs2.test
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
-- source include/have_ssl.inc
|
||||||
|
-- source include/have_ucs2.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SELECT CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)));
|
||||||
|
SELECT CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED);
|
||||||
|
|
||||||
|
SELECT CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2)));
|
||||||
|
SELECT CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED);
|
@ -646,4 +646,9 @@ SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
|||||||
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
|
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
|
||||||
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332
|
||||||
|
--echo #
|
||||||
|
SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1);
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -840,7 +840,7 @@ longlong Item_func_numhybrid::val_int()
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
char *end= (char*) res->ptr() + res->length();
|
char *end= (char*) res->ptr() + res->length();
|
||||||
CHARSET_INFO *cs= str_value.charset();
|
CHARSET_INFO *cs= res->charset();
|
||||||
return (*(cs->cset->strtoll10))(cs, res->ptr(), &end, &err_not_used);
|
return (*(cs->cset->strtoll10))(cs, res->ptr(), &end, &err_not_used);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -519,6 +519,7 @@ String *Item_func_des_encrypt::val_str(String *str)
|
|||||||
tmp_arg[res_length-1]=tail; // save extra length
|
tmp_arg[res_length-1]=tail; // save extra length
|
||||||
tmp_value.realloc(res_length+1);
|
tmp_value.realloc(res_length+1);
|
||||||
tmp_value.length(res_length+1);
|
tmp_value.length(res_length+1);
|
||||||
|
tmp_value.set_charset(&my_charset_bin);
|
||||||
tmp_value[0]=(char) (128 | key_number);
|
tmp_value[0]=(char) (128 | key_number);
|
||||||
// Real encryption
|
// Real encryption
|
||||||
bzero((char*) &ivec,sizeof(ivec));
|
bzero((char*) &ivec,sizeof(ivec));
|
||||||
@ -606,6 +607,7 @@ String *Item_func_des_decrypt::val_str(String *str)
|
|||||||
if ((tail=(uint) (uchar) tmp_value[length-2]) > 8)
|
if ((tail=(uint) (uchar) tmp_value[length-2]) > 8)
|
||||||
goto wrong_key; // Wrong key
|
goto wrong_key; // Wrong key
|
||||||
tmp_value.length(length-1-tail);
|
tmp_value.length(length-1-tail);
|
||||||
|
tmp_value.set_charset(&my_charset_bin);
|
||||||
return &tmp_value;
|
return &tmp_value;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -3212,14 +3214,68 @@ String *Item_func_quote::val_str(String *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
arg_length= arg->length();
|
arg_length= arg->length();
|
||||||
new_length= arg_length+2; /* for beginning and ending ' signs */
|
|
||||||
|
|
||||||
|
if (collation.collation->mbmaxlen == 1)
|
||||||
|
{
|
||||||
|
new_length= arg_length + 2; /* for beginning and ending ' signs */
|
||||||
for (from= (char*) arg->ptr(), end= from + arg_length; from < end; from++)
|
for (from= (char*) arg->ptr(), end= from + arg_length; from < end; from++)
|
||||||
new_length+= get_esc_bit(escmask, (uchar) *from);
|
new_length+= get_esc_bit(escmask, (uchar) *from);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_length= (arg_length * 2) + /* For string characters */
|
||||||
|
(2 * collation.collation->mbmaxlen); /* For quotes */
|
||||||
|
}
|
||||||
|
|
||||||
if (tmp_value.alloc(new_length))
|
if (tmp_value.alloc(new_length))
|
||||||
goto null;
|
goto null;
|
||||||
|
|
||||||
|
if (collation.collation->mbmaxlen > 1)
|
||||||
|
{
|
||||||
|
CHARSET_INFO *cs= collation.collation;
|
||||||
|
int mblen;
|
||||||
|
uchar *to_end;
|
||||||
|
to= (char*) tmp_value.ptr();
|
||||||
|
to_end= (uchar*) to + new_length;
|
||||||
|
|
||||||
|
/* Put leading quote */
|
||||||
|
if ((mblen= cs->cset->wc_mb(cs, '\'', (uchar *) to, to_end)) <= 0)
|
||||||
|
goto null;
|
||||||
|
to+= mblen;
|
||||||
|
|
||||||
|
for (start= (char*) arg->ptr(), end= start + arg_length; start < end; )
|
||||||
|
{
|
||||||
|
my_wc_t wc;
|
||||||
|
bool escape;
|
||||||
|
if ((mblen= cs->cset->mb_wc(cs, &wc, (uchar*) start, (uchar*) end)) <= 0)
|
||||||
|
goto null;
|
||||||
|
start+= mblen;
|
||||||
|
switch (wc) {
|
||||||
|
case 0: escape= 1; wc= '0'; break;
|
||||||
|
case '\032': escape= 1; wc= 'Z'; break;
|
||||||
|
case '\'': escape= 1; break;
|
||||||
|
case '\\': escape= 1; break;
|
||||||
|
default: escape= 0; break;
|
||||||
|
}
|
||||||
|
if (escape)
|
||||||
|
{
|
||||||
|
if ((mblen= cs->cset->wc_mb(cs, '\\', (uchar*) to, to_end)) <= 0)
|
||||||
|
goto null;
|
||||||
|
to+= mblen;
|
||||||
|
}
|
||||||
|
if ((mblen= cs->cset->wc_mb(cs, wc, (uchar*) to, to_end)) <= 0)
|
||||||
|
goto null;
|
||||||
|
to+= mblen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Put trailing quote */
|
||||||
|
if ((mblen= cs->cset->wc_mb(cs, '\'', (uchar *) to, to_end)) <= 0)
|
||||||
|
goto null;
|
||||||
|
to+= mblen;
|
||||||
|
new_length= to - tmp_value.ptr();
|
||||||
|
goto ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We replace characters from the end to the beginning
|
We replace characters from the end to the beginning
|
||||||
*/
|
*/
|
||||||
@ -3251,6 +3307,8 @@ String *Item_func_quote::val_str(String *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*to= '\'';
|
*to= '\'';
|
||||||
|
|
||||||
|
ret:
|
||||||
tmp_value.length(new_length);
|
tmp_value.length(new_length);
|
||||||
tmp_value.set_charset(collation.collation);
|
tmp_value.set_charset(collation.collation);
|
||||||
null_value= 0;
|
null_value= 0;
|
||||||
|
@ -704,9 +704,10 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
ulonglong max_result_length= (ulonglong) args[0]->max_length * 2 + 2;
|
|
||||||
max_length= (uint32) min(max_result_length, MAX_BLOB_WIDTH);
|
|
||||||
collation.set(args[0]->collation);
|
collation.set(args[0]->collation);
|
||||||
|
ulonglong max_result_length= (ulonglong) args[0]->max_length * 2 +
|
||||||
|
2 * collation.collation->mbmaxlen;
|
||||||
|
max_length= (uint32) min(max_result_length, MAX_BLOB_WIDTH);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1218,7 +1218,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
We have checked charset earlier,
|
We have checked charset earlier,
|
||||||
so thd_init_client_charset cannot fail.
|
so thd_init_client_charset cannot fail.
|
||||||
*/
|
*/
|
||||||
DBUG_ASSERT(!thd_init_client_charset(thd, cs_number));
|
if (thd_init_client_charset(thd, cs_number))
|
||||||
|
DBUG_ASSERT(0);
|
||||||
thd->update_charset();
|
thd->update_charset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,11 +165,16 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
|||||||
}
|
}
|
||||||
else if ( (p->cur[0] == '"') || (p->cur[0] == '\'') )
|
else if ( (p->cur[0] == '"') || (p->cur[0] == '\'') )
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
"string" or 'string' found.
|
||||||
|
Scan until the closing quote/doublequote, or until the END-OF-INPUT.
|
||||||
|
*/
|
||||||
p->cur++;
|
p->cur++;
|
||||||
for (; ( p->cur < p->end ) && (p->cur[0] != a->beg[0]); p->cur++)
|
for (; ( p->cur < p->end ) && (p->cur[0] != a->beg[0]); p->cur++)
|
||||||
{}
|
{}
|
||||||
a->end=p->cur;
|
a->end=p->cur;
|
||||||
if (a->beg[0] == p->cur[0])p->cur++;
|
if (p->cur < p->end) /* Closing quote or doublequote has been found */
|
||||||
|
p->cur++;
|
||||||
a->beg++;
|
a->beg++;
|
||||||
if (!(p->flags & MY_XML_FLAG_SKIP_TEXT_NORMALIZATION))
|
if (!(p->flags & MY_XML_FLAG_SKIP_TEXT_NORMALIZATION))
|
||||||
my_xml_norm_text(a);
|
my_xml_norm_text(a);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user