All pastes #740294 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-10-17 20:45 UTC
rendered paste body
-- Bug seems to exist with MyISAM query re-writer Where a bit
-- field is moved from the WHERE clause to the condition of a
-- LEFT JOIN
-- Is this the same as Bug #31399 ?

DROP TABLE IF EXISTS transact_test;
CREATE TABLE transact_test (
  transactid INT AUTO_INCREMENT,
  productcode VARCHAR(16) NOT NULL,
  issued BIT(1) NOT NULL,
  userid INT NOT NULL,
  PRIMARY KEY(transactid) 
) ENGINE=myisam;

DROP TABLE IF EXISTS users;
CREATE TABLE users (
  userid INT AUTO_INCREMENT,
  username VARCHAR(20) NOT NULL,
  PRIMARY KEY(userid),
  UNIQUE(username)
) ENGINE=myisam;

INSERT INTO users (userid,username) VALUES(1,'test 1');
INSERT INTO users (userid,username) VALUES(2,'test 2');

INSERT INTO transact_test (productcode,issued,userid) VALUES('Product 1',false,1);
INSERT INTO transact_test (productcode,issued,userid) VALUES('Product 2',false,2);

EXPLAIN EXTENDED SELECT t1.productcode,t1.issued,t2.username FROM transact_test t1 LEFT JOIN users t2 ON t1.userid=t2.userid WHERE t1.issued = false;

SHOW WARNINGS;


-- Query is re-written to :
select `test`.`t1`.`productcode` AS `productcode`,`test`.`t1`.`issued` AS `issued`,`test`.`t2`.`username` AS `username` from `test`
.`transact_test` `t1` left join `test`.`users` `t2` on(((`test`.`t1`.`issued` = 0) and (`test`.`t2`.`userid` = 0))) where (`test`.`t1`.`issued` = 0) 

-- notice LEFT JOIN t1.issued = 0 AND t2.userid = 0 WHERE t1.issued = 0


-- Query works when false is replaced with b'0'

EXPLAIN EXTENDED SELECT t1.productcode,t1.issued,t2.username FROM transact_test t1 LEFT JOIN users t2 ON t1.userid=t2.userid WHERE t1.issued = b'0';


-- An equality test is true for false = b'0'

SELECT false = b'0';



-- Codex`@Undernet