Check firebird.log [no messages found for interval when this test was running]
Jump to: output_first_mismatch    outcomes_full_history    elapsed_time_chart
Show cross-report outcomes.

Annotation type Annotation details
2 @message
assert   
  + Initial script failed, check output:
  + Statement failed, SQLSTATE = 22021
  + unsuccessful metadata update
  + -ALTER CHARACTER SET "SYSTEM"."UTF8" failed
  + -COLLATION "SYSTEM"."CI_COLL" for CHARACTER SET "SYSTEM"."UTF8" is not defined
  + After line 16 in file /var/tmp/qa_2024/test_11665/gh_8061.tmp.sql
  - 1000
  - select c3.cust_no
  - from customer c3
  - where exists (
  - select  s3.cust_no
  - from sales s3
  - where s3.cust_no = c3.cust_no and
  - exists (
  - select x.emp_no
  - from employee x
  - where
  - x.job_country = c3.country
  - )
  - )
  - Subqueries that are correlated to non-parent; for example,
  - subquery SQ3 is contained by SQ2 (parent of SQ3) and SQ2 in turn is contained
  - by SQ1 and SQ3 is correlated to tables defined in SQ1.
  - Sub-query
  - ....-> Filter
  - ........-> Table "EMPLOYEE" as "X" Full Scan
  - Sub-query
  - ....-> Filter (preliminary)
  - ........-> Filter
  - ............-> Table "SALES" as "S3" Access By ID
  - ................-> Bitmap
  - ....................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
  - Select Expression
  - ....-> Filter
  - ........-> Table "CUSTOMER" as "C3" Full Scan
  - 2000
  - select c3.cust_no
  - from customer c3
  - where exists (
  - select s3.cust_no
  - from sales s3
  - where s3.cust_no = c3.cust_no
  - group by s3.cust_no
  - )
  - A group-by subquery is correlated; in this case, unnesting implies doing join
  - after group-by. Changing the given order of the two operations may not be always legal.
  - Sub-query
  - ....-> Aggregate
  - ........-> Filter
  - ............-> Table "SALES" as "S3" Access By ID
  - ................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
  - Select Expression
  - ....-> Filter
  - ........-> Table "CUSTOMER" as "C3" Full Scan
  - 3000
  - select s1.cust_no
  - from sales s1
  - where exists (
  - select 1 from customer c1 where s1.cust_no = c1.cust_no
  - union all
  - select 1 from employee x1 where s1.sales_rep = x1.emp_no
  - )
  - For disjunctive subqueries, the outer columns in the connecting
  - or correlating conditions are not the same.
  - Sub-query
  - ....-> Union
  - ........-> Filter
  - ............-> Table "CUSTOMER" as "C1" Access By ID
  - ................-> Bitmap
  - ....................-> Index "CUSTOMER_PK" Unique Scan
  - ........-> Filter
  - ............-> Table "EMPLOYEE" as "X1" Access By ID
  - ................-> Bitmap
  - ....................-> Index "EMPLOYEE_PK" Unique Scan
  - Select Expression
  - ....-> Filter
  - ........-> Table "SALES" as "S1" Full Scan
  - 4000
  - select x1.emp_no
  - from employee x1
  - where
  - (
  - x1.job_country = 'USA' or
  - exists (
  - select 1
  - from sales s1
  - where s1.sales_rep = x1.emp_no
  - )
  - )
  - An `OR` condition in compound WHERE expression, see https://jonathanlewis.wordpress.com/2007/02/26/subquery-with-or/
  - Sub-query
  - ....-> Filter
  - ........-> Table "SALES" as "S1" Access By ID
  - ............-> Bitmap
  - ................-> Index "SALES_EMPLOYEE_FK_SALES_REP" Range Scan (full match)
  - Select Expression
  - ....-> Filter
  - ........-> Table "EMPLOYEE" as "X1" Full Scan

LOG DETAILS:

2025-06-26 05:22:06.181
2025-06-26 05:22:06.186 act = <firebird.qa.plugin.Action object at [hex]>
2025-06-26 05:22:06.192 tmp_sql = PosixPath('/var/tmp/qa_2024/test_11665/gh_8061.tmp.sql')
2025-06-26 05:22:06.199 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-26 05:22:06.207
2025-06-26 05:22:06.219 @pytest.mark.version('>=5.0.1')
2025-06-26 05:22:06.228 def test_1(act: Action, tmp_sql: Path, capsys):
2025-06-26 05:22:06.235 employee_data_sql = zipfile.Path(act.files_dir / 'standard_sample_databases.zip', at='sample-DB_-_firebird.sql')
2025-06-26 05:22:06.245 tmp_sql.write_bytes(employee_data_sql.read_bytes())
2025-06-26 05:22:06.254
2025-06-26 05:22:06.262 act.isql(switches = ['-q'], charset='utf8', input_file = tmp_sql, combine_output = True)
2025-06-26 05:22:06.273
2025-06-26 05:22:06.281 if act.return_code == 0:
2025-06-26 05:22:06.293
2025-06-26 05:22:06.304 srv_cfg = driver_config.register_server(name = f'srv_cfg_8061_addi', config = '')
2025-06-26 05:22:06.313 db_cfg_name = f'db_cfg_8061_addi'
2025-06-26 05:22:06.320 db_cfg_object = driver_config.register_database(name = db_cfg_name)
2025-06-26 05:22:06.328 db_cfg_object.server.value = srv_cfg.name
2025-06-26 05:22:06.335 db_cfg_object.database.value = str(act.db.db_path)
2025-06-26 05:22:06.345 if act.is_version('<6'):
2025-06-26 05:22:06.353 db_cfg_object.config.value = f"""
2025-06-26 05:22:06.365 SubQueryConversion = true
2025-06-26 05:22:06.376 """
2025-06-26 05:22:06.384
2025-06-26 05:22:06.390 with connect(db_cfg_name, user = act.db.user, password = act.db.password) as con:
2025-06-26 05:22:06.398 cur = con.cursor()
2025-06-26 05:22:06.405 for q_idx, q_tuple in query_map.items():
2025-06-26 05:22:06.411 test_sql, qry_comment = q_tuple[:2]
2025-06-26 05:22:06.416 ps = cur.prepare(test_sql)
2025-06-26 05:22:06.423 print(q_idx)
2025-06-26 05:22:06.433 print(test_sql)
2025-06-26 05:22:06.441 print(qry_comment)
2025-06-26 05:22:06.452 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2025-06-26 05:22:06.461 ps.free()
2025-06-26 05:22:06.468
2025-06-26 05:22:06.473 else:
2025-06-26 05:22:06.478 # If retcode !=0 then we can print the whole output of failed gbak:
2025-06-26 05:22:06.483 print('Initial script failed, check output:')
2025-06-26 05:22:06.488 for line in act.clean_stdout.splitlines():
2025-06-26 05:22:06.492 print(line)
2025-06-26 05:22:06.497 act.reset()
2025-06-26 05:22:06.502
2025-06-26 05:22:06.507 act.expected_stdout = f"""
2025-06-26 05:22:06.514 1000
2025-06-26 05:22:06.525 {query_map[1000][0]}
2025-06-26 05:22:06.533 {query_map[1000][1]}
2025-06-26 05:22:06.540 Sub-query
2025-06-26 05:22:06.547 ....-> Filter
2025-06-26 05:22:06.554 ........-> Table "EMPLOYEE" as "X" Full Scan
2025-06-26 05:22:06.562 Sub-query
2025-06-26 05:22:06.568 ....-> Filter (preliminary)
2025-06-26 05:22:06.573 ........-> Filter
2025-06-26 05:22:06.579 ............-> Table "SALES" as "S3" Access By ID
2025-06-26 05:22:06.588 ................-> Bitmap
2025-06-26 05:22:06.594 ....................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
2025-06-26 05:22:06.600 Select Expression
2025-06-26 05:22:06.605 ....-> Filter
2025-06-26 05:22:06.611 ........-> Table "CUSTOMER" as "C3" Full Scan
2025-06-26 05:22:06.617
2025-06-26 05:22:06.622 2000
2025-06-26 05:22:06.628 {query_map[2000][0]}
2025-06-26 05:22:06.635 {query_map[2000][1]}
2025-06-26 05:22:06.643 Sub-query
2025-06-26 05:22:06.655 ....-> Aggregate
2025-06-26 05:22:06.661 ........-> Filter
2025-06-26 05:22:06.673 ............-> Table "SALES" as "S3" Access By ID
2025-06-26 05:22:06.681 ................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
2025-06-26 05:22:06.689 Select Expression
2025-06-26 05:22:06.695 ....-> Filter
2025-06-26 05:22:06.702 ........-> Table "CUSTOMER" as "C3" Full Scan
2025-06-26 05:22:06.707
2025-06-26 05:22:06.713 3000
2025-06-26 05:22:06.719 {query_map[3000][0]}
2025-06-26 05:22:06.724 {query_map[3000][1]}
2025-06-26 05:22:06.730 Sub-query
2025-06-26 05:22:06.737 ....-> Union
2025-06-26 05:22:06.748 ........-> Filter
2025-06-26 05:22:06.757 ............-> Table "CUSTOMER" as "C1" Access By ID
2025-06-26 05:22:06.769 ................-> Bitmap
2025-06-26 05:22:06.779 ....................-> Index "CUSTOMER_PK" Unique Scan
2025-06-26 05:22:06.788 ........-> Filter
2025-06-26 05:22:06.795 ............-> Table "EMPLOYEE" as "X1" Access By ID
2025-06-26 05:22:06.802 ................-> Bitmap
2025-06-26 05:22:06.812 ....................-> Index "EMPLOYEE_PK" Unique Scan
2025-06-26 05:22:06.820 Select Expression
2025-06-26 05:22:06.828 ....-> Filter
2025-06-26 05:22:06.834 ........-> Table "SALES" as "S1" Full Scan
2025-06-26 05:22:06.844
2025-06-26 05:22:06.854 4000
2025-06-26 05:22:06.864 {query_map[4000][0]}
2025-06-26 05:22:06.872 {query_map[4000][1]}
2025-06-26 05:22:06.878 Sub-query
2025-06-26 05:22:06.884 ....-> Filter
2025-06-26 05:22:06.889 ........-> Table "SALES" as "S1" Access By ID
2025-06-26 05:22:06.895 ............-> Bitmap
2025-06-26 05:22:06.901 ................-> Index "SALES_EMPLOYEE_FK_SALES_REP" Range Scan (full match)
2025-06-26 05:22:06.907 Select Expression
2025-06-26 05:22:06.915 ....-> Filter
2025-06-26 05:22:06.921 ........-> Table "EMPLOYEE" as "X1" Full Scan
2025-06-26 05:22:06.927 """
2025-06-26 05:22:06.933 act.stdout = capsys.readouterr().out
2025-06-26 05:22:06.939 >       assert act.clean_stdout == act.clean_expected_stdout
2025-06-26 05:22:06.944 E       assert
2025-06-26 05:22:06.950 E         + Initial script failed, check output:
2025-06-26 05:22:06.956 E         + Statement failed, SQLSTATE = 22021
2025-06-26 05:22:06.963 E         + unsuccessful metadata update
2025-06-26 05:22:06.971 E         + -ALTER CHARACTER SET "SYSTEM"."UTF8" failed
2025-06-26 05:22:06.984 E         + -COLLATION "SYSTEM"."CI_COLL" for CHARACTER SET "SYSTEM"."UTF8" is not defined
2025-06-26 05:22:06.995 E         + After line 16 in file /var/tmp/qa_2024/test_11665/gh_8061.tmp.sql
2025-06-26 05:22:07.003 E         - 1000
2025-06-26 05:22:07.010 E         - select c3.cust_no
2025-06-26 05:22:07.019 E         - from customer c3
2025-06-26 05:22:07.029 E         - where exists (
2025-06-26 05:22:07.041 E         - select  s3.cust_no
2025-06-26 05:22:07.052 E         - from sales s3
2025-06-26 05:22:07.061 E         - where s3.cust_no = c3.cust_no and
2025-06-26 05:22:07.069 E         - exists (
2025-06-26 05:22:07.075 E         - select x.emp_no
2025-06-26 05:22:07.081 E         - from employee x
2025-06-26 05:22:07.086 E         - where
2025-06-26 05:22:07.098 E         - x.job_country = c3.country
2025-06-26 05:22:07.106 E         - )
2025-06-26 05:22:07.113 E         - )
2025-06-26 05:22:07.118 E         - Subqueries that are correlated to non-parent; for example,
2025-06-26 05:22:07.124 E         - subquery SQ3 is contained by SQ2 (parent of SQ3) and SQ2 in turn is contained
2025-06-26 05:22:07.131 E         - by SQ1 and SQ3 is correlated to tables defined in SQ1.
2025-06-26 05:22:07.142 E         - Sub-query
2025-06-26 05:22:07.150 E         - ....-> Filter
2025-06-26 05:22:07.156 E         - ........-> Table "EMPLOYEE" as "X" Full Scan
2025-06-26 05:22:07.162 E         - Sub-query
2025-06-26 05:22:07.173 E         - ....-> Filter (preliminary)
2025-06-26 05:22:07.182 E         - ........-> Filter
2025-06-26 05:22:07.194 E         - ............-> Table "SALES" as "S3" Access By ID
2025-06-26 05:22:07.206 E         - ................-> Bitmap
2025-06-26 05:22:07.218 E         - ....................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
2025-06-26 05:22:07.226 E         - Select Expression
2025-06-26 05:22:07.233 E         - ....-> Filter
2025-06-26 05:22:07.238 E         - ........-> Table "CUSTOMER" as "C3" Full Scan
2025-06-26 05:22:07.250 E         - 2000
2025-06-26 05:22:07.261 E         - select c3.cust_no
2025-06-26 05:22:07.272 E         - from customer c3
2025-06-26 05:22:07.283 E         - where exists (
2025-06-26 05:22:07.290 E         - select s3.cust_no
2025-06-26 05:22:07.297 E         - from sales s3
2025-06-26 05:22:07.304 E         - where s3.cust_no = c3.cust_no
2025-06-26 05:22:07.310 E         - group by s3.cust_no
2025-06-26 05:22:07.316 E         - )
2025-06-26 05:22:07.321 E         - A group-by subquery is correlated; in this case, unnesting implies doing join
2025-06-26 05:22:07.328 E         - after group-by. Changing the given order of the two operations may not be always legal.
2025-06-26 05:22:07.334 E         - Sub-query
2025-06-26 05:22:07.340 E         - ....-> Aggregate
2025-06-26 05:22:07.346 E         - ........-> Filter
2025-06-26 05:22:07.351 E         - ............-> Table "SALES" as "S3" Access By ID
2025-06-26 05:22:07.355 E         - ................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
2025-06-26 05:22:07.359 E         - Select Expression
2025-06-26 05:22:07.364 E         - ....-> Filter
2025-06-26 05:22:07.368 E         - ........-> Table "CUSTOMER" as "C3" Full Scan
2025-06-26 05:22:07.373 E         - 3000
2025-06-26 05:22:07.378 E         - select s1.cust_no
2025-06-26 05:22:07.382 E         - from sales s1
2025-06-26 05:22:07.388 E         - where exists (
2025-06-26 05:22:07.393 E         - select 1 from customer c1 where s1.cust_no = c1.cust_no
2025-06-26 05:22:07.399 E         - union all
2025-06-26 05:22:07.404 E         - select 1 from employee x1 where s1.sales_rep = x1.emp_no
2025-06-26 05:22:07.410 E         - )
2025-06-26 05:22:07.416 E         - For disjunctive subqueries, the outer columns in the connecting
2025-06-26 05:22:07.422 E         - or correlating conditions are not the same.
2025-06-26 05:22:07.432 E         - Sub-query
2025-06-26 05:22:07.440 E         - ....-> Union
2025-06-26 05:22:07.447 E         - ........-> Filter
2025-06-26 05:22:07.454 E         - ............-> Table "CUSTOMER" as "C1" Access By ID
2025-06-26 05:22:07.460 E         - ................-> Bitmap
2025-06-26 05:22:07.466 E         - ....................-> Index "CUSTOMER_PK" Unique Scan
2025-06-26 05:22:07.473 E         - ........-> Filter
2025-06-26 05:22:07.480 E         - ............-> Table "EMPLOYEE" as "X1" Access By ID
2025-06-26 05:22:07.486 E         - ................-> Bitmap
2025-06-26 05:22:07.493 E         - ....................-> Index "EMPLOYEE_PK" Unique Scan
2025-06-26 05:22:07.498 E         - Select Expression
2025-06-26 05:22:07.503 E         - ....-> Filter
2025-06-26 05:22:07.509 E         - ........-> Table "SALES" as "S1" Full Scan
2025-06-26 05:22:07.514 E         - 4000
2025-06-26 05:22:07.524 E         - select x1.emp_no
2025-06-26 05:22:07.533 E         - from employee x1
2025-06-26 05:22:07.540 E         - where
2025-06-26 05:22:07.546 E         - (
2025-06-26 05:22:07.553 E         - x1.job_country = 'USA' or
2025-06-26 05:22:07.558 E         - exists (
2025-06-26 05:22:07.569 E         - select 1
2025-06-26 05:22:07.577 E         - from sales s1
2025-06-26 05:22:07.584 E         - where s1.sales_rep = x1.emp_no
2025-06-26 05:22:07.590 E         - )
2025-06-26 05:22:07.599 E         - )
2025-06-26 05:22:07.608 E         - An `OR` condition in compound WHERE expression, see https://jonathanlewis.wordpress.com/2007/02/26/subquery-with-or/
2025-06-26 05:22:07.617 E         - Sub-query
2025-06-26 05:22:07.623 E         - ....-> Filter
2025-06-26 05:22:07.629 E         - ........-> Table "SALES" as "S1" Access By ID
2025-06-26 05:22:07.634 E         - ............-> Bitmap
2025-06-26 05:22:07.641 E         - ................-> Index "SALES_EMPLOYEE_FK_SALES_REP" Range Scan (full match)
2025-06-26 05:22:07.647 E         - Select Expression
2025-06-26 05:22:07.655 E         - ....-> Filter
2025-06-26 05:22:07.667 E         - ........-> Table "EMPLOYEE" as "X1" Full Scan
2025-06-26 05:22:07.676
2025-06-26 05:22:07.682 tests/bugs/gh_8061_addi_test.py:225: AssertionError
2025-06-26 05:22:07.691 ---------------------------- Captured stdout setup -----------------------------
2025-06-26 05:22:07.699 Creating db: localhost:/var/tmp/qa_2024/test_11665/test.fdb [page_size=None, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
3 #text
act = <firebird.qa.plugin.Action pytest object at [hex]>
tmp_sql = PosixPath('/var/tmp/qa_2024/test_11665/gh_8061.tmp.sql')
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>

    @pytest.mark.version('>=5.0.1')
    def test_1(act: Action, tmp_sql: Path, capsys):
        employee_data_sql = zipfile.Path(act.files_dir / 'standard_sample_databases.zip', at='sample-DB_-_firebird.sql')
        tmp_sql.write_bytes(employee_data_sql.read_bytes())
    
        act.isql(switches = ['-q'], charset='utf8', input_file = tmp_sql, combine_output = True)
    
        if act.return_code == 0:
    
            srv_cfg = driver_config.register_server(name = f'srv_cfg_8061_addi', config = '')
            db_cfg_name = f'db_cfg_8061_addi'
            db_cfg_object = driver_config.register_database(name = db_cfg_name)
            db_cfg_object.server.value = srv_cfg.name
            db_cfg_object.database.value = str(act.db.db_path)
            if act.is_version('<6'):
                db_cfg_object.config.value = f"""
                    SubQueryConversion = true
                """
    
            with connect(db_cfg_name, user = act.db.user, password = act.db.password) as con:
                cur = con.cursor()
                for q_idx, q_tuple in query_map.items():
                    test_sql, qry_comment = q_tuple[:2]
                    ps = cur.prepare(test_sql)
                    print(q_idx)
                    print(test_sql)
                    print(qry_comment)
                    print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
                    ps.free()
    
        else:
            # If retcode !=0 then we can print the whole output of failed gbak:
            print('Initial script failed, check output:')
            for line in act.clean_stdout.splitlines():
                print(line)
        act.reset()
    
        act.expected_stdout = f"""
            1000
            {query_map[1000][0]}
            {query_map[1000][1]}
            Sub-query
            ....-> Filter
            ........-> Table "EMPLOYEE" as "X" Full Scan
            Sub-query
            ....-> Filter (preliminary)
            ........-> Filter
            ............-> Table "SALES" as "S3" Access By ID
            ................-> Bitmap
            ....................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
            Select Expression
            ....-> Filter
            ........-> Table "CUSTOMER" as "C3" Full Scan
    
            2000
            {query_map[2000][0]}
            {query_map[2000][1]}
            Sub-query
            ....-> Aggregate
            ........-> Filter
            ............-> Table "SALES" as "S3" Access By ID
            ................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
            Select Expression
            ....-> Filter
            ........-> Table "CUSTOMER" as "C3" Full Scan
    
            3000
            {query_map[3000][0]}
            {query_map[3000][1]}
            Sub-query
            ....-> Union
            ........-> Filter
            ............-> Table "CUSTOMER" as "C1" Access By ID
            ................-> Bitmap
            ....................-> Index "CUSTOMER_PK" Unique Scan
            ........-> Filter
            ............-> Table "EMPLOYEE" as "X1" Access By ID
            ................-> Bitmap
            ....................-> Index "EMPLOYEE_PK" Unique Scan
            Select Expression
            ....-> Filter
            ........-> Table "SALES" as "S1" Full Scan
    
            4000
            {query_map[4000][0]}
            {query_map[4000][1]}
            Sub-query
            ....-> Filter
            ........-> Table "SALES" as "S1" Access By ID
            ............-> Bitmap
            ................-> Index "SALES_EMPLOYEE_FK_SALES_REP" Range Scan (full match)
            Select Expression
            ....-> Filter
            ........-> Table "EMPLOYEE" as "X1" Full Scan
        """
        act.stdout = capsys.readouterr().out
>       assert act.clean_stdout == act.clean_expected_stdout
E       assert   
E         + Initial script failed, check output:
E         + Statement failed, SQLSTATE = 22021
E         + unsuccessful metadata update
E         + -ALTER CHARACTER SET "SYSTEM"."UTF8" failed
E         + -COLLATION "SYSTEM"."CI_COLL" for CHARACTER SET "SYSTEM"."UTF8" is not defined
E         + After line 16 in file /var/tmp/qa_2024/test_11665/gh_8061.tmp.sql
E         - 1000
E         - select c3.cust_no
E         - from customer c3
E         - where exists (
E         - select  s3.cust_no
E         - from sales s3
E         - where s3.cust_no = c3.cust_no and
E         - exists (
E         - select x.emp_no
E         - from employee x
E         - where
E         - x.job_country = c3.country
E         - )
E         - )
E         - Subqueries that are correlated to non-parent; for example,
E         - subquery SQ3 is contained by SQ2 (parent of SQ3) and SQ2 in turn is contained
E         - by SQ1 and SQ3 is correlated to tables defined in SQ1.
E         - Sub-query
E         - ....-> Filter
E         - ........-> Table "EMPLOYEE" as "X" Full Scan
E         - Sub-query
E         - ....-> Filter (preliminary)
E         - ........-> Filter
E         - ............-> Table "SALES" as "S3" Access By ID
E         - ................-> Bitmap
E         - ....................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
E         - Select Expression
E         - ....-> Filter
E         - ........-> Table "CUSTOMER" as "C3" Full Scan
E         - 2000
E         - select c3.cust_no
E         - from customer c3
E         - where exists (
E         - select s3.cust_no
E         - from sales s3
E         - where s3.cust_no = c3.cust_no
E         - group by s3.cust_no
E         - )
E         - A group-by subquery is correlated; in this case, unnesting implies doing join
E         - after group-by. Changing the given order of the two operations may not be always legal.
E         - Sub-query
E         - ....-> Aggregate
E         - ........-> Filter
E         - ............-> Table "SALES" as "S3" Access By ID
E         - ................-> Index "SALES_CUSTOMER_FK_CUST_NO" Range Scan (full match)
E         - Select Expression
E         - ....-> Filter
E         - ........-> Table "CUSTOMER" as "C3" Full Scan
E         - 3000
E         - select s1.cust_no
E         - from sales s1
E         - where exists (
E         - select 1 from customer c1 where s1.cust_no = c1.cust_no
E         - union all
E         - select 1 from employee x1 where s1.sales_rep = x1.emp_no
E         - )
E         - For disjunctive subqueries, the outer columns in the connecting
E         - or correlating conditions are not the same.
E         - Sub-query
E         - ....-> Union
E         - ........-> Filter
E         - ............-> Table "CUSTOMER" as "C1" Access By ID
E         - ................-> Bitmap
E         - ....................-> Index "CUSTOMER_PK" Unique Scan
E         - ........-> Filter
E         - ............-> Table "EMPLOYEE" as "X1" Access By ID
E         - ................-> Bitmap
E         - ....................-> Index "EMPLOYEE_PK" Unique Scan
E         - Select Expression
E         - ....-> Filter
E         - ........-> Table "SALES" as "S1" Full Scan
E         - 4000
E         - select x1.emp_no
E         - from employee x1
E         - where
E         - (
E         - x1.job_country = 'USA' or
E         - exists (
E         - select 1
E         - from sales s1
E         - where s1.sales_rep = x1.emp_no
E         - )
E         - )
E         - An `OR` condition in compound WHERE expression, see https://jonathanlewis.wordpress.com/2007/02/26/subquery-with-or/
E         - Sub-query
E         - ....-> Filter
E         - ........-> Table "SALES" as "S1" Access By ID
E         - ............-> Bitmap
E         - ................-> Index "SALES_EMPLOYEE_FK_SALES_REP" Range Scan (full match)
E         - Select Expression
E         - ....-> Filter
E         - ........-> Table "EMPLOYEE" as "X1" Full Scan

tests/bugs/gh_8061_addi_test.py:225: AssertionError
Full history of outcomes and elapsed time, ms:
NN SNAP_INFO CS_outcome SS_outcome CS_run_time SS_run_time CS_run_beg CS_run_end SS_run_beg SS_run_end
1 6.0.0.892 2025.07.02 10f7d F F 749 568 2025.07.03 01:45:05.287 2025.07.03 01:45:06.036 2025.07.02 23:10:06.235 2025.07.02 23:10:06.803
2 6.0.0.889 2025.07.01 969ac F F 735 391 2025.07.02 02:13:02.540 2025.07.02 02:13:03.275 2025.07.01 23:23:20.295 2025.07.01 23:23:20.686
3 6.0.0.884 2025.06.30 f7e5f F F 731 640 2025.07.01 02:13:20.053 2025.07.01 02:13:20.784 2025.06.30 23:32:00.262 2025.06.30 23:32:00.902
4 6.0.0.881 2025.06.27 7035d F F 716 671 2025.06.30 02:03:33.501 2025.06.30 02:03:34.217 2025.06.29 23:19:05.703 2025.06.29 23:19:06.374
5 6.0.0.877 2025.06.26 8e38f F F 704 591 2025.06.27 01:42:36.314 2025.06.27 01:42:37.018 2025.06.26 23:10:07.479 2025.06.26 23:10:08.070
6 6.0.0.876 2025.06.25 b1bec F F 623 503 2025.06.26 01:46:26.878 2025.06.26 01:46:27.501 2025.06.25 23:12:02.091 2025.06.25 23:12:02.594
7 6.0.0.863 2025.06.24 c3c20 F F 658 620 2025.06.25 01:46:44.764 2025.06.25 01:46:45.422 2025.06.24 23:11:46.734 2025.06.24 23:11:47.354
8 6.0.0.858 2025.06.23 8d6f7 F F 679 600 2025.06.24 01:47:05.988 2025.06.24 01:47:06.667 2025.06.23 23:11:55.522 2025.06.23 23:11:56.122
9 6.0.0.849 2025.06.20 7b79c F F 666 664 2025.06.21 01:58:38.809 2025.06.21 01:58:39.475 2025.06.20 23:21:07.295 2025.06.20 23:21:07.959
10 6.0.0.848 2025.06.19 c483c F F 736 561 2025.06.20 01:54:59.251 2025.06.20 01:54:59.987 2025.06.19 23:17:55.105 2025.06.19 23:17:55.666
11 6.0.0.845 2025.06.18 22b12 F F 772 760 2025.06.19 02:03:39.020 2025.06.19 02:03:39.792 2025.06.18 23:21:02.099 2025.06.18 23:21:02.859
12 6.0.0.843 2025.06.16 995f4 F F 649 340 2025.06.18 02:01:53.953 2025.06.18 02:01:54.602 2025.06.17 23:23:21.117 2025.06.17 23:23:21.457
13 6.0.0.840 2025.06.14 29bca F F 690 468 2025.06.16 01:53:42.090 2025.06.16 01:53:42.780 2025.06.15 23:15:20.266 2025.06.15 23:15:20.734
14 6.0.0.838 2025.06.13 0e28a F F 743 656 2025.06.14 02:06:44.548 2025.06.14 02:06:45.291 2025.06.13 23:22:58.031 2025.06.13 23:22:58.687
15 6.0.0.835 2025.06.12 2cf29 F F 674 414 2025.06.13 02:06:43.122 2025.06.13 02:06:43.796 2025.06.12 23:27:05.279 2025.06.12 23:27:05.693
16 6.0.0.834 2025.06.11 e889f F F 793 443 2025.06.12 02:01:54.877 2025.06.12 02:01:55.670 2025.06.11 23:23:11.978 2025.06.11 23:23:12.421
17 6.0.0.800 2025.06.10 1f226 P P 1816 1999 2025.06.11 00:28:42.154 2025.06.11 00:28:43.970 2025.06.10 22:21:17.367 2025.06.10 22:21:19.366
18 6.0.0.799 2025.06.07 be644 P P 2150 1176 2025.06.10 00:30:22.389 2025.06.10 00:30:24.539 2025.06.09 22:20:52.946 2025.06.09 22:20:54.122
19 6.0.0.797 2025.06.06 303e8 P P 1143 1964 2025.06.07 00:34:06.259 2025.06.07 00:34:07.402 2025.06.06 22:20:25.174 2025.06.06 22:20:27.138
20 6.0.0.795 2025.05.29 7a71a P P 1076 858 2025.06.06 00:28:57.131 2025.06.06 00:28:58.207 2025.06.05 22:19:34.951 2025.06.05 22:19:35.809
21 6.0.0.792 2025.05.28 b4327 P P 2061 1670 2025.05.29 00:42:49.170 2025.05.29 00:42:51.231 2025.05.28 22:22:29.376 2025.05.28 22:22:31.046
22 6.0.0.791 2025.05.27 02db8 P P 1324 1746 2025.05.28 00:40:05.371 2025.05.28 00:40:06.695 2025.05.27 22:21:34.222 2025.05.27 22:21:35.968
23 6.0.0.789 2025.05.21 64051 P P 1105 949 2025.05.25 00:32:47.178 2025.05.25 00:32:48.283 2025.05.24 22:20:48.298 2025.05.24 22:20:49.247
24 6.0.0.787 2025.05.20 230ad P P 1056 1429 2025.05.21 00:29:54.895 2025.05.21 00:29:55.951 2025.05.20 22:19:11.809 2025.05.20 22:19:13.238
25 6.0.0.783 2025.05.12 37320 P P 1835 1413 2025.05.19 12:03:17.476 2025.05.19 12:03:19.311 2025.05.19 10:07:59.398 2025.05.19 10:08:00.811
26 6.0.0.779 2025.05.11 136fa P P 2288 1324 2025.05.12 00:25:04.306 2025.05.12 00:25:06.594 2025.05.11 22:18:43.386 2025.05.11 22:18:44.710
27 6.0.0.778 2025.05.07 d735e P P 1145 898 2025.05.08 00:27:19.172 2025.05.08 00:27:20.317 2025.05.07 22:17:37.631 2025.05.07 22:17:38.529
28 6.0.0.776 2025.05.06 007cd P P 2167 829 2025.05.07 00:21:33.216 2025.05.07 00:21:35.383 2025.05.06 22:17:33.725 2025.05.06 22:17:34.554
29 6.0.0.770 2025.05.05 82c4a P P 2159 854 2025.05.06 00:20:45.546 2025.05.06 00:20:47.705 2025.05.05 22:16:48.852 2025.05.05 22:16:49.706
30 6.0.0.767 2025.05.01 cdd29 P P 1119 928 2025.05.02 00:18:10.159 2025.05.02 00:18:11.278 2025.05.01 22:16:19.657 2025.05.01 22:16:20.585
31 6.0.0.762 2025.04.30 5cb15 P P 1132 1801 2025.05.01 00:14:17.402 2025.05.01 00:14:18.534 2025.04.30 22:15:04.906 2025.04.30 22:15:06.707
32 6.0.0.755 2025.04.29 739c6 P P 1084 1427 2025.04.30 00:16:58.079 2025.04.30 00:16:59.163 2025.04.29 22:16:22.006 2025.04.29 22:16:23.433
33 6.0.0.753 2025.04.27 29ab3 P P 2262 933 2025.04.28 00:18:58.138 2025.04.28 00:19:00.400 2025.04.27 22:15:43.962 2025.04.27 22:15:44.895
34 6.0.0.745 2025.04.21 78ad8 P P 1049 1089 2025.04.26 00:14:59.082 2025.04.26 00:15:00.131 2025.04.25 22:17:05.229 2025.04.25 22:17:06.318
35 6.0.0.744 2025.04.19 e883a P P 1119 801 2025.04.20 00:17:03.432 2025.04.20 00:17:04.551 2025.04.19 22:16:36.190 2025.04.19 22:16:36.991
36 6.0.0.742 2025.04.17 abc3b P P 2004 872 2025.04.19 00:18:52.650 2025.04.19 00:18:54.654 2025.04.18 22:16:53.398 2025.04.18 22:16:54.270

Elapsed time, ms. Chart for last 36 runs:

Last commits information (all timestamps in UTC):