Bug #108753 Except subquery assertion error
Submitted: 12 Oct 2022 11:58 Modified: 24 Oct 2022 15:27
Reporter: Pedro Ferreira Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S6 (Debug Builds)
Version:8.0.31 OS:Ubuntu (22.04)
Assigned to: CPU Architecture:x86 (x86_64)
Tags: except, optimization

[12 Oct 2022 11:58] Pedro Ferreira
Description:
The following query:

SELECT ((SELECT 2) EXCEPT ((SELECT 2) EXCEPT (SELECT 2))) IS NULL;

Triggers an assertion error at sql_optimizer.cc:289

assert(query_block->leaf_table_count == 0 ||
       thd->lex->is_query_tables_locked() ||
       query_block == set_operand_block);

The compilation parameters are the same as issue 108148:

-DWITH_DEBUG=1 -DWITH_ASAN=ON -DWITH_UBSAN=ON and boost library version 1.77

How to repeat:
Run the query above.
[12 Oct 2022 12:49] MySQL Verification Team
Hello Pedro Ferreira,

Thank you for the report and feedback.
Observed that 8.0.31 debug build is affected.

regards,
Umesh
[12 Oct 2022 12:53] MySQL Verification Team
-- 8.0.31 debug build

./mtr bug108753 --debug-server --nocheck-testcases
Logging: ./mtr  bug108753 --debug-server --nocheck-testcases
MySQL Version 8.0.31
Checking supported features
 - Binaries are debug compiled
Using 'all' suites
Collecting tests
Checking leftover processes
Removing old var directory
Creating var directory '/export/home/tmp/ushastry/mysql-8.0.31/mysql-test/var'
Installing system database
Using parallel: 1

==============================================================================
                  TEST NAME                       RESULT  TIME (ms) COMMENT
------------------------------------------------------------------------------
SELECT ((SELECT 2) EXCEPT ((SELECT 2) EXCEPT (SELECT 2))) IS NULL;
[ 50%] main.bug108753                            [ fail ]
        Test ended at 2022-10-12 14:49:19

CURRENT_TEST: main.bug108753
mysqltest: At line 1: Query 'SELECT ((SELECT 2) EXCEPT ((SELECT 2) EXCEPT (SELECT 2))) IS NULL' failed.
ERROR 2013 (HY000): Lost connection to MySQL server during query
[24 Oct 2022 15:27] Pedro Ferreira
Today I replaced this issue with a UNION QUERY:

SELECT 1 WHERE EXISTS ((SELECT CAST(X'D297789C20446841F410515CE8413874' AS BINARY)) UNION ALL ((SELECT 2) UNION DISTINCT (SELECT 2))) IS NULL;