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   
    Select Expression (line 5, column 12)
    ....-> Singularity Check
    ........-> First N Records
    ............-> Filter
    ................-> Hash Join (semi)
    ....................-> Sort (record length: NN, key length: NN)
  - ........................-> Table "T1" Full Scan
  + ........................-> Table "PUBLIC"."T1" Full Scan
    ....................-> Record Buffer (record length: NN)
  - ........................-> Table "T2" Full Scan
  + ........................-> Table "PUBLIC"."T2" Full Scan
    3

LOG DETAILS:

2025-06-29 05:35:18.775
2025-06-29 05:35:18.783 act = <firebird.qa.plugin.Action object at [hex]>
2025-06-29 05:35:18.794 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-29 05:35:18.803
2025-06-29 05:35:18.814 @pytest.mark.version('>=5.0.2')
2025-06-29 05:35:18.823 def test_1(act: Action, capsys):
2025-06-29 05:35:18.831
2025-06-29 05:35:18.840 test_sql = """
2025-06-29 05:35:18.850 execute block returns (res int)
2025-06-29 05:35:18.860 as
2025-06-29 05:35:18.867 begin
2025-06-29 05:35:18.874 select first 1 id from t1
2025-06-29 05:35:18.883 where exists (select 1 from t2 where t1.id = t2.id)
2025-06-29 05:35:18.893 order by t1.id
2025-06-29 05:35:18.902 into :res;
2025-06-29 05:35:18.910 suspend;
2025-06-29 05:35:18.920 end
2025-06-29 05:35:18.932 """
2025-06-29 05:35:18.942
2025-06-29 05:35:18.952 srv_cfg = driver_config.register_server(name = f'srv_cfg_8233', config = '')
2025-06-29 05:35:18.960 db_cfg_name = f'db_cfg_8233'
2025-06-29 05:35:18.967 db_cfg_object = driver_config.register_database(name = db_cfg_name)
2025-06-29 05:35:18.973 db_cfg_object.server.value = srv_cfg.name
2025-06-29 05:35:18.984 db_cfg_object.database.value = str(act.db.db_path)
2025-06-29 05:35:18.996 if act.is_version('<6'):
2025-06-29 05:35:19.009 db_cfg_object.config.value = f"""
2025-06-29 05:35:19.018 SubQueryConversion = true
2025-06-29 05:35:19.026 """
2025-06-29 05:35:19.035
2025-06-29 05:35:19.046 with connect(db_cfg_name, user = act.db.user, password = act.db.password) as con:
2025-06-29 05:35:19.057 ps, rs =  None, None
2025-06-29 05:35:19.070 try:
2025-06-29 05:35:19.081 cur = con.cursor()
2025-06-29 05:35:19.095 ps = cur.prepare(test_sql)
2025-06-29 05:35:19.105
2025-06-29 05:35:19.120 # Print explained plan with padding eash line by dots in order to see indentations:
2025-06-29 05:35:19.130 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2025-06-29 05:35:19.137
2025-06-29 05:35:19.143 # ::: NB ::: 'ps' returns data, i.e. this is SELECTABLE expression.
2025-06-29 05:35:19.150 # We have to store result of cur.execute(<psInstance>) in order to
2025-06-29 05:35:19.155 # close it explicitly.
2025-06-29 05:35:19.161 # Otherwise AV can occur during Python garbage collection and this
2025-06-29 05:35:19.173 # causes pytest to hang on its final point.
2025-06-29 05:35:19.182 # Explained by hvlad, email 26.10.24 17:42
2025-06-29 05:35:19.190 rs = cur.execute(ps)
2025-06-29 05:35:19.199 for r in rs:
2025-06-29 05:35:19.212 print(r[0])
2025-06-29 05:35:19.222 except DatabaseError as e:
2025-06-29 05:35:19.234 print(e.__str__())
2025-06-29 05:35:19.243 print(e.gds_codes)
2025-06-29 05:35:19.249 finally:
2025-06-29 05:35:19.256 if rs:
2025-06-29 05:35:19.264 rs.close() # <<< EXPLICITLY CLOSING CURSOR RESULTS
2025-06-29 05:35:19.274 if ps:
2025-06-29 05:35:19.288 ps.free()
2025-06-29 05:35:19.299
2025-06-29 05:35:19.309 act.expected_stdout = f"""
2025-06-29 05:35:19.317 Select Expression (line 5, column 12)
2025-06-29 05:35:19.323 ....-> Singularity Check
2025-06-29 05:35:19.337 ........-> First N Records
2025-06-29 05:35:19.346 ............-> Filter
2025-06-29 05:35:19.352 ................-> Hash Join (semi)
2025-06-29 05:35:19.359 ....................-> Sort (record length: 28, key length: 8)
2025-06-29 05:35:19.365 ........................-> Table "T1" Full Scan
2025-06-29 05:35:19.371 ....................-> Record Buffer (record length: 25)
2025-06-29 05:35:19.380 ........................-> Table "T2" Full Scan
2025-06-29 05:35:19.393 3
2025-06-29 05:35:19.401 """
2025-06-29 05:35:19.407 act.stdout = capsys.readouterr().out
2025-06-29 05:35:19.415 >       assert act.clean_stdout == act.clean_expected_stdout
2025-06-29 05:35:19.423 E       assert
2025-06-29 05:35:19.430 E           Select Expression (line 5, column 12)
2025-06-29 05:35:19.437 E           ....-> Singularity Check
2025-06-29 05:35:19.443 E           ........-> First N Records
2025-06-29 05:35:19.450 E           ............-> Filter
2025-06-29 05:35:19.465 E           ................-> Hash Join (semi)
2025-06-29 05:35:19.474 E           ....................-> Sort (record length: NN, key length: NN)
2025-06-29 05:35:19.482 E         - ........................-> Table "T1" Full Scan
2025-06-29 05:35:19.489 E         + ........................-> Table "PUBLIC"."T1" Full Scan
2025-06-29 05:35:19.506 E           ....................-> Record Buffer (record length: NN)
2025-06-29 05:35:19.518 E         - ........................-> Table "T2" Full Scan
2025-06-29 05:35:19.530 E         + ........................-> Table "PUBLIC"."T2" Full Scan
2025-06-29 05:35:19.553 E           3
2025-06-29 05:35:19.564
2025-06-29 05:35:19.573 tests/bugs/gh_8233_test.py:134: AssertionError
2025-06-29 05:35:19.586 ---------------------------- Captured stdout setup -----------------------------
2025-06-29 05:35:19.595 Creating db: localhost:/var/tmp/qa_2024/test_11712/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):
    
        test_sql = """
            execute block returns (res int)
            as
            begin
               select first 1 id from t1
                 where exists (select 1 from t2 where t1.id = t2.id)
                 order by t1.id
                 into :res;
               suspend;
            end
        """
    
        srv_cfg = driver_config.register_server(name = f'srv_cfg_8233', config = '')
        db_cfg_name = f'db_cfg_8233'
        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:
            ps, rs =  None, None
            try:
                cur = con.cursor()
                ps = cur.prepare(test_sql)
    
                # Print explained plan with padding eash line by dots in order to see indentations:
                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])
            except DatabaseError as e:
                print(e.__str__())
                print(e.gds_codes)
            finally:
                if rs:
                    rs.close() # <<< EXPLICITLY CLOSING CURSOR RESULTS
                if ps:
                    ps.free()
    
        act.expected_stdout = f"""
            Select Expression (line 5, column 12)
            ....-> Singularity Check
            ........-> First N Records
            ............-> Filter
            ................-> Hash Join (semi)
            ....................-> Sort (record length: 28, key length: 8)
            ........................-> Table "T1" Full Scan
            ....................-> Record Buffer (record length: 25)
            ........................-> Table "T2" Full Scan
            3
        """
        act.stdout = capsys.readouterr().out
>       assert act.clean_stdout == act.clean_expected_stdout
E       assert   
E           Select Expression (line 5, column 12)
E           ....-> Singularity Check
E           ........-> First N Records
E           ............-> Filter
E           ................-> Hash Join (semi)
E           ....................-> Sort (record length: NN, key length: NN)
E         - ........................-> Table "T1" Full Scan
E         + ........................-> Table "PUBLIC"."T1" Full Scan
E           ....................-> Record Buffer (record length: NN)
E         - ........................-> Table "T2" Full Scan
E         + ........................-> Table "PUBLIC"."T2" Full Scan
E           3

tests/bugs/gh_8233_test.py:134: 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.881 2025.06.27 7035d F F 744 511 2025.06.29 01:59:26.708 2025.06.29 01:59:27.452 2025.06.28 23:19:40.535 2025.06.28 23:19:41.046
2 6.0.0.877 2025.06.26 8e38f F F 659 457 2025.06.27 01:43:51.333 2025.06.27 01:43:51.992 2025.06.26 23:11:46.057 2025.06.26 23:11:46.514
3 6.0.0.876 2025.06.25 b1bec F F 667 500 2025.06.26 01:47:42.151 2025.06.26 01:47:42.818 2025.06.25 23:13:41.934 2025.06.25 23:13:42.434
4 6.0.0.863 2025.06.24 c3c20 F F 741 477 2025.06.25 01:47:59.924 2025.06.25 01:48:00.665 2025.06.24 23:13:28.717 2025.06.24 23:13:29.194
5 6.0.0.858 2025.06.23 8d6f7 F F 606 612 2025.06.24 01:48:21.730 2025.06.24 01:48:22.336 2025.06.23 23:13:36.162 2025.06.23 23:13:36.774
6 6.0.0.849 2025.06.20 7b79c F F 684 501 2025.06.21 01:59:54.098 2025.06.21 01:59:54.782 2025.06.20 23:22:43.885 2025.06.20 23:22:44.386
7 6.0.0.848 2025.06.19 c483c F F 725 364 2025.06.20 01:56:14.968 2025.06.20 01:56:15.693 2025.06.19 23:19:31.361 2025.06.19 23:19:31.725
8 6.0.0.845 2025.06.18 22b12 F F 754 689 2025.06.19 02:04:54.240 2025.06.19 02:04:54.994 2025.06.18 23:22:46.189 2025.06.18 23:22:46.878
9 6.0.0.843 2025.06.16 995f4 F F 746 372 2025.06.18 02:03:09.659 2025.06.18 02:03:10.405 2025.06.17 23:24:32.710 2025.06.17 23:24:33.082
10 6.0.0.840 2025.06.14 29bca F F 761 602 2025.06.16 01:54:58.216 2025.06.16 01:54:58.977 2025.06.15 23:17:01.108 2025.06.15 23:17:01.710
11 6.0.0.838 2025.06.13 0e28a F F 730 628 2025.06.14 02:08:01.535 2025.06.14 02:08:02.265 2025.06.13 23:24:31.847 2025.06.13 23:24:32.475
12 6.0.0.835 2025.06.12 2cf29 F F 703 484 2025.06.13 02:07:56.183 2025.06.13 02:07:56.886 2025.06.12 23:28:37.654 2025.06.12 23:28:38.138
13 6.0.0.834 2025.06.11 e889f F F 687 622 2025.06.12 02:03:10.531 2025.06.12 02:03:11.218 2025.06.11 23:24:50.403 2025.06.11 23:24:51.025
14 6.0.0.800 2025.06.10 1f226 P P 651 622 2025.06.11 00:31:23.580 2025.06.11 00:31:24.231 2025.06.10 22:23:51.999 2025.06.10 22:23:52.621
15 6.0.0.799 2025.06.07 be644 P P 1102 649 2025.06.10 00:33:36.529 2025.06.10 00:33:37.631 2025.06.09 22:23:31.498 2025.06.09 22:23:32.147
16 6.0.0.797 2025.06.06 303e8 P P 1198 660 2025.06.07 00:36:51.368 2025.06.07 00:36:52.566 2025.06.06 22:23:05.497 2025.06.06 22:23:06.157
17 6.0.0.795 2025.05.29 7a71a P P 570 648 2025.06.06 00:31:12.811 2025.06.06 00:31:13.381 2025.06.05 22:22:11.883 2025.06.05 22:22:12.531
18 6.0.0.792 2025.05.28 b4327 P P 657 700 2025.05.29 00:45:28.972 2025.05.29 00:45:29.629 2025.05.28 22:25:21.019 2025.05.28 22:25:21.719
19 6.0.0.791 2025.05.27 02db8 P P 1239 647 2025.05.28 00:43:33.792 2025.05.28 00:43:35.031 2025.05.27 22:24:24.022 2025.05.27 22:24:24.669
20 6.0.0.789 2025.05.21 64051 P P 1169 548 2025.05.25 00:35:52.326 2025.05.25 00:35:53.495 2025.05.24 22:23:29.655 2025.05.24 22:23:30.203
21 6.0.0.787 2025.05.20 230ad P P 725 388 2025.05.21 00:33:13.563 2025.05.21 00:33:14.288 2025.05.20 22:21:54.015 2025.05.20 22:21:54.403
22 6.0.0.783 2025.05.12 37320 P P 743 459 2025.05.19 12:05:56.467 2025.05.19 12:05:57.210 2025.05.19 10:10:05.695 2025.05.19 10:10:06.154
23 6.0.0.779 2025.05.11 136fa P P 625 589 2025.05.12 00:28:01.355 2025.05.12 00:28:01.980 2025.05.11 22:21:20.194 2025.05.11 22:21:20.783
24 6.0.0.778 2025.05.07 d735e P P 743 726 2025.05.08 00:30:05.923 2025.05.08 00:30:06.666 2025.05.07 22:20:02.892 2025.05.07 22:20:03.618
25 6.0.0.776 2025.05.06 007cd P P 835 520 2025.05.07 00:24:26.763 2025.05.07 00:24:27.598 2025.05.06 22:19:53.642 2025.05.06 22:19:54.162
26 6.0.0.770 2025.05.05 82c4a P P 715 483 2025.05.06 00:23:41.806 2025.05.06 00:23:42.521 2025.05.05 22:18:57.483 2025.05.05 22:18:57.966
27 6.0.0.767 2025.05.01 cdd29 P P 694 671 2025.05.02 00:20:26.846 2025.05.02 00:20:27.540 2025.05.01 22:18:12.703 2025.05.01 22:18:13.374
28 6.0.0.762 2025.04.30 5cb15 P P 614 422 2025.05.01 00:16:34.933 2025.05.01 00:16:35.547 2025.04.30 22:17:05.005 2025.04.30 22:17:05.427
29 6.0.0.755 2025.04.29 739c6 P P 1138 654 2025.04.30 00:20:14.779 2025.04.30 00:20:15.917 2025.04.29 22:18:15.909 2025.04.29 22:18:16.563
30 6.0.0.753 2025.04.27 29ab3 P P 651 380 2025.04.28 00:21:45.280 2025.04.28 00:21:45.931 2025.04.27 22:17:35.358 2025.04.27 22:17:35.738
31 6.0.0.745 2025.04.21 78ad8 P P 612 642 2025.04.26 00:18:21.443 2025.04.26 00:18:22.055 2025.04.25 22:19:28.286 2025.04.25 22:19:28.928
32 6.0.0.744 2025.04.19 e883a P P 1120 589 2025.04.20 00:20:28.694 2025.04.20 00:20:29.814 2025.04.19 22:18:40.747 2025.04.19 22:18:41.336
33 6.0.0.742 2025.04.17 abc3b P P 705 385 2025.04.19 00:22:26.014 2025.04.19 00:22:26.719 2025.04.18 22:19:02.754 2025.04.18 22:19:03.139
34 6.0.0.737 2025.04.16 fe52b P P 1141 496 2025.04.17 00:18:07.905 2025.04.17 00:18:09.046 2025.04.16 22:19:05.047 2025.04.16 22:19:05.543

Elapsed time, ms. Chart for last 34 runs:

Last commits information (all timestamps in UTC):