[MDEV-10850] Wrong result for WHERE .. (f2=TO_BASE64('test') OR f2=TO_BASE64('TEST')) Created: 2016-09-21  Updated: 2016-09-22  Resolved: 2016-09-22

Status: Closed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 5.5, 10.0, 10.1, 10.2
Fix Version/s: 10.1.18, 10.2.2

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-10556 Assertion `0' failed in virtual void ... Closed
relates to MDEV-10864 Wrong result for WHERE .. (f2=COMPRES... Closed
Sprint: 10.1.18

 Description   

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(64), UNIQUE KEY k1 (f1,f2));
INSERT INTO t1 VALUES ( 'test',to_base64('test')), ('TEST', to_base64('TEST'));
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(64), UNIQUE KEY k1 (f1,f2));
INSERT INTO t1 VALUES ( 'test',to_base64('test')), ('test', to_base64('TEST'));
SELECT * FROM t1 ignore index(k1) WHERE f1='test' AND (f2= to_base64("test") OR f2= to_base64("TEST"));
SELECT * FROM t1                  WHERE f1='test' AND (f2= to_base64("test") OR f2= to_base64("TEST"));
SELECT * FROM t1                  WHERE f1='test' AND (f2= to_base64("TEST") OR f2= to_base64("test"));

The three SELECT queries return three different result sets.
All three queries should return exactly the same result.

The same problem is repeatable with password():

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(64), UNIQUE KEY k1 (f1,f2));
INSERT INTO t1 VALUES ( 'test',password('test')), ('TEST', password('TEST'));
SELECT * FROM t1 ignore index(k1) WHERE f1='test' AND (f2= password("test") OR f2= password("TEST"));
SELECT * FROM t1                  WHERE f1='test' AND (f2= password("test") OR f2= password("TEST"));
SELECT * FROM t1                  WHERE f1='test' AND (f2= password("TEST") OR f2= password("test"));

The same problem is repeatable with hex():

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(64), UNIQUE KEY k1 (f1,f2));
INSERT INTO t1 VALUES ( 'test',hex('test')), ('TEST',hex('TEST'));
SELECT * FROM t1 ignore index(k1) WHERE f1='test' AND (f2= hex("test") OR f2= hex("TEST"));
SELECT * FROM t1                  WHERE f1='test' AND (f2= hex("test") OR f2= hex("TEST"));
SELECT * FROM t1                  WHERE f1='test' AND (f2= hex("TEST") OR f2= hex("test"));



 Comments   
Comment by Alexander Barkov [ 2016-09-22 ]

Fixed by a joint patch for MDEV-10425.
No time spent for MDEV-10850 alone.

Generated at Thu Feb 08 07:45:24 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.