mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Bug #18539: uncompress(d) is null: impossible?
The UNCOMPRESS() function was not marked as maybe_null, even though it returns NULL on invalid data. This confused the optimizer. mysql-test/r/func_compress.result: Add new results mysql-test/t/func_compress.test: Add new regression test sql/item_strfunc.h: Set maybe_null within Item_func_uncompress::fix_length_and_dec()
This commit is contained in:
parent
66fc547d1b
commit
8dc1fa1cf1
3 changed files with 43 additions and 1 deletions
|
@ -79,3 +79,31 @@ uncompress(a) uncompressed_length(a)
|
|||
NULL NULL
|
||||
a 1
|
||||
drop table t1;
|
||||
create table t1 (a varchar(32) not null);
|
||||
insert into t1 values ('foo');
|
||||
explain select * from t1 where uncompress(a) is null;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
Warnings:
|
||||
Error 1256 Uncompressed data size too large; the maximum size is 104857600 (probably, length of uncompressed data was corrupted)
|
||||
select * from t1 where uncompress(a) is null;
|
||||
a
|
||||
foo
|
||||
Warnings:
|
||||
Error 1256 Uncompressed data size too large; the maximum size is 104857600 (probably, length of uncompressed data was corrupted)
|
||||
explain select *, uncompress(a) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
select *, uncompress(a) from t1;
|
||||
a uncompress(a)
|
||||
foo NULL
|
||||
Warnings:
|
||||
Error 1256 Uncompressed data size too large; the maximum size is 104857600 (probably, length of uncompressed data was corrupted)
|
||||
select *, uncompress(a), uncompress(a) is null from t1;
|
||||
a uncompress(a) uncompress(a) is null
|
||||
foo NULL 1
|
||||
Warnings:
|
||||
Error 1256 Uncompressed data size too large; the maximum size is 104857600 (probably, length of uncompressed data was corrupted)
|
||||
Error 1256 Uncompressed data size too large; the maximum size is 104857600 (probably, length of uncompressed data was corrupted)
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -57,3 +57,17 @@ select uncompress(a), uncompressed_length(a) from t1;
|
|||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug #18539: uncompress(d) is null: impossible?
|
||||
#
|
||||
create table t1 (a varchar(32) not null);
|
||||
insert into t1 values ('foo');
|
||||
explain select * from t1 where uncompress(a) is null;
|
||||
select * from t1 where uncompress(a) is null;
|
||||
explain select *, uncompress(a) from t1;
|
||||
select *, uncompress(a) from t1;
|
||||
select *, uncompress(a), uncompress(a) is null from t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -784,7 +784,7 @@ class Item_func_uncompress: public Item_str_func
|
|||
String buffer;
|
||||
public:
|
||||
Item_func_uncompress(Item *a): Item_str_func(a){}
|
||||
void fix_length_and_dec(){max_length= MAX_BLOB_WIDTH;}
|
||||
void fix_length_and_dec(){ maybe_null= 1; max_length= MAX_BLOB_WIDTH; }
|
||||
const char *func_name() const{return "uncompress";}
|
||||
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue