MDEV-21029 Incorrect result for expression with the <=> operator and IS NULL

Item_func_equal erroneously derived is_null() from the parent class.
Overriding it to return false because <=> can never return NULL.
This commit is contained in:
Alexander Barkov 2024-11-12 11:06:32 +04:00
parent 773cb726a8
commit 2e404c9850
3 changed files with 27 additions and 0 deletions

View file

@ -43,3 +43,14 @@ a
4828532208463511553
drop table t1;
#End of 4.1 tests
# Start of 10.5 tests
#
# MDEV-21029 Incorrect result for expression with the <=> operator and IS NULL
#
CREATE TABLE t0(c0 INT);
INSERT INTO t0 VALUES (1);
SELECT (c0 > (NULL <=> 0)) IS NULL AS c1 FROM t0;
c1
0
DROP TABLE t0;
# End of 10.5 tests

View file

@ -44,3 +44,18 @@ select * from t1 where a in ('4828532208463511553');
drop table t1;
--echo #End of 4.1 tests
--echo # Start of 10.5 tests
--echo #
--echo # MDEV-21029 Incorrect result for expression with the <=> operator and IS NULL
--echo #
CREATE TABLE t0(c0 INT);
INSERT INTO t0 VALUES (1);
SELECT (c0 > (NULL <=> 0)) IS NULL AS c1 FROM t0;
DROP TABLE t0;
--echo # End of 10.5 tests

View file

@ -782,6 +782,7 @@ public:
enum Functype functype() const override { return EQUAL_FUNC; }
enum Functype rev_functype() const override { return EQUAL_FUNC; }
cond_result eq_cmp_result() const override { return COND_TRUE; }
bool is_null() override { return false; }
const char *func_name() const override { return "<=>"; }
Item *neg_transformer(THD *thd) override { return 0; }
void add_key_fields(JOIN *join, KEY_FIELD **key_fields,