Commit 34e84c22 authored by Sergei Golubchik's avatar Sergei Golubchik

5.2 merge

parents 0791692b 5138bf42
...@@ -2631,4 +2631,22 @@ SELECT * FROM t1; ...@@ -2631,4 +2631,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
...@@ -2933,6 +2933,13 @@ ORDER BY min_a; ...@@ -2933,6 +2933,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
# #
......
...@@ -1384,4 +1384,15 @@ LOAD DATA INFILE 'bug58165.txt' INTO TABLE t1; ...@@ -1384,4 +1384,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
...@@ -1155,6 +1155,15 @@ ORDER BY min_a; ...@@ -1155,6 +1155,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() ...@@ -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() ...@@ -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() ...@@ -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);
...@@ -2412,7 +2414,9 @@ void Item_func_repeat::fix_length_and_dec() ...@@ -2412,7 +2414,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;
...@@ -2500,7 +2504,9 @@ void Item_func_rpad::fix_length_and_dec() ...@@ -2500,7 +2504,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;
...@@ -2617,7 +2623,9 @@ void Item_func_lpad::fix_length_and_dec() ...@@ -2617,7 +2623,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;
......
...@@ -13160,9 +13160,10 @@ int QUICK_GROUP_MIN_MAX_SELECT::next_min() ...@@ -13160,9 +13160,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);
/* /*
...@@ -13178,10 +13179,11 @@ int QUICK_GROUP_MIN_MAX_SELECT::next_min() ...@@ -13178,10 +13179,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);
} }
} }
......
...@@ -2129,7 +2129,7 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd) ...@@ -2129,7 +2129,7 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd)
{ {
my_ptrdiff_t adjust_ptrs; my_ptrdiff_t adjust_ptrs;
Field **field,**org_field, *found_next_number_field; Field **field,**org_field, *found_next_number_field;
Field **vfield; Field **UNINIT_VAR(vfield);
TABLE *copy; TABLE *copy;
TABLE_SHARE *share; TABLE_SHARE *share;
uchar *bitmap; uchar *bitmap;
......
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