Show
added a comment -
The original test case from description works still good on 10.0.10... I has as result 0/0 (not 3/0 as before 10.0.8)
Actually, it doesn't:
MariaDB [test]> CREATE TEMPORARY TABLE A(`id` mediumint, `value` mediumint, PRIMARY KEY(`id`,`value`));
Query OK, 0 rows affected (0.23 sec)
MariaDB [test]> INSERT INTO A VALUES (1,1),(2,2),(3,3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [test]> CREATE TEMPORARY TABLE B(`id` mediumint, PRIMARY KEY(`id`));
Query OK, 0 rows affected (0.17 sec)
MariaDB [test]> INSERT INTO B VALUES (1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [test]> SELECT SQL_CALC_FOUND_ROWS 1 FROM A LEFT JOIN B ON A.`id` = B.`id` WHERE B.`id` IS NULL ORDER BY `value` DESC;
Empty set (0.02 sec)
MariaDB [test]> SELECT FOUND_ROWS() AS `count`;
+-------+
| count |
+-------+
| 3 |
+-------+
1 row in set (0.00 sec)
MariaDB [test]> SELECT COUNT(*) FROM (SELECT 1 FROM A LEFT JOIN B ON A.`id` = B.`id` WHERE B.`id` IS NULL ORDER BY `value` DESC) AS `x`;
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
MariaDB [test]> select @@version;
+-----------------+
| @@version |
+-----------------+
| 10.0.10-MariaDB |
+-----------------+
1 row in set (0.00 sec)
It's rather interesting that it works for you, maybe you have something in your configuration that prevents it from failing.
Answering your other question,
Had someone opportunity to check it on mentioned versions?
here you go:
MariaDB [test]> CREATE TEMPORARY TABLE A(`id` mediumint, `value` mediumint, PRIMARY KEY(`id`,`value`));
Query OK, 0 rows affected (0.19 sec)
MariaDB [test]> INSERT INTO A VALUES (1,1),(2,2),(3,3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [test]> CREATE TEMPORARY TABLE B(`id` mediumint, `val` mediumint, PRIMARY KEY(`id`));
Query OK, 0 rows affected (0.15 sec)
MariaDB [test]> INSERT INTO B VALUES (1,5),(2,5),(3,10);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [test]> CREATE TEMPORARY TABLE C(`id` mediumint, `val` mediumint, PRIMARY KEY(`id`,`val`));
Query OK, 0 rows affected (0.17 sec)
MariaDB [test]> INSERT INTO C VALUES (1,5),(2,5),(3,10);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [test]> CREATE TEMPORARY TABLE D(`id` mediumint, `val` mediumint);
Query OK, 0 rows affected (0.19 sec)
MariaDB [test]> INSERT INTO D VALUES (1,5),(2,5),(3,10);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [test]> -- *** WRONG count, returns 3 instead of 2 :
MariaDB [test]> SELECT SQL_CALC_FOUND_ROWS 1 FROM A
-> LEFT JOIN B ON A.`id` = B.`id`
-> WHERE B.`val` = 5
-> OR A.`value` = 5
-> ORDER BY `value` DESC
-> LIMIT 1; SELECT FOUND_ROWS() AS `count`;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
+-------+
| count |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
MariaDB [test]> -- *** WRONG count also, returns 3 instead of 2 :
MariaDB [test]> SELECT SQL_CALC_FOUND_ROWS 1 FROM A
-> LEFT JOIN C ON A.`id` = C.`id`
-> WHERE C.`val` = 5
-> OR A.`value` = 5
-> ORDER BY `value` DESC
-> LIMIT 1; SELECT FOUND_ROWS() AS `count`;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
+-------+
| count |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
MariaDB [test]> -- *** CORRECT count, returns 2 :
MariaDB [test]> SELECT SQL_CALC_FOUND_ROWS 1 FROM A
-> LEFT JOIN D ON A.`id` = D.`id`
-> WHERE D.`val` = 5
-> OR A.`value` = 5
-> ORDER BY `value` DESC
-> LIMIT 1; SELECT FOUND_ROWS() AS `count`;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
+-------+
| count |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
MariaDB [test]> select @@version;
+----------------+
| @@version |
+----------------+
| 10.0.9-MariaDB |
+----------------+
1 row in set (0.00 sec)
And yes, even then it's still possible that the original fix was not complete, but it doesn't change anything. The new report should be created anyway.
I've testet the same SQL against mysql 5.5 (latest percona server) and it yields the correct result.