mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge linux-st28.site:/home/martin/mysql/src/bug32848/my50-bug32848-gca
into linux-st28.site:/home/martin/mysql/src/bug32848/my51-bug32848-gca mysql-test/r/union.result: Auto merged mysql-test/t/union.test: Auto merged sql/field.h: Auto merged sql/sql_select.cc: Auto merged sql/field.cc: Bug#32848: Manual merge sql/item.cc: Bug#32848: Manual merge
This commit is contained in:
35
mysql-test/r/bdb_notembedded.result
Normal file
35
mysql-test/r/bdb_notembedded.result
Normal file
@ -0,0 +1,35 @@
|
||||
set autocommit=1;
|
||||
reset master;
|
||||
create table bug16206 (a int);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
show binlog events;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
|
||||
f n Query 1 n use `test`; create table bug16206 (a int)
|
||||
f n Query 1 n use `test`; insert into bug16206 values(1)
|
||||
f n Query 1 n use `test`; insert into bug16206 values(2)
|
||||
drop table bug16206;
|
||||
reset master;
|
||||
create table bug16206 (a int) engine= bdb;
|
||||
insert into bug16206 values(0);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
insert into bug16206 values(3);
|
||||
show binlog events;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
|
||||
f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb
|
||||
f n Query 1 n use `test`; insert into bug16206 values(0)
|
||||
f n Query 1 n use `test`; insert into bug16206 values(1)
|
||||
f n Query 1 n use `test`; BEGIN
|
||||
f n Query 1 n use `test`; insert into bug16206 values(2)
|
||||
f n Query 1 n use `test`; COMMIT
|
||||
f n Query 1 n use `test`; insert into bug16206 values(3)
|
||||
drop table bug16206;
|
||||
set autocommit=0;
|
||||
End of 5.0 tests
|
@ -1445,4 +1445,28 @@ select @var;
|
||||
1
|
||||
(select 2) union (select 1 into @var);
|
||||
ERROR 42000: Result consisted of more than one row
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3);
|
||||
CREATE TABLE t2 SELECT * FROM (SELECT NULL) a UNION SELECT a FROM t1;
|
||||
DESC t2;
|
||||
Field Type Null Key Default Extra
|
||||
NULL int(11) YES NULL
|
||||
CREATE TABLE t3 SELECT a FROM t1 UNION SELECT * FROM (SELECT NULL) a;
|
||||
DESC t3;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) YES NULL
|
||||
CREATE TABLE t4 SELECT NULL;
|
||||
DESC t4;
|
||||
Field Type Null Key Default Extra
|
||||
NULL binary(0) YES NULL
|
||||
CREATE TABLE t5 SELECT NULL UNION SELECT NULL;
|
||||
DESC t5;
|
||||
Field Type Null Key Default Extra
|
||||
NULL binary(0) YES NULL
|
||||
CREATE TABLE t6
|
||||
SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
|
||||
DESC t6;
|
||||
Field Type Null Key Default Extra
|
||||
NULL int(11) YES NULL
|
||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||
End of 5.0 tests
|
||||
|
38
mysql-test/t/bdb_notembedded.test
Normal file
38
mysql-test/t/bdb_notembedded.test
Normal file
@ -0,0 +1,38 @@
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_bdb.inc
|
||||
|
||||
#
|
||||
# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode
|
||||
#
|
||||
set autocommit=1;
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
|
||||
reset master;
|
||||
create table bug16206 (a int);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 1 f 2 n 5 n
|
||||
show binlog events;
|
||||
drop table bug16206;
|
||||
|
||||
reset master;
|
||||
create table bug16206 (a int) engine= bdb;
|
||||
insert into bug16206 values(0);
|
||||
insert into bug16206 values(1);
|
||||
start transaction;
|
||||
insert into bug16206 values(2);
|
||||
commit;
|
||||
insert into bug16206 values(3);
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 1 f 2 n 5 n
|
||||
show binlog events;
|
||||
drop table bug16206;
|
||||
|
||||
set autocommit=0;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
@ -922,4 +922,28 @@ DROP TABLE t1;
|
||||
select @var;
|
||||
--error 1172
|
||||
(select 2) union (select 1 into @var);
|
||||
|
||||
#
|
||||
# Bug#32848: Data type conversion bug in union subselects in MySQL 5.0.38
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3);
|
||||
|
||||
CREATE TABLE t2 SELECT * FROM (SELECT NULL) a UNION SELECT a FROM t1;
|
||||
DESC t2;
|
||||
|
||||
CREATE TABLE t3 SELECT a FROM t1 UNION SELECT * FROM (SELECT NULL) a;
|
||||
DESC t3;
|
||||
|
||||
CREATE TABLE t4 SELECT NULL;
|
||||
DESC t4;
|
||||
|
||||
CREATE TABLE t5 SELECT NULL UNION SELECT NULL;
|
||||
DESC t5;
|
||||
|
||||
CREATE TABLE t6
|
||||
SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
|
||||
DESC t6;
|
||||
|
||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||
--echo End of 5.0 tests
|
||||
|
@ -1307,7 +1307,8 @@ Field::Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
|
||||
field_name(field_name_arg),
|
||||
key_start(0), part_of_key(0), part_of_key_not_clustered(0),
|
||||
part_of_sortkey(0), unireg_check(unireg_check_arg),
|
||||
field_length(length_arg), null_bit(null_bit_arg)
|
||||
field_length(length_arg), null_bit(null_bit_arg),
|
||||
is_created_from_null_item(FALSE)
|
||||
{
|
||||
flags=null_ptr ? 0: NOT_NULL_FLAG;
|
||||
comment.str= (char*) "";
|
||||
|
10
sql/field.h
10
sql/field.h
@ -89,6 +89,16 @@ public:
|
||||
uint32 flags;
|
||||
uint16 field_index; // field number in fields array
|
||||
uchar null_bit; // Bit used to test null bit
|
||||
/**
|
||||
If true, this field was created in create_tmp_field_from_item from a NULL
|
||||
value. This means that the type of the field is just a guess, and the type
|
||||
may be freely coerced to another type.
|
||||
|
||||
@see create_tmp_field_from_item
|
||||
@see Item_type_holder::get_real_type
|
||||
|
||||
*/
|
||||
bool is_created_from_null_item;
|
||||
|
||||
Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
|
||||
uchar null_bit_arg, utype unireg_check_arg,
|
||||
|
@ -6666,6 +6666,8 @@ enum_field_types Item_type_holder::get_real_type(Item *item)
|
||||
*/
|
||||
Field *field= ((Item_field *) item)->field;
|
||||
enum_field_types type= field->real_type();
|
||||
if (field->is_created_from_null_item)
|
||||
return MYSQL_TYPE_NULL;
|
||||
/* work around about varchar type field detection */
|
||||
if (type == MYSQL_TYPE_STRING && field->type() == MYSQL_TYPE_VAR_STRING)
|
||||
return MYSQL_TYPE_VAR_STRING;
|
||||
@ -6924,6 +6926,8 @@ Field *Item_type_holder::make_field_by_type(TABLE *table)
|
||||
if (field)
|
||||
field->init(table);
|
||||
return field;
|
||||
case MYSQL_TYPE_NULL:
|
||||
return make_string_field(table);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -9202,6 +9202,8 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
|
||||
*((*copy_func)++) = item; // Save for copy_funcs
|
||||
if (modify_item)
|
||||
item->set_result_field(new_field);
|
||||
if (item->type() == Item::NULL_ITEM)
|
||||
new_field->is_created_from_null_item= TRUE;
|
||||
return new_field;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user