mirror of
https://github.com/MariaDB/server.git
synced 2026-04-26 18:25:30 +02:00
MDEV-18968 Both (WHERE 0.1) and (WHERE NOT 0.1) return empty set
This commit is contained in:
parent
ed643f4bb3
commit
6fbbb0853e
8 changed files with 55 additions and 20 deletions
|
|
@ -1979,8 +1979,8 @@ FROM t2);
|
|||
MIN(t2.pk)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'j'
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'j'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
|
||||
EXPLAIN
|
||||
SELECT MIN(t2.pk)
|
||||
|
|
@ -1993,8 +1993,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'j'
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'j'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 'j'
|
||||
|
||||
#
|
||||
# 2) Test that subquery materialization is setup for query with
|
||||
|
|
|
|||
|
|
@ -1019,3 +1019,23 @@ cast('-0.0' as decimal(5,1)) < 0
|
|||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-18968 Both (WHERE 0.1) and (WHERE NOT 0.1) return empty set
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
SELECT CASE WHEN 0.1 THEN 'TRUE' ELSE 'FALSE' END FROM t1;
|
||||
CASE WHEN 0.1 THEN 'TRUE' ELSE 'FALSE' END
|
||||
TRUE
|
||||
SELECT * FROM t1 WHERE 0.1;
|
||||
a
|
||||
10
|
||||
SELECT * FROM t1 WHERE NOT 0.1;
|
||||
a
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
|
|
|
|||
|
|
@ -612,3 +612,24 @@ select cast('-0.0' as decimal(5,1)) < 0;
|
|||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18968 Both (WHERE 0.1) and (WHERE NOT 0.1) return empty set
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
SELECT CASE WHEN 0.1 THEN 'TRUE' ELSE 'FALSE' END FROM t1;
|
||||
SELECT * FROM t1 WHERE 0.1;
|
||||
SELECT * FROM t1 WHERE NOT 0.1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
|
|
|||
|
|
@ -1000,6 +1000,13 @@ public:
|
|||
virtual bool val_bool();
|
||||
virtual String *val_nodeset(String*) { return 0; }
|
||||
|
||||
bool eval_const_cond()
|
||||
{
|
||||
DBUG_ASSERT(const_item());
|
||||
DBUG_ASSERT(!is_expensive());
|
||||
return val_bool();
|
||||
}
|
||||
|
||||
/*
|
||||
save_val() is method of val_* family which stores value in the given
|
||||
field.
|
||||
|
|
|
|||
|
|
@ -4667,7 +4667,7 @@ Item_cond::fix_fields(THD *thd, Item **ref)
|
|||
if (item->const_item() && !item->with_param &&
|
||||
!item->is_expensive() && !cond_has_datetime_is_null(item))
|
||||
{
|
||||
if (item->val_int() == is_and_cond && top_level())
|
||||
if (item->eval_const_cond() == is_and_cond && top_level())
|
||||
{
|
||||
/*
|
||||
a. This is "... AND true_cond AND ..."
|
||||
|
|
|
|||
|
|
@ -68,18 +68,6 @@ bool check_reserved_words(LEX_STRING *name)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
@return
|
||||
TRUE if item is a constant
|
||||
*/
|
||||
|
||||
bool
|
||||
eval_const_cond(COND *cond)
|
||||
{
|
||||
return ((Item_func*) cond)->val_int() ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Test if the sum of arguments overflows the ulonglong range.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2279,7 +2279,6 @@ extern enum_field_types agg_field_type(Item **items, uint nitems,
|
|||
Item *find_date_time_item(Item **args, uint nargs, uint col);
|
||||
double my_double_round(double value, longlong dec, bool dec_unsigned,
|
||||
bool truncate);
|
||||
bool eval_const_cond(COND *cond);
|
||||
|
||||
extern bool volatile mqh_used;
|
||||
|
||||
|
|
|
|||
|
|
@ -15644,7 +15644,7 @@ Item::remove_eq_conds(THD *thd, Item::cond_result *cond_value, bool top_level_ar
|
|||
{
|
||||
if (const_item() && !is_expensive())
|
||||
{
|
||||
*cond_value= eval_const_cond(this) ? Item::COND_TRUE : Item::COND_FALSE;
|
||||
*cond_value= eval_const_cond() ? Item::COND_TRUE : Item::COND_FALSE;
|
||||
return (COND*) 0;
|
||||
}
|
||||
*cond_value= Item::COND_OK;
|
||||
|
|
@ -15658,7 +15658,7 @@ Item_bool_func2::remove_eq_conds(THD *thd, Item::cond_result *cond_value,
|
|||
{
|
||||
if (const_item() && !is_expensive())
|
||||
{
|
||||
*cond_value= eval_const_cond(this) ? Item::COND_TRUE : Item::COND_FALSE;
|
||||
*cond_value= eval_const_cond() ? Item::COND_TRUE : Item::COND_FALSE;
|
||||
return (COND*) 0;
|
||||
}
|
||||
if ((*cond_value= eq_cmp_result()) != Item::COND_OK)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue