mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03: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:
@ -79,3 +79,31 @@ uncompress(a) uncompressed_length(a)
|
|||||||
NULL NULL
|
NULL NULL
|
||||||
a 1
|
a 1
|
||||||
drop table t1;
|
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;
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# 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;
|
String buffer;
|
||||||
public:
|
public:
|
||||||
Item_func_uncompress(Item *a): Item_str_func(a){}
|
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";}
|
const char *func_name() const{return "uncompress";}
|
||||||
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user