mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.0
into eel.(none):/home/jonas/src/mysql-5.0-push
This commit is contained in:
@ -964,6 +964,13 @@ btr_search_drop_page_hash_index(
|
|||||||
heap = NULL;
|
heap = NULL;
|
||||||
offsets = NULL;
|
offsets = NULL;
|
||||||
|
|
||||||
|
if (block->index == NULL) {
|
||||||
|
|
||||||
|
mem_analyze_corruption((byte*)block);
|
||||||
|
|
||||||
|
ut_a(block->index != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
while (!page_rec_is_supremum(rec)) {
|
while (!page_rec_is_supremum(rec)) {
|
||||||
/* FIXME: in a mixed tree, not all records may have enough
|
/* FIXME: in a mixed tree, not all records may have enough
|
||||||
ordering fields: */
|
ordering fields: */
|
||||||
|
@ -58,7 +58,7 @@ SELECT (1,2,3)=(1,NULL,3);
|
|||||||
NULL
|
NULL
|
||||||
SELECT (1,2,3)=(1,NULL,0);
|
SELECT (1,2,3)=(1,NULL,0);
|
||||||
(1,2,3)=(1,NULL,0)
|
(1,2,3)=(1,NULL,0)
|
||||||
NULL
|
0
|
||||||
SELECT ROW(1,2,3)=ROW(1,2,3);
|
SELECT ROW(1,2,3)=ROW(1,2,3);
|
||||||
ROW(1,2,3)=ROW(1,2,3)
|
ROW(1,2,3)=ROW(1,2,3)
|
||||||
1
|
1
|
||||||
@ -175,3 +175,9 @@ ROW(2,10) <=> ROW(3,4)
|
|||||||
SELECT ROW(NULL,10) <=> ROW(3,NULL);
|
SELECT ROW(NULL,10) <=> ROW(3,NULL);
|
||||||
ROW(NULL,10) <=> ROW(3,NULL)
|
ROW(NULL,10) <=> ROW(3,NULL)
|
||||||
0
|
0
|
||||||
|
SELECT ROW(1,1,1) = ROW(1,1,1) as `1`, ROW(1,1,1) = ROW(1,2,1) as `0`, ROW(1,NULL,1) = ROW(2,2,1) as `0`, ROW(1,NULL,1) = ROW(1,2,2) as `0`, ROW(1,NULL,1) = ROW(1,2,1) as `null` ;
|
||||||
|
1 0 0 0 null
|
||||||
|
1 0 0 0 NULL
|
||||||
|
select row(NULL,1)=(2,0);
|
||||||
|
row(NULL,1)=(2,0)
|
||||||
|
0
|
||||||
|
@ -9,7 +9,7 @@ drop database if exists mysqltest;
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1008 Can't drop database 'mysqltest'; database doesn't exist
|
Note 1008 Can't drop database 'mysqltest'; database doesn't exist
|
||||||
show tables from mysqltest;
|
show tables from mysqltest;
|
||||||
ERROR HY000: Can't read dir of './mysqltest/' (Errcode: X)
|
ERROR 42000: Unknown database 'mysqltest'
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
Warnings:
|
Warnings:
|
||||||
|
@ -923,7 +923,7 @@ select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a'),(select c from t
|
|||||||
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a') (select c from t1 where a=t2.a)
|
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a') (select c from t1 where a=t2.a)
|
||||||
1 1 a
|
1 1 a
|
||||||
2 0 b
|
2 0 b
|
||||||
NULL NULL NULL
|
NULL 0 NULL
|
||||||
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2;
|
select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2;
|
||||||
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b') (select c from t1 where a=t2.a)
|
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b') (select c from t1 where a=t2.a)
|
||||||
1 0 a
|
1 0 a
|
||||||
@ -933,7 +933,7 @@ select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c'),(select c from t
|
|||||||
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c') (select c from t1 where a=t2.a)
|
a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c') (select c from t1 where a=t2.a)
|
||||||
1 0 a
|
1 0 a
|
||||||
2 0 b
|
2 0 b
|
||||||
NULL NULL NULL
|
NULL 0 NULL
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
create table t1 (a int, b real, c varchar(10));
|
create table t1 (a int, b real, c varchar(10));
|
||||||
insert into t1 values (1, 1, 'a'), (2,2,'b'), (NULL, 2, 'b');
|
insert into t1 values (1, 1, 'a'), (2,2,'b'), (NULL, 2, 'b');
|
||||||
|
@ -86,3 +86,9 @@ SELECT ROW(2,10) <=> ROW(3,4);
|
|||||||
SELECT ROW(NULL,10) <=> ROW(3,NULL);
|
SELECT ROW(NULL,10) <=> ROW(3,NULL);
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Correct NULL handling in row comporison (BUG#12509)
|
||||||
|
#
|
||||||
|
SELECT ROW(1,1,1) = ROW(1,1,1) as `1`, ROW(1,1,1) = ROW(1,2,1) as `0`, ROW(1,NULL,1) = ROW(2,2,1) as `0`, ROW(1,NULL,1) = ROW(1,2,2) as `0`, ROW(1,NULL,1) = ROW(1,2,1) as `null` ;
|
||||||
|
select row(NULL,1)=(2,0);
|
||||||
|
@ -7,7 +7,7 @@ drop database if exists mysqltest;
|
|||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
# can't read dir
|
# can't read dir
|
||||||
--replace_result "Errcode: 1" "Errcode: X" "Errcode: 2" "Errcode: X" \\ /
|
--replace_result "Errcode: 1" "Errcode: X" "Errcode: 2" "Errcode: X" \\ /
|
||||||
--error 12
|
--error 1049
|
||||||
show tables from mysqltest;
|
show tables from mysqltest;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
|
@ -614,17 +614,35 @@ int Arg_comparator::compare_e_int_diff_signedness()
|
|||||||
int Arg_comparator::compare_row()
|
int Arg_comparator::compare_row()
|
||||||
{
|
{
|
||||||
int res= 0;
|
int res= 0;
|
||||||
|
bool was_null= 0;
|
||||||
(*a)->bring_value();
|
(*a)->bring_value();
|
||||||
(*b)->bring_value();
|
(*b)->bring_value();
|
||||||
uint n= (*a)->cols();
|
uint n= (*a)->cols();
|
||||||
for (uint i= 0; i<n; i++)
|
for (uint i= 0; i<n; i++)
|
||||||
{
|
{
|
||||||
if ((res= comparators[i].compare()))
|
res= comparators[i].compare();
|
||||||
return res;
|
|
||||||
if (owner->null_value)
|
if (owner->null_value)
|
||||||
return -1;
|
{
|
||||||
|
// NULL was compared
|
||||||
|
if (owner->abort_on_null)
|
||||||
|
return -1; // We do not need correct NULL returning
|
||||||
|
was_null= 1;
|
||||||
|
owner->null_value= 0;
|
||||||
|
res= 0; // continue comparison (maybe we will meet explicit difference)
|
||||||
|
}
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
return res;
|
if (was_null)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
There was NULL(s) in comparison in some parts, but there was not
|
||||||
|
explicit difference in other parts, so we have to return NULL
|
||||||
|
*/
|
||||||
|
owner->null_value= 1;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Arg_comparator::compare_e_row()
|
int Arg_comparator::compare_e_row()
|
||||||
|
@ -193,10 +193,11 @@ class Item_bool_func2 :public Item_int_func
|
|||||||
protected:
|
protected:
|
||||||
Arg_comparator cmp;
|
Arg_comparator cmp;
|
||||||
String tmp_value1,tmp_value2;
|
String tmp_value1,tmp_value2;
|
||||||
|
bool abort_on_null;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Item_bool_func2(Item *a,Item *b)
|
Item_bool_func2(Item *a,Item *b)
|
||||||
:Item_int_func(a,b), cmp(tmp_arg, tmp_arg+1) {}
|
:Item_int_func(a,b), cmp(tmp_arg, tmp_arg+1), abort_on_null(FALSE) {}
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void set_cmp_func()
|
void set_cmp_func()
|
||||||
{
|
{
|
||||||
@ -210,6 +211,7 @@ public:
|
|||||||
bool is_bool_func() { return 1; }
|
bool is_bool_func() { return 1; }
|
||||||
CHARSET_INFO *compare_collation() { return cmp.cmp_collation.collation; }
|
CHARSET_INFO *compare_collation() { return cmp.cmp_collation.collation; }
|
||||||
uint decimal_precision() const { return 1; }
|
uint decimal_precision() const { return 1; }
|
||||||
|
void top_level_item() { abort_on_null=1; }
|
||||||
|
|
||||||
friend class Arg_comparator;
|
friend class Arg_comparator;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user