mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb-merge
This commit is contained in:
@ -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;
|
|||||||
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;
|
|||||||
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;
|
|||||||
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;
|
|||||||
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;
|
|||||||
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;
|
|||||||
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);
|
|||||||
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
|
|||||||
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;
|
|||||||
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);
|
|||||||
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);
|
|||||||
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);
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# test of MERGE TABLES
|
# Test of MERGE TABLES
|
||||||
#
|
#
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
12
sql/item.cc
12
sql/item.cc
@ -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
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
/* 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)),
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user