Merge mysql.com:/home/ram/work/mysql-5.0-engines

into  mysql.com:/home/ram/work/b32726/b32726.5.0
parents 7bc2d427 75095711
...@@ -53,11 +53,13 @@ DROP TABLE t1; ...@@ -53,11 +53,13 @@ DROP TABLE t1;
# #
# Bug #31070: crash during conversion of charsets # Bug #31070: crash during conversion of charsets
# Bug #32726: crash with cast in order by clause and cp932 charset
# #
create table t1 (a set('a') not null); create table t1 (a set('a') not null);
insert into t1 values (),(); insert into t1 values (),();
select cast(a as char(1)) from t1; select cast(a as char(1)) from t1;
select a sounds like a from t1; select a sounds like a from t1;
select 1 from t1 order by cast(a as char(1));
drop table t1; drop table t1;
DROP DATABASE d1; DROP DATABASE d1;
......
...@@ -64,6 +64,10 @@ select a sounds like a from t1; ...@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a a sounds like a
1 1
1 1
select 1 from t1 order by cast(a as char(1));
1
1
1
drop table t1; drop table t1;
DROP DATABASE d1; DROP DATABASE d1;
USE test; USE test;
......
...@@ -2,6 +2,80 @@ drop table if exists t1; ...@@ -2,6 +2,80 @@ drop table if exists t1;
drop table if exists t2; drop table if exists t2;
drop table if exists t3; drop table if exists t3;
drop table if exists t4; drop table if exists t4;
SET @test_character_set= 'cp932';
SET @test_collation= 'cp932_japanese_ci';
SET @safe_character_set_server= @@character_set_server;
SET @safe_collation_server= @@collation_server;
SET character_set_server= @test_character_set;
SET collation_server= @test_collation;
CREATE DATABASE d1;
USE d1;
CREATE TABLE t1 (c CHAR(10), KEY(c));
SHOW FULL COLUMNS FROM t1;
Field Type Collation Null Key Default Extra Privileges Comment
c char(10) cp932_japanese_ci YES MUL NULL
INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
want3results
aaa
aaaa
aaaaa
DROP TABLE t1;
CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
SHOW FULL COLUMNS FROM t1;
Field Type Collation Null Key Default Extra Privileges Comment
c1 varchar(15) cp932_japanese_ci YES MUL NULL
INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
SELECT c1 as want3results from t1 where c1 like 'l%';
want3results
location
loberge
lotre
SELECT c1 as want3results from t1 where c1 like 'lo%';
want3results
location
loberge
lotre
SELECT c1 as want1result from t1 where c1 like 'loc%';
want1result
location
SELECT c1 as want1result from t1 where c1 like 'loca%';
want1result
location
SELECT c1 as want1result from t1 where c1 like 'locat%';
want1result
location
SELECT c1 as want1result from t1 where c1 like 'locati%';
want1result
location
SELECT c1 as want1result from t1 where c1 like 'locatio%';
want1result
location
SELECT c1 as want1result from t1 where c1 like 'location%';
want1result
location
DROP TABLE t1;
create table t1 (a set('a') not null);
insert into t1 values (),();
Warnings:
Warning 1364 Field 'a' doesn't have a default value
select cast(a as char(1)) from t1;
cast(a as char(1))
select a sounds like a from t1;
a sounds like a
1
1
select 1 from t1 order by cast(a as char(1));
1
1
1
drop table t1;
DROP DATABASE d1;
USE test;
SET character_set_server= @safe_character_set_server;
SET collation_server= @safe_collation_server;
set names cp932; set names cp932;
set character_set_database = cp932; set character_set_database = cp932;
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932; CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932;
......
...@@ -64,6 +64,10 @@ select a sounds like a from t1; ...@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a a sounds like a
1 1
1 1
select 1 from t1 order by cast(a as char(1));
1
1
1
drop table t1; drop table t1;
DROP DATABASE d1; DROP DATABASE d1;
USE test; USE test;
......
...@@ -64,6 +64,10 @@ select a sounds like a from t1; ...@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a a sounds like a
1 1
1 1
select 1 from t1 order by cast(a as char(1));
1
1
1
drop table t1; drop table t1;
DROP DATABASE d1; DROP DATABASE d1;
USE test; USE test;
......
...@@ -64,6 +64,10 @@ select a sounds like a from t1; ...@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a a sounds like a
1 1
1 1
select 1 from t1 order by cast(a as char(1));
1
1
1
drop table t1; drop table t1;
DROP DATABASE d1; DROP DATABASE d1;
USE test; USE test;
......
...@@ -2599,6 +2599,10 @@ select a sounds like a from t1; ...@@ -2599,6 +2599,10 @@ select a sounds like a from t1;
a sounds like a a sounds like a
1 1
1 1
select 1 from t1 order by cast(a as char(1));
1
1
1
drop table t1; drop table t1;
DROP DATABASE d1; DROP DATABASE d1;
USE test; USE test;
......
...@@ -8,6 +8,10 @@ drop table if exists t3; ...@@ -8,6 +8,10 @@ drop table if exists t3;
drop table if exists t4; drop table if exists t4;
--enable_warnings --enable_warnings
SET @test_character_set= 'cp932';
SET @test_collation= 'cp932_japanese_ci';
-- source include/ctype_common.inc
set names cp932; set names cp932;
set character_set_database = cp932; set character_set_database = cp932;
......
...@@ -5359,12 +5359,12 @@ my_wc_mb_cp932(CHARSET_INFO *cs __attribute__((unused)), ...@@ -5359,12 +5359,12 @@ my_wc_mb_cp932(CHARSET_INFO *cs __attribute__((unused)),
static int static int
my_mb_wc_cp932(CHARSET_INFO *cs __attribute__((unused)), my_mb_wc_cp932(CHARSET_INFO *cs __attribute__((unused)),
my_wc_t *pwc, const uchar *s, const uchar *e){ my_wc_t *pwc, const uchar *s, const uchar *e){
int hi=s[0]; int hi;
if (s >= e) if (s >= e)
return MY_CS_TOOSMALL; return MY_CS_TOOSMALL;
if (hi < 0x80) if ((hi= s[0]) < 0x80)
{ {
pwc[0]=hi; pwc[0]=hi;
return 1; return 1;
......
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