Commit 6f8fd0a7 authored by unknown's avatar unknown

Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt

into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt


mysql-test/r/ctype_utf8.result:
  Auto merged
mysql-test/t/ctype_utf8.test:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
parents 3e7e78d7 55a3a64e
...@@ -1742,25 +1742,13 @@ NULL ...@@ -1742,25 +1742,13 @@ NULL
Warnings: Warnings:
Error 1300 Invalid utf8 character string: 'FF' Error 1300 Invalid utf8 character string: 'FF'
select hex(_utf8 0x616263FF); select hex(_utf8 0x616263FF);
hex(_utf8 0x616263FF) ERROR HY000: Invalid utf8 character string: 'FF'
NULL
Warnings:
Error 1300 Invalid utf8 character string: 'FF'
select hex(_utf8 X'616263FF'); select hex(_utf8 X'616263FF');
hex(_utf8 X'616263FF') ERROR HY000: Invalid utf8 character string: 'FF'
NULL
Warnings:
Error 1300 Invalid utf8 character string: 'FF'
select hex(_utf8 B'001111111111'); select hex(_utf8 B'001111111111');
hex(_utf8 B'001111111111') ERROR HY000: Invalid utf8 character string: 'FF'
NULL
Warnings:
Error 1300 Invalid utf8 character string: 'FF'
select (_utf8 X'616263FF'); select (_utf8 X'616263FF');
(_utf8 X'616263FF') ERROR HY000: Invalid utf8 character string: 'FF'
NULL
Warnings:
Error 1300 Invalid utf8 character string: 'FF'
set sql_mode=default; set sql_mode=default;
select hex(char(0xFF using utf8)); select hex(char(0xFF using utf8));
hex(char(0xFF using utf8)) hex(char(0xFF using utf8))
...@@ -1773,22 +1761,10 @@ hex(convert(0xFF using utf8)) ...@@ -1773,22 +1761,10 @@ hex(convert(0xFF using utf8))
Warnings: Warnings:
Warning 1300 Invalid utf8 character string: 'FF' Warning 1300 Invalid utf8 character string: 'FF'
select hex(_utf8 0x616263FF); select hex(_utf8 0x616263FF);
hex(_utf8 0x616263FF) ERROR HY000: Invalid utf8 character string: 'FF'
616263
Warnings:
Warning 1300 Invalid utf8 character string: 'FF'
select hex(_utf8 X'616263FF'); select hex(_utf8 X'616263FF');
hex(_utf8 X'616263FF') ERROR HY000: Invalid utf8 character string: 'FF'
616263
Warnings:
Warning 1300 Invalid utf8 character string: 'FF'
select hex(_utf8 B'001111111111'); select hex(_utf8 B'001111111111');
hex(_utf8 B'001111111111') ERROR HY000: Invalid utf8 character string: 'FF'
03
Warnings:
Warning 1300 Invalid utf8 character string: 'FF'
select (_utf8 X'616263FF'); select (_utf8 X'616263FF');
(_utf8 X'616263FF') ERROR HY000: Invalid utf8 character string: 'FF'
abc
Warnings:
Warning 1300 Invalid utf8 character string: 'FF'
...@@ -1412,14 +1412,22 @@ DROP TABLE t1, t2; ...@@ -1412,14 +1412,22 @@ DROP TABLE t1, t2;
set sql_mode=traditional; set sql_mode=traditional;
select hex(char(0xFF using utf8)); select hex(char(0xFF using utf8));
select hex(convert(0xFF using utf8)); select hex(convert(0xFF using utf8));
--error ER_INVALID_CHARACTER_STRING
select hex(_utf8 0x616263FF); select hex(_utf8 0x616263FF);
--error ER_INVALID_CHARACTER_STRING
select hex(_utf8 X'616263FF'); select hex(_utf8 X'616263FF');
--error ER_INVALID_CHARACTER_STRING
select hex(_utf8 B'001111111111'); select hex(_utf8 B'001111111111');
--error ER_INVALID_CHARACTER_STRING
select (_utf8 X'616263FF'); select (_utf8 X'616263FF');
set sql_mode=default; set sql_mode=default;
select hex(char(0xFF using utf8)); select hex(char(0xFF using utf8));
select hex(convert(0xFF using utf8)); select hex(convert(0xFF using utf8));
--error ER_INVALID_CHARACTER_STRING
select hex(_utf8 0x616263FF); select hex(_utf8 0x616263FF);
--error ER_INVALID_CHARACTER_STRING
select hex(_utf8 X'616263FF'); select hex(_utf8 X'616263FF');
--error ER_INVALID_CHARACTER_STRING
select hex(_utf8 B'001111111111'); select hex(_utf8 B'001111111111');
--error ER_INVALID_CHARACTER_STRING
select (_utf8 X'616263FF'); select (_utf8 X'616263FF');
...@@ -4313,7 +4313,7 @@ bool Item::is_datetime() ...@@ -4313,7 +4313,7 @@ bool Item::is_datetime()
} }
String *Item::check_well_formed_result(String *str) String *Item::check_well_formed_result(String *str, bool send_error)
{ {
/* Check whether we got a well-formed string */ /* Check whether we got a well-formed string */
CHARSET_INFO *cs= str->charset(); CHARSET_INFO *cs= str->charset();
...@@ -4329,8 +4329,14 @@ String *Item::check_well_formed_result(String *str) ...@@ -4329,8 +4329,14 @@ String *Item::check_well_formed_result(String *str)
uint diff= str->length() - wlen; uint diff= str->length() - wlen;
set_if_smaller(diff, 3); set_if_smaller(diff, 3);
octet2hex(hexbuf, str->ptr() + wlen, diff); octet2hex(hexbuf, str->ptr() + wlen, diff);
if (thd->variables.sql_mode & if (send_error)
(MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES)) {
my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
cs->csname, hexbuf);
return 0;
}
if ((thd->variables.sql_mode &
(MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES)))
{ {
level= MYSQL_ERROR::WARN_LEVEL_ERROR; level= MYSQL_ERROR::WARN_LEVEL_ERROR;
null_value= 1; null_value= 1;
......
...@@ -1003,7 +1003,7 @@ public: ...@@ -1003,7 +1003,7 @@ public:
bool is_datetime(); bool is_datetime();
virtual Field::geometry_type get_geometry_type() const virtual Field::geometry_type get_geometry_type() const
{ return Field::GEOM_GEOMETRY; }; { return Field::GEOM_GEOMETRY; };
String *check_well_formed_result(String *str); String *check_well_formed_result(String *str, bool send_error= 0);
}; };
......
...@@ -9935,15 +9935,11 @@ literal: ...@@ -9935,15 +9935,11 @@ literal:
str ? str->ptr() : "", str ? str->ptr() : "",
str ? str->length() : 0, str ? str->length() : 0,
$1); $1);
if ($$) if (!$$ || !$$->check_well_formed_result(&$$->str_value, TRUE))
{ {
((Item_string *) $$)->set_repertoire_from_value(); MYSQL_YYABORT;
if (!$$->check_well_formed_result(&$$->str_value))
{
$$= new Item_null();
$$->set_name(NULL, 0, system_charset_info);
}
} }
((Item_string *) $$)->set_repertoire_from_value();
} }
| UNDERSCORE_CHARSET BIN_NUM | UNDERSCORE_CHARSET BIN_NUM
{ {
...@@ -9959,10 +9955,9 @@ literal: ...@@ -9959,10 +9955,9 @@ literal:
str ? str->ptr() : "", str ? str->ptr() : "",
str ? str->length() : 0, str ? str->length() : 0,
$1); $1);
if ($$ && !$$->check_well_formed_result(&$$->str_value)) if (!$$ || !$$->check_well_formed_result(&$$->str_value, TRUE))
{ {
$$= new Item_null(); MYSQL_YYABORT;
$$->set_name(NULL, 0, system_charset_info);
} }
} }
| DATE_SYM text_literal { $$ = $2; } | DATE_SYM text_literal { $$ = $2; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment