Commit ba2d58ae authored by istruewing@stella.local's avatar istruewing@stella.local

Merge stella.local:/home2/mydev/mysql-5.0-amain

into  stella.local:/home2/mydev/mysql-5.0-axmrg
parents a079cb9f e02d039a
...@@ -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;
......
...@@ -255,3 +255,8 @@ CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1); ...@@ -255,3 +255,8 @@ CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
INSERT DELAYED INTO t2 VALUES(1); INSERT DELAYED INTO t2 VALUES(1);
ERROR HY000: Table storage engine for 't2' doesn't have this option ERROR HY000: Table storage engine for 't2' doesn't have this option
DROP TABLE t1, t2; DROP TABLE t1, t2;
CREATE TABLE t1 (a INT);
INSERT DELAYED INTO t1 SET b= b();
ERROR 42S22: Unknown column 'b' in 'field list'
DROP TABLE t1;
End of 5.0 tests
...@@ -207,6 +207,13 @@ test ...@@ -207,6 +207,13 @@ test
SELECT NAME_CONST('test', 'test'); SELECT NAME_CONST('test', 'test');
test test
test test
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (), (), ();
SELECT NAME_CONST(a, '1') FROM t1;
ERROR HY000: Incorrect arguments to NAME_CONST
SET INSERT_ID= NAME_CONST(a, a);
ERROR HY000: Incorrect arguments to NAME_CONST
DROP TABLE t1;
create table t1 (a int not null); create table t1 (a int not null);
insert into t1 values (-1), (-2); insert into t1 values (-1), (-2);
select min(a) from t1 group by inet_ntoa(a); select min(a) from t1 group by inet_ntoa(a);
......
...@@ -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;
......
...@@ -252,3 +252,12 @@ CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1); ...@@ -252,3 +252,12 @@ CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
INSERT DELAYED INTO t2 VALUES(1); INSERT DELAYED INTO t2 VALUES(1);
DROP TABLE t1, t2; DROP TABLE t1, t2;
#
# Bug #32676: insert delayed crash with wrong column and function specified
#
CREATE TABLE t1 (a INT);
--error ER_BAD_FIELD_ERROR
INSERT DELAYED INTO t1 SET b= b();
DROP TABLE t1;
--echo End of 5.0 tests
...@@ -204,6 +204,17 @@ SELECT NAME_CONST('test', 1.0); ...@@ -204,6 +204,17 @@ SELECT NAME_CONST('test', 1.0);
SELECT NAME_CONST('test', -1.0); SELECT NAME_CONST('test', -1.0);
SELECT NAME_CONST('test', 'test'); SELECT NAME_CONST('test', 'test');
#
# Bug #32559: connection hangs on query with name_const
#
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (), (), ();
--error ER_WRONG_ARGUMENTS
SELECT NAME_CONST(a, '1') FROM t1;
--error ER_WRONG_ARGUMENTS
SET INSERT_ID= NAME_CONST(a, a);
DROP TABLE t1;
# #
# Bug #31349: ERROR 1062 (23000): Duplicate entry '' for key 'group_key' # Bug #31349: ERROR 1062 (23000): Duplicate entry '' for key 'group_key'
# #
...@@ -213,4 +224,3 @@ select min(a) from t1 group by inet_ntoa(a); ...@@ -213,4 +224,3 @@ select min(a) from t1 group by inet_ntoa(a);
drop table t1; drop table t1;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -1209,7 +1209,17 @@ bool Item_name_const::is_null() ...@@ -1209,7 +1209,17 @@ bool Item_name_const::is_null()
Item::Type Item_name_const::type() const Item::Type Item_name_const::type() const
{ {
return value_item->type(); /*
As
1. one can try to create the Item_name_const passing non-constant
arguments, although it's incorrect and
2. the type() method can be called before the fix_fields() to get
type information for a further type cast, e.g.
if (item->type() == FIELD_ITEM)
((Item_field *) item)->...
we return NULL_ITEM in the case to avoid wrong casting.
*/
return valid_args ? value_item->type() : NULL_ITEM;
} }
......
...@@ -1111,11 +1111,13 @@ class Item_name_const : public Item ...@@ -1111,11 +1111,13 @@ class Item_name_const : public Item
{ {
Item *value_item; Item *value_item;
Item *name_item; Item *name_item;
bool valid_args;
public: public:
Item_name_const(Item *name_arg, Item *val): Item_name_const(Item *name_arg, Item *val):
value_item(val), name_item(name_arg) value_item(val), name_item(name_arg)
{ {
if(!value_item->basic_const_item()) if (!(valid_args= name_item->basic_const_item() &
value_item->basic_const_item()))
my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST"); my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
Item::maybe_null= TRUE; Item::maybe_null= TRUE;
} }
......
...@@ -585,7 +585,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -585,7 +585,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
bool log_on= (thd->options & OPTION_BIN_LOG) || bool log_on= (thd->options & OPTION_BIN_LOG) ||
(!(thd->security_ctx->master_access & SUPER_ACL)); (!(thd->security_ctx->master_access & SUPER_ACL));
#endif #endif
thr_lock_type lock_type = table_list->lock_type; thr_lock_type lock_type;
Item *unused_conds= 0; Item *unused_conds= 0;
DBUG_ENTER("mysql_insert"); DBUG_ENTER("mysql_insert");
...@@ -620,6 +620,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -620,6 +620,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
if (open_and_lock_tables(thd, table_list)) if (open_and_lock_tables(thd, table_list))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
lock_type= table_list->lock_type;
thd->proc_info="init"; thd->proc_info="init";
thd->used_tables=0; thd->used_tables=0;
...@@ -637,7 +638,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, ...@@ -637,7 +638,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
/* mysql_prepare_insert set table_list->table if it was not set */ /* mysql_prepare_insert set table_list->table if it was not set */
table= table_list->table; table= table_list->table;
lock_type= table_list->lock_type;
context= &thd->lex->select_lex.context; context= &thd->lex->select_lex.context;
/* /*
......
...@@ -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