mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-36235 Incorrect result for BETWEEN over unique blob prefix
Disallow range optimization for BETWEEN when casting one of the arguments from STRING to a numeric type would be required to construct a range for the query. Adds a new method on Item_func_between called can_optimize_range_const which allows range optimization when the types of the arguments to BETWEEN would permit it.
This commit is contained in:
committed by
Dave Gosselin
parent
07b442aa68
commit
15fd232da4
@@ -2407,3 +2407,26 @@ f::f
|
||||
DROP TABLE t1;
|
||||
SET max_sort_length=DEFAULT;
|
||||
# End of 10.8 tests
|
||||
#
|
||||
# MDEV-36235 Incorrect result for BETWEEN over unique blob prefix
|
||||
#
|
||||
CREATE OR REPLACE TABLE t1 (c1 BINARY(16), UNIQUE (c1));
|
||||
INSERT INTO t1 (c1) VALUES (0x00000000000000000000000000000001);
|
||||
INSERT INTO t1 (c1) VALUES (0x00000000000000000000000000000002);
|
||||
SELECT CAST(c1 AS INET6) FROM t1 WHERE '::1' BETWEEN CAST('::1' AS INET6) AND c1;
|
||||
CAST(c1 AS INET6)
|
||||
::1
|
||||
::2
|
||||
SELECT CAST(c1 AS INET6) FROM t1 IGNORE KEY(c1) WHERE '::1' BETWEEN CAST('::1' AS INET6) AND c1;
|
||||
CAST(c1 AS INET6)
|
||||
::1
|
||||
::2
|
||||
SELECT CAST(c1 AS INET6) FROM t1 WHERE '::2' BETWEEN c1 AND CAST('::2' AS INET6);
|
||||
CAST(c1 AS INET6)
|
||||
::1
|
||||
::2
|
||||
SELECT CAST(c1 AS INET6) FROM t1 IGNORE KEY(c1) WHERE '::2' BETWEEN c1 AND CAST('::2' AS INET6);
|
||||
CAST(c1 AS INET6)
|
||||
::1
|
||||
::2
|
||||
DROP TABLE t1;
|
||||
|
@@ -1741,3 +1741,15 @@ DROP TABLE t1;
|
||||
SET max_sort_length=DEFAULT;
|
||||
|
||||
--echo # End of 10.8 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-36235 Incorrect result for BETWEEN over unique blob prefix
|
||||
--echo #
|
||||
CREATE OR REPLACE TABLE t1 (c1 BINARY(16), UNIQUE (c1));
|
||||
INSERT INTO t1 (c1) VALUES (0x00000000000000000000000000000001);
|
||||
INSERT INTO t1 (c1) VALUES (0x00000000000000000000000000000002);
|
||||
SELECT CAST(c1 AS INET6) FROM t1 WHERE '::1' BETWEEN CAST('::1' AS INET6) AND c1;
|
||||
SELECT CAST(c1 AS INET6) FROM t1 IGNORE KEY(c1) WHERE '::1' BETWEEN CAST('::1' AS INET6) AND c1;
|
||||
SELECT CAST(c1 AS INET6) FROM t1 WHERE '::2' BETWEEN c1 AND CAST('::2' AS INET6);
|
||||
SELECT CAST(c1 AS INET6) FROM t1 IGNORE KEY(c1) WHERE '::2' BETWEEN c1 AND CAST('::2' AS INET6);
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user