| Bug #110847 | Prepared SELECT returns different results on consecutive executions. | ||
|---|---|---|---|
| Submitted: | 27 Apr 2023 15:01 | Modified: | 15 May 2023 22:06 |
| Reporter: | Steve H | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Prepared statements | Severity: | S2 (Serious) |
| Version: | 8.0.33 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | regression | ||
[27 Apr 2023 15:01]
Steve H
[28 Apr 2023 8:49]
MySQL Verification Team
Hello Steve H, Thank you for the report and test case. Verified as described. regards, Umesh
[28 Apr 2023 8:50]
MySQL Verification Team
- 8.0.33
mysql> DROP DATABASE window_lag_bug;
Query OK, 1 row affected (0.02 sec)
mysql> CREATE DATABASE IF NOT EXISTS window_lag_bug;
Query OK, 1 row affected (0.01 sec)
mysql> USE window_lag_bug;
Database changed
mysql> DROP TABLE IF EXISTS `data_table`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `data_table` (`uid` INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO `data_table` (`uid`) VALUES (100), (101);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>
mysql> PREPARE stmt1 FROM "SELECT (LAST_VALUE(a.`uid`) OVER `outer_window`) = a.`uid` as `result`
"> FROM
"> (
">
Display all 758 possibilities? (y or n)
"> SELECT
">
Display all 758 possibilities? (y or n)
"> LAG(`uid`) OVER `inner_window` AS `uid_lag`,
">
Display all 758 possibilities? (y or n)
"> `uid` AS `uid`
">
Display all 758 possibilities? (y or n)
"> FROM data_table
">
Display all 758 possibilities? (y or n)
"> WINDOW `inner_window` AS (ORDER BY `uid`)
"> ) AS a
"> WINDOW `outer_window` AS (ORDER BY a.`uid`)
"> ";
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE stmt1;
+--------+
| result |
+--------+
| 1 |
| 1 |
+--------+
2 rows in set (0.00 sec)
mysql> EXECUTE stmt1;
+--------+
| result |
+--------+
| NULL |
| NULL |
+--------+
2 rows in set (0.00 sec)
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.33 |
+-----------+
1 row in set (0.00 sec)
-- 8.0.32 looks like regression in latest GA
mysql> CREATE DATABASE IF NOT EXISTS window_lag_bug;
Query OK, 1 row affected (0.01 sec)
mysql> USE window_lag_bug;
Database changed
mysql> DROP TABLE IF EXISTS `data_table`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `data_table` (`uid` INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO `data_table` (`uid`) VALUES (100), (101);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>
mysql> PREPARE stmt1 FROM "SELECT (LAST_VALUE(a.`uid`) OVER `outer_window`) = a.`uid` as `result` FROM (SELECT LAG(`uid`) OVER `inner_window` AS `uid_lag`, `uid` AS `uid` FROM data_table WINDOW `inner_window` AS (ORDER BY `uid`)) AS a WINDOW `outer_window` AS (ORDER BY a.`uid`)";
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE stmt1;
+--------+
| result |
+--------+
| 1 |
| 1 |
+--------+
2 rows in set (0.00 sec)
mysql> EXECUTE stmt1;
+--------+
| result |
+--------+
| 1 |
| 1 |
+--------+
2 rows in set (0.00 sec)
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.32 |
+-----------+
1 row in set (0.00 sec)
[28 Apr 2023 14:24]
Dag Wanvik
Posted by developer: Bisect says: commit ca5275ff6e778d62d04bd2b3c5956775f7eead28 Author: Dag Wanvik <[email protected]> Date: Wed Feb 8 01:37:23 2023 +0100 Bug#35060385 Item::update_used_tables should also update the PROP_SUBQUERY - for transforms
[15 May 2023 22:06]
Jon Stephens
Documented fix as follows in the MySQL 8.1.0 changelog:
A SELECT within a prepared statement unexpectedly returned
different results on successive executions.
Closed.
[20 Dec 2023 20:18]
Jon Stephens
Also fixed in MySQL 8.0.36.
