5.1 merge
This commit is contained in:
commit
e400450f2d
@ -2628,4 +2628,22 @@ SELECT * FROM t1;
|
|||||||
a
|
a
|
||||||
aaaaaaaaaaaaaa
|
aaaaaaaaaaaaaa
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
SELECT SUBSTRING('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
SUBSTRING('1', DAY(FROM_UNIXTIME(-1)))
|
||||||
|
NULL
|
||||||
|
SELECT LEFT('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
LEFT('1', DAY(FROM_UNIXTIME(-1)))
|
||||||
|
NULL
|
||||||
|
SELECT RIGHT('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
RIGHT('1', DAY(FROM_UNIXTIME(-1)))
|
||||||
|
NULL
|
||||||
|
SELECT REPEAT('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
REPEAT('1', DAY(FROM_UNIXTIME(-1)))
|
||||||
|
NULL
|
||||||
|
SELECT RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?');
|
||||||
|
RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?')
|
||||||
|
NULL
|
||||||
|
SELECT LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?');
|
||||||
|
LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?')
|
||||||
|
NULL
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -2780,6 +2780,13 @@ ORDER BY min_a;
|
|||||||
min_a
|
min_a
|
||||||
NULL
|
NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a int, b varchar(1), key(b,a)) engine=myisam;
|
||||||
|
insert t1 values (1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(null,'i');
|
||||||
|
select min(a), b from t1 where a=7 or b='z' group by b;
|
||||||
|
min(a) b
|
||||||
|
7 g
|
||||||
|
flush tables;
|
||||||
|
drop table t1;
|
||||||
#
|
#
|
||||||
# LP BUG#888456 Wrong result with DISTINCT , ANY , subquery_cache=off , NOT NULL
|
# LP BUG#888456 Wrong result with DISTINCT , ANY , subquery_cache=off , NOT NULL
|
||||||
#
|
#
|
||||||
|
@ -1380,4 +1380,15 @@ LOAD DATA INFILE 'bug58165.txt' INTO TABLE t1;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-759 lp:998340 - Valgrind complains on simple selects containing expression DAY(FROM_UNIXTIME(-1))
|
||||||
|
#
|
||||||
|
SELECT SUBSTRING('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
SELECT LEFT('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
SELECT RIGHT('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
SELECT REPEAT('1', DAY(FROM_UNIXTIME(-1)));
|
||||||
|
SELECT RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?');
|
||||||
|
SELECT LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?');
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -1099,6 +1099,15 @@ ORDER BY min_a;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-729 lp:998028 - Server crashes on normal shutdown in closefrm after executing a query from MyISAM table
|
||||||
|
#
|
||||||
|
create table t1 (a int, b varchar(1), key(b,a)) engine=myisam;
|
||||||
|
insert t1 values (1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(null,'i');
|
||||||
|
select min(a), b from t1 where a=7 or b='z' group by b;
|
||||||
|
flush tables;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # LP BUG#888456 Wrong result with DISTINCT , ANY , subquery_cache=off , NOT NULL
|
--echo # LP BUG#888456 Wrong result with DISTINCT , ANY , subquery_cache=off , NOT NULL
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1167,7 +1167,7 @@ void Item_str_func::left_right_max_length()
|
|||||||
if (args[1]->const_item())
|
if (args[1]->const_item())
|
||||||
{
|
{
|
||||||
int length=(int) args[1]->val_int()*collation.collation->mbmaxlen;
|
int length=(int) args[1]->val_int()*collation.collation->mbmaxlen;
|
||||||
if (length <= 0)
|
if (args[1]->null_value || length <= 0)
|
||||||
max_length=0;
|
max_length=0;
|
||||||
else
|
else
|
||||||
set_if_smaller(max_length,(uint) length);
|
set_if_smaller(max_length,(uint) length);
|
||||||
@ -1270,7 +1270,9 @@ void Item_func_substr::fix_length_and_dec()
|
|||||||
if (args[1]->const_item())
|
if (args[1]->const_item())
|
||||||
{
|
{
|
||||||
int32 start= (int32) args[1]->val_int();
|
int32 start= (int32) args[1]->val_int();
|
||||||
if (start < 0)
|
if (args[1]->null_value)
|
||||||
|
max_length= 0;
|
||||||
|
else if (start < 0)
|
||||||
max_length= ((uint)(-start) > max_length) ? 0 : (uint)(-start);
|
max_length= ((uint)(-start) > max_length) ? 0 : (uint)(-start);
|
||||||
else
|
else
|
||||||
max_length-= min((uint)(start - 1), max_length);
|
max_length-= min((uint)(start - 1), max_length);
|
||||||
@ -1278,7 +1280,7 @@ void Item_func_substr::fix_length_and_dec()
|
|||||||
if (arg_count == 3 && args[2]->const_item())
|
if (arg_count == 3 && args[2]->const_item())
|
||||||
{
|
{
|
||||||
int32 length= (int32) args[2]->val_int();
|
int32 length= (int32) args[2]->val_int();
|
||||||
if (length <= 0)
|
if (args[2]->null_value || length <= 0)
|
||||||
max_length=0; /* purecov: inspected */
|
max_length=0; /* purecov: inspected */
|
||||||
else
|
else
|
||||||
set_if_smaller(max_length,(uint) length);
|
set_if_smaller(max_length,(uint) length);
|
||||||
@ -2411,7 +2413,9 @@ void Item_func_repeat::fix_length_and_dec()
|
|||||||
|
|
||||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||||
if (count > INT_MAX32)
|
if (args[1]->null_value)
|
||||||
|
count= 0;
|
||||||
|
else if (count > INT_MAX32)
|
||||||
count= INT_MAX32;
|
count= INT_MAX32;
|
||||||
|
|
||||||
ulonglong max_result_length= (ulonglong) args[0]->max_length * count;
|
ulonglong max_result_length= (ulonglong) args[0]->max_length * count;
|
||||||
@ -2499,7 +2503,9 @@ void Item_func_rpad::fix_length_and_dec()
|
|||||||
|
|
||||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||||
if (temp > INT_MAX32)
|
if (args[1]->null_value)
|
||||||
|
temp= 0;
|
||||||
|
else if (temp > INT_MAX32)
|
||||||
temp = INT_MAX32;
|
temp = INT_MAX32;
|
||||||
|
|
||||||
length= temp * collation.collation->mbmaxlen;
|
length= temp * collation.collation->mbmaxlen;
|
||||||
@ -2616,7 +2622,9 @@ void Item_func_lpad::fix_length_and_dec()
|
|||||||
|
|
||||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||||
if (temp > INT_MAX32)
|
if (args[1]->null_value)
|
||||||
|
temp= 0;
|
||||||
|
else if (temp > INT_MAX32)
|
||||||
temp= INT_MAX32;
|
temp= INT_MAX32;
|
||||||
|
|
||||||
length= temp * collation.collation->mbmaxlen;
|
length= temp * collation.collation->mbmaxlen;
|
||||||
|
@ -10826,9 +10826,10 @@ int QUICK_GROUP_MIN_MAX_SELECT::next_min()
|
|||||||
*/
|
*/
|
||||||
if (min_max_arg_part && min_max_arg_part->field->is_null())
|
if (min_max_arg_part && min_max_arg_part->field->is_null())
|
||||||
{
|
{
|
||||||
|
uchar *tmp_key_buff= (uchar*)my_alloca(max_used_key_length);
|
||||||
/* Find the first subsequent record without NULL in the MIN/MAX field. */
|
/* Find the first subsequent record without NULL in the MIN/MAX field. */
|
||||||
key_copy(tmp_record, record, index_info, max_used_key_length);
|
key_copy(tmp_key_buff, record, index_info, max_used_key_length);
|
||||||
result= file->ha_index_read_map(record, tmp_record,
|
result= file->ha_index_read_map(record, tmp_key_buff,
|
||||||
make_keypart_map(real_key_parts),
|
make_keypart_map(real_key_parts),
|
||||||
HA_READ_AFTER_KEY);
|
HA_READ_AFTER_KEY);
|
||||||
/*
|
/*
|
||||||
@ -10844,10 +10845,11 @@ int QUICK_GROUP_MIN_MAX_SELECT::next_min()
|
|||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
if (key_cmp(index_info->key_part, group_prefix, real_prefix_len))
|
if (key_cmp(index_info->key_part, group_prefix, real_prefix_len))
|
||||||
key_restore(record, tmp_record, index_info, 0);
|
key_restore(record, tmp_key_buff, index_info, 0);
|
||||||
}
|
}
|
||||||
else if (result == HA_ERR_KEY_NOT_FOUND || result == HA_ERR_END_OF_FILE)
|
else if (result == HA_ERR_KEY_NOT_FOUND || result == HA_ERR_END_OF_FILE)
|
||||||
result= 0; /* There is a result in any case. */
|
result= 0; /* There is a result in any case. */
|
||||||
|
my_afree(tmp_key_buff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user