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   
    Sub-query
    ....-> Filter
  - ........-> Table "CUSTOMER" as "C" Access By ID
  + ........-> Table "PUBLIC"."CUSTOMER" as "C" Access By ID
    ............-> Bitmap
  - ................-> Index "RDB$PRIMARY22" Unique Scan
  + ................-> Index "PUBLIC"."RDB$PRIMARY22" Unique Scan
    Select Expression
    ....-> First N Records
    ........-> Filter
  - ............-> Table "SALES" as "S" Full Scan
  + ............-> Table "PUBLIC"."SALES" as "S" Full Scan
    1
    1
    1
    1
    1

LOG DETAILS:

2025-06-27 06:37:14.739
2025-06-27 06:37:14.739 act = <firebird.qa.plugin.Action object at [hex]>
2025-06-27 06:37:14.739 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-27 06:37:14.739
2025-06-27 06:37:14.739     @pytest.mark.version('>=5.0.2')
2025-06-27 06:37:14.739     def test_1(act: Action, capsys):
2025-06-27 06:37:14.739
2025-06-27 06:37:14.739         srv_cfg = driver_config.register_server(name = 'test_srv_gh_8252', config = '')
2025-06-27 06:37:14.739         db_cfg_name = f'db_cfg_8252'
2025-06-27 06:37:14.739         db_cfg_object = driver_config.register_database(name = db_cfg_name)
2025-06-27 06:37:14.739         db_cfg_object.server.value = srv_cfg.name
2025-06-27 06:37:14.739         db_cfg_object.database.value = 'employee'
2025-06-27 06:37:14.739         if act.is_version('<6'):
2025-06-27 06:37:14.739             db_cfg_object.config.value = f"""
2025-06-27 06:37:14.739                 SubQueryConversion = true
2025-06-27 06:37:14.739         """
2025-06-27 06:37:14.739
2025-06-27 06:37:14.739         with connect(db_cfg_name, user = act.db.user, password = act.db.password) as con:
2025-06-27 06:37:14.740             cur = con.cursor()
2025-06-27 06:37:14.740             ps = cur.prepare(test_sql)
2025-06-27 06:37:14.740             # Show explained plan:
2025-06-27 06:37:14.740             print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2025-06-27 06:37:14.740
2025-06-27 06:37:14.740             # ::: NB ::: 'ps' returns data, i.e. this is SELECTABLE expression.
2025-06-27 06:37:14.740             # We have to store result of cur.execute(<psInstance>) in order to
2025-06-27 06:37:14.740             # close it explicitly.
2025-06-27 06:37:14.740             # Otherwise AV can occur during Python garbage collection and this
2025-06-27 06:37:14.740             # causes pytest to hang on its final point.
2025-06-27 06:37:14.740             # Explained by hvlad, email 26.10.24 17:42
2025-06-27 06:37:14.740             rs = cur.execute(ps)
2025-06-27 06:37:14.740             for r in rs:
2025-06-27 06:37:14.740                 print(r[0])
2025-06-27 06:37:14.740
2025-06-27 06:37:14.740             rs.close() # <<< EXPLICITLY CLOSING CURSOR RESULTS
2025-06-27 06:37:14.740             ps.free()
2025-06-27 06:37:14.740
2025-06-27 06:37:14.740             con.rollback()
2025-06-27 06:37:14.740
2025-06-27 06:37:14.741         act.expected_stdout = """
2025-06-27 06:37:14.741             Sub-query
2025-06-27 06:37:14.741             ....-> Filter
2025-06-27 06:37:14.741             ........-> Table "CUSTOMER" as "C" Access By ID
2025-06-27 06:37:14.741             ............-> Bitmap
2025-06-27 06:37:14.741             ................-> Index "RDB$PRIMARY22" Unique Scan
2025-06-27 06:37:14.741             Select Expression
2025-06-27 06:37:14.741             ....-> First N Records
2025-06-27 06:37:14.741             ........-> Filter
2025-06-27 06:37:14.741             ............-> Table "SALES" as "S" Full Scan
2025-06-27 06:37:14.741             1
2025-06-27 06:37:14.741             1
2025-06-27 06:37:14.741             1
2025-06-27 06:37:14.741             1
2025-06-27 06:37:14.741             1
2025-06-27 06:37:14.741         """
2025-06-27 06:37:14.741         act.stdout = capsys.readouterr().out
2025-06-27 06:37:14.741 >       assert act.clean_stdout == act.clean_expected_stdout
2025-06-27 06:37:14.741 E       assert
2025-06-27 06:37:14.742 E           Sub-query
2025-06-27 06:37:14.742 E           ....-> Filter
2025-06-27 06:37:14.742 E         - ........-> Table "CUSTOMER" as "C" Access By ID
2025-06-27 06:37:14.742 E         + ........-> Table "PUBLIC"."CUSTOMER" as "C" Access By ID
2025-06-27 06:37:14.742 E           ............-> Bitmap
2025-06-27 06:37:14.742 E         - ................-> Index "RDB$PRIMARY22" Unique Scan
2025-06-27 06:37:14.742 E         + ................-> Index "PUBLIC"."RDB$PRIMARY22" Unique Scan
2025-06-27 06:37:14.742 E           Select Expression
2025-06-27 06:37:14.742 E           ....-> First N Records
2025-06-27 06:37:14.742 E           ........-> Filter
2025-06-27 06:37:14.742 E         - ............-> Table "SALES" as "S" Full Scan
2025-06-27 06:37:14.742 E         + ............-> Table "PUBLIC"."SALES" as "S" Full Scan
2025-06-27 06:37:14.742 E           1
2025-06-27 06:37:14.742 E           1
2025-06-27 06:37:14.742 E           1
2025-06-27 06:37:14.742 E           1
2025-06-27 06:37:14.742 E           1
2025-06-27 06:37:14.743
2025-06-27 06:37:14.743 tests\bugs\gh_8252_test.py:111: AssertionError
2025-06-27 06:37:14.743 ---------------------------- Captured stdout setup ----------------------------
2025-06-27 06:37:14.743 Creating db: localhost:H:\QA\temp\qa2024.tmp\fbqa\test_11734\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]>
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>

    @pytest.mark.version('>=5.0.2')
    def test_1(act: Action, capsys):
    
        srv_cfg = driver_config.register_server(name = 'test_srv_gh_8252', config = '')
        db_cfg_name = f'db_cfg_8252'
        db_cfg_object = driver_config.register_database(name = db_cfg_name)
        db_cfg_object.server.value = srv_cfg.name
        db_cfg_object.database.value = 'employee'
        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()
            ps = cur.prepare(test_sql)
            # Show explained plan:
            print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
    
            # ::: NB ::: 'ps' returns data, i.e. this is SELECTABLE expression.
            # We have to store result of cur.execute(<psInstance>) in order to
            # close it explicitly.
            # Otherwise AV can occur during Python garbage collection and this
            # causes pytest to hang on its final point.
            # Explained by hvlad, email 26.10.24 17:42
            rs = cur.execute(ps)
            for r in rs:
                print(r[0])
    
            rs.close() # <<< EXPLICITLY CLOSING CURSOR RESULTS
            ps.free()
    
            con.rollback()
    
        act.expected_stdout = """
            Sub-query
            ....-> Filter
            ........-> Table "CUSTOMER" as "C" Access By ID
            ............-> Bitmap
            ................-> Index "RDB$PRIMARY22" Unique Scan
            Select Expression
            ....-> First N Records
            ........-> Filter
            ............-> Table "SALES" as "S" Full Scan
            1
            1
            1
            1
            1
        """
        act.stdout = capsys.readouterr().out
>       assert act.clean_stdout == act.clean_expected_stdout
E       assert   
E           Sub-query
E           ....-> Filter
E         - ........-> Table "CUSTOMER" as "C" Access By ID
E         + ........-> Table "PUBLIC"."CUSTOMER" as "C" Access By ID
E           ............-> Bitmap
E         - ................-> Index "RDB$PRIMARY22" Unique Scan
E         + ................-> Index "PUBLIC"."RDB$PRIMARY22" Unique Scan
E           Select Expression
E           ....-> First N Records
E           ........-> Filter
E         - ............-> Table "SALES" as "S" Full Scan
E         + ............-> Table "PUBLIC"."SALES" as "S" Full Scan
E           1
E           1
E           1
E           1
E           1

tests\bugs\gh_8252_test.py:111: 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.877 2025.06.26 8e38f F F 456 286 2025.06.27 03:13:27.741 2025.06.27 03:13:28.197 2025.06.27 01:30:59.583 2025.06.27 01:30:59.869
2 6.0.0.876 2025.06.25 b1bec F F 444 288 2025.06.26 03:18:46.112 2025.06.26 03:18:46.556 2025.06.26 01:36:38.473 2025.06.26 01:36:38.761
3 6.0.0.863 2025.06.24 c3c20 F F 456 282 2025.06.25 08:02:55.635 2025.06.25 08:02:56.091 2025.06.25 01:30:39.986 2025.06.25 01:30:40.268
4 6.0.0.858 2025.06.24 cbbbf F F 443 280 2025.06.24 17:45:28.015 2025.06.24 17:45:28.458 2025.06.24 16:02:37.819 2025.06.24 16:02:38.099
5 6.0.0.858 2025.06.23 d377c F F 450 282 2025.06.24 08:57:29.643 2025.06.24 08:57:30.093 2025.06.24 07:15:00.178 2025.06.24 07:15:00.460
6 6.0.0.854 2025.06.23 10b58 F F 430 288 2025.06.23 15:38:21.660 2025.06.23 15:38:22.090 2025.06.23 13:54:32.878 2025.06.23 13:54:33.166
7 6.0.0.849 2025.06.20 7b79c F F 441 287 2025.06.21 03:16:40.444 2025.06.21 03:16:40.885 2025.06.21 01:31:12.429 2025.06.21 01:31:12.716
8 6.0.0.848 2025.06.19 c483c F F 459 282 2025.06.20 03:16:18.037 2025.06.20 03:16:18.496 2025.06.20 01:30:57.771 2025.06.20 01:30:58.053
9 6.0.0.845 2025.06.18 20191 F F 437 285 2025.06.19 03:15:56.494 2025.06.19 03:15:56.931 2025.06.19 01:30:45.173 2025.06.19 01:30:45.458
10 6.0.0.843 2025.06.16 995f4 F F 436 286 2025.06.18 03:15:43.385 2025.06.18 03:15:43.821 2025.06.18 01:30:27.278 2025.06.18 01:30:27.564
11 6.0.0.840 2025.06.14 29bca F F 471 300 2025.06.15 03:24:13.541 2025.06.15 03:24:14.012 2025.06.15 01:33:30.631 2025.06.15 01:33:30.931
12 6.0.0.838 2025.06.13 0e28a F F 472 292 2025.06.14 03:21:57.134 2025.06.14 03:21:57.606 2025.06.14 01:31:49.890 2025.06.14 01:31:50.182
13 6.0.0.834 2025.06.11 e889f F F 465 292 2025.06.12 03:19:29.250 2025.06.12 03:19:29.715 2025.06.12 01:32:21.185 2025.06.12 01:32:21.477
14 6.0.0.800 2025.06.10 1f226 P P 408 248 2025.06.11 02:04:26.964 2025.06.11 02:04:27.372 2025.06.11 00:55:36.650 2025.06.11 00:55:36.898
15 6.0.0.799 2025.06.07 be644 P P 407 245 2025.06.10 02:04:05.527 2025.06.10 02:04:05.934 2025.06.10 00:55:13.837 2025.06.10 00:55:14.082
16 6.0.0.797 2025.06.06 303e8 P P 405 244 2025.06.07 02:02:54.260 2025.06.07 02:02:54.665 2025.06.07 00:55:01.880 2025.06.07 00:55:02.124
17 6.0.0.795 2025.05.29 7a71a P P 405 246 2025.06.06 02:02:44.537 2025.06.06 02:02:44.942 2025.06.06 00:54:59.854 2025.06.06 00:55:00.100
18 6.0.0.792 2025.05.28 ee5a8 P P 394 261 2025.05.29 02:01:50.396 2025.05.29 02:01:50.790 2025.05.29 00:55:06.197 2025.05.29 00:55:06.458
19 6.0.0.791 2025.05.27 02db8 P P 416 244 2025.05.28 02:02:19.320 2025.05.28 02:02:19.736 2025.05.28 00:54:49.157 2025.05.28 00:54:49.401
20 6.0.0.789 2025.05.21 64051 P P 401 242 2025.05.25 02:02:02.220 2025.05.25 02:02:02.621 2025.05.25 00:55:14.653 2025.05.25 00:55:14.895
21 6.0.0.787 2025.05.20 230ad P P 393 248 2025.05.21 02:00:58.310 2025.05.21 02:00:58.703 2025.05.21 00:54:24.125 2025.05.21 00:54:24.373
22 6.0.0.783 2025.05.12 37320 P P 394 235 2025.05.19 02:00:44.768 2025.05.19 02:00:45.162 2025.05.19 00:54:31.337 2025.05.19 00:54:31.572
23 6.0.0.779 2025.05.11 136fa P P 400 233 2025.05.12 02:02:53.118 2025.05.12 02:02:53.518 2025.05.12 00:55:08.981 2025.05.12 00:55:09.214
24 6.0.0.778 2025.05.07 d735e P P 398 232 2025.05.11 02:02:17.701 2025.05.11 02:02:18.099 2025.05.11 00:55:22.675 2025.05.11 00:55:22.907
25 6.0.0.776 2025.05.06 007cd P P 396 238 2025.05.07 02:01:31.804 2025.05.07 02:01:32.200 2025.05.07 00:55:00.080 2025.05.07 00:55:00.318
26 6.0.0.770 2025.05.05 82c4a P P 394 240 2025.05.06 02:01:50.496 2025.05.06 02:01:50.890 2025.05.06 00:55:06.578 2025.05.06 00:55:06.818
27 6.0.0.767 2025.05.01 cdd29 P P 396 238 2025.05.02 02:02:26.783 2025.05.02 02:02:27.179 2025.05.02 00:55:57.030 2025.05.02 00:55:57.268
28 6.0.0.762 2025.04.30 5cb15 P P 392 259 2025.05.01 02:00:53.766 2025.05.01 02:00:54.158 2025.05.01 00:55:18.274 2025.05.01 00:55:18.533
29 6.0.0.755 2025.04.29 739c6 P P 390 238 2025.04.30 02:01:06.999 2025.04.30 02:01:07.389 2025.04.30 00:55:00.617 2025.04.30 00:55:00.855
30 6.0.0.753 2025.04.27 29ab3 P P 391 258 2025.04.29 02:01:17.180 2025.04.29 02:01:17.571 2025.04.29 00:55:09.332 2025.04.29 00:55:09.590
31 6.0.0.745 2025.04.21 78ad8 P P 410 248 2025.04.26 02:02:42.965 2025.04.26 02:02:43.375 2025.04.26 00:55:25.673 2025.04.26 00:55:25.921
32 6.0.0.744 2025.04.19 e883a P P 395 241 2025.04.20 02:02:10.005 2025.04.20 02:02:10.400 2025.04.20 00:55:18.458 2025.04.20 00:55:18.699
33 6.0.0.742 2025.04.17 abc3b P P 407 240 2025.04.19 02:01:37.879 2025.04.19 02:01:38.286 2025.04.19 00:54:52.892 2025.04.19 00:54:53.132
34 6.0.0.737 2025.04.16 fe52b P P 395 241 2025.04.17 02:02:01.543 2025.04.17 02:02:01.938 2025.04.17 00:55:06.377 2025.04.17 00:55:06.618

Elapsed time, ms. Chart for last 34 runs:

Last commits information (all timestamps in UTC):