2 @message |
assert
Select Expression
....-> Singularity Check
........-> Aggregate
............-> Nested Loop Join (inner)
................-> Filter
- ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
- ........................-> Bitmap
- ............................-> Index "RDB$INDEX_nn" Range Scan (full match)
- ................-> Filter
....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
........................-> Bitmap
+ ............................-> Index "RDB$INDEX_nn" Range Scan (partial match: 1/2)
+ ................-> Filter
+ ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
+ ........................-> Bitmap And
+ ............................-> Bitmap
- ............................-> Index "RDB$INDEX_nn" Unique Scan
+ ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
+ ............................-> Bitmap
+ ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
Select Expression
....-> Filter
........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
............-> Bitmap
................-> Index "RDB$INDEX_nn" Range Scan (full match)
LOG DETAILS:
2024-07-15 14:13:05.526
2024-07-15 14:13:05.532 act = <firebird.qa.plugin.Action object at [hex]>
2024-07-15 14:13:05.539 tmp_fbk = PosixPath('/var/tmp/qa_2024/test_11319/gh_8161.tmp.fbk')
2024-07-15 14:13:05.544 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2024-07-15 14:13:05.554
2024-07-15 14:13:05.565 @pytest.mark.version('>=3.0.12')
2024-07-15 14:13:05.573 def test_1(act: Action, tmp_fbk: Path, capsys):
2024-07-15 14:13:05.580 zipped_fbk_file = zipfile.Path(act.files_dir / 'gh_8161.zip', at = 'gh_8161.fbk')
2024-07-15 14:13:05.587 tmp_fbk.write_bytes(zipped_fbk_file.read_bytes())
2024-07-15 14:13:05.594
2024-07-15 14:13:05.601 act.gbak(switches = ['-rep', str(tmp_fbk), act.db.db_path], combine_output = True, io_enc = locale.getpreferredencoding())
2024-07-15 14:13:05.607 print(act.stdout) # must be empty
2024-07-15 14:13:05.613
2024-07-15 14:13:05.619 test_sql = """
2024-07-15 14:13:05.625 execute block as
2024-07-15 14:13:05.631 declare relname varchar(32);
2024-07-15 14:13:05.637 declare cnt int;
2024-07-15 14:13:05.643 begin
2024-07-15 14:13:05.649 for select X.RDB$RELATION_NAME
2024-07-15 14:13:05.655 from RDB$RELATION_FIELDS X
2024-07-15 14:13:05.665 where X.RDB$FIELD_SOURCE = 'BOOL_EMUL'
2024-07-15 14:13:05.675 into :relname
2024-07-15 14:13:05.685 do begin
2024-07-15 14:13:05.693 select count(*)
2024-07-15 14:13:05.701 from RDB$DEPENDENCIES DEP, RDB$PROCEDURES PRC
2024-07-15 14:13:05.708 where DEP.RDB$DEPENDED_ON_NAME = :relname
2024-07-15 14:13:05.713 AND DEP.RDB$FIELD_NAME = :relname
2024-07-15 14:13:05.718 AND DEP.RDB$DEPENDED_ON_TYPE = 0 /* obj_relation */
2024-07-15 14:13:05.723 AND DEP.RDB$DEPENDENT_TYPE = 5 /* obj_procedure */
2024-07-15 14:13:05.727 AND DEP.RDB$DEPENDENT_NAME = PRC.RDB$PROCEDURE_NAME
2024-07-15 14:13:05.732 AND PRC.RDB$PACKAGE_NAME IS NULL
2024-07-15 14:13:05.737 into :cnt;
2024-07-15 14:13:05.743 end
2024-07-15 14:13:05.749 end
2024-07-15 14:13:05.754 """
2024-07-15 14:13:05.760
2024-07-15 14:13:05.765 with act.db.connect() as con:
2024-07-15 14:13:05.772 cur = con.cursor()
2024-07-15 14:13:05.777 ps = cur.prepare(test_sql)
2024-07-15 14:13:05.781 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2024-07-15 14:13:05.787
2024-07-15 14:13:05.791 expected_stdout = """
2024-07-15 14:13:05.796 Select Expression
2024-07-15 14:13:05.801 ....-> Singularity Check
2024-07-15 14:13:05.805 ........-> Aggregate
2024-07-15 14:13:05.810 ............-> Nested Loop Join (inner)
2024-07-15 14:13:05.815 ................-> Filter
2024-07-15 14:13:05.821 ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-07-15 14:13:05.827 ........................-> Bitmap
2024-07-15 14:13:05.833 ............................-> Index "RDB$INDEX_28" Range Scan (full match)
2024-07-15 14:13:05.839 ................-> Filter
2024-07-15 14:13:05.857 ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
2024-07-15 14:13:05.868 ........................-> Bitmap
2024-07-15 14:13:05.876 ............................-> Index "RDB$INDEX_21" Unique Scan
2024-07-15 14:13:05.883 Select Expression
2024-07-15 14:13:05.888 ....-> Filter
2024-07-15 14:13:05.894 ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
2024-07-15 14:13:05.899 ............-> Bitmap
2024-07-15 14:13:05.904 ................-> Index "RDB$INDEX_3" Range Scan (full match)
2024-07-15 14:13:05.909 """
2024-07-15 14:13:05.915 act.expected_stdout = expected_stdout
2024-07-15 14:13:05.920 act.stdout = capsys.readouterr().out
2024-07-15 14:13:05.930 > assert act.clean_stdout == act.clean_expected_stdout
2024-07-15 14:13:05.941 E assert
2024-07-15 14:13:05.951 E Select Expression
2024-07-15 14:13:05.960 E ....-> Singularity Check
2024-07-15 14:13:05.968 E ........-> Aggregate
2024-07-15 14:13:05.976 E ............-> Nested Loop Join (inner)
2024-07-15 14:13:05.983 E ................-> Filter
2024-07-15 14:13:05.989 E - ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-07-15 14:13:05.996 E - ........................-> Bitmap
2024-07-15 14:13:06.002 E - ............................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:13:06.007 E - ................-> Filter
2024-07-15 14:13:06.013 E ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
2024-07-15 14:13:06.020 E ........................-> Bitmap
2024-07-15 14:13:06.026 E + ............................-> Index "RDB$INDEX_nn" Range Scan (partial match: 1/2)
2024-07-15 14:13:06.032 E + ................-> Filter
2024-07-15 14:13:06.037 E + ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-07-15 14:13:06.050 E + ........................-> Bitmap And
2024-07-15 14:13:06.060 E + ............................-> Bitmap
2024-07-15 14:13:06.067 E - ............................-> Index "RDB$INDEX_nn" Unique Scan
2024-07-15 14:13:06.080 E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:13:06.092 E + ............................-> Bitmap
2024-07-15 14:13:06.099 E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:13:06.104 E Select Expression
2024-07-15 14:13:06.110 E ....-> Filter
2024-07-15 14:13:06.116 E ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
2024-07-15 14:13:06.122 E ............-> Bitmap
2024-07-15 14:13:06.128 E ................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:13:06.133
2024-07-15 14:13:06.139 tests/bugs/gh_8161_test.py:103: AssertionError
2024-07-15 14:13:06.145 ---------------------------- Captured stdout setup -----------------------------
2024-07-15 14:13:06.151 Cached db: db-12.0-None-None-NONE.fdb [page_size=None, sql_dialect=None, charset='NONE'
|
3 #text |
act = <firebird.qa.plugin.Action pytest object at [hex]>
tmp_fbk = PosixPath('/var/tmp/qa_2024/test_11319/gh_8161.tmp.fbk')
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>
@pytest.mark.version('>=3.0.12')
def test_1(act: Action, tmp_fbk: Path, capsys):
zipped_fbk_file = zipfile.Path(act.files_dir / 'gh_8161.zip', at = 'gh_8161.fbk')
tmp_fbk.write_bytes(zipped_fbk_file.read_bytes())
act.gbak(switches = ['-rep', str(tmp_fbk), act.db.db_path], combine_output = True, io_enc = locale.getpreferredencoding())
print(act.stdout) # must be empty
test_sql = """
execute block as
declare relname varchar(32);
declare cnt int;
begin
for select X.RDB$RELATION_NAME
from RDB$RELATION_FIELDS X
where X.RDB$FIELD_SOURCE = 'BOOL_EMUL'
into :relname
do begin
select count(*)
from RDB$DEPENDENCIES DEP, RDB$PROCEDURES PRC
where DEP.RDB$DEPENDED_ON_NAME = :relname
AND DEP.RDB$FIELD_NAME = :relname
AND DEP.RDB$DEPENDED_ON_TYPE = 0 /* obj_relation */
AND DEP.RDB$DEPENDENT_TYPE = 5 /* obj_procedure */
AND DEP.RDB$DEPENDENT_NAME = PRC.RDB$PROCEDURE_NAME
AND PRC.RDB$PACKAGE_NAME IS NULL
into :cnt;
end
end
"""
with act.db.connect() as con:
cur = con.cursor()
ps = cur.prepare(test_sql)
print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
expected_stdout = """
Select Expression
....-> Singularity Check
........-> Aggregate
............-> Nested Loop Join (inner)
................-> Filter
....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
........................-> Bitmap
............................-> Index "RDB$INDEX_28" Range Scan (full match)
................-> Filter
....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
........................-> Bitmap
............................-> Index "RDB$INDEX_21" Unique Scan
Select Expression
....-> Filter
........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
............-> Bitmap
................-> Index "RDB$INDEX_3" Range Scan (full match)
"""
act.expected_stdout = expected_stdout
act.stdout = capsys.readouterr().out
> assert act.clean_stdout == act.clean_expected_stdout
E assert
E Select Expression
E ....-> Singularity Check
E ........-> Aggregate
E ............-> Nested Loop Join (inner)
E ................-> Filter
E - ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
E - ........................-> Bitmap
E - ............................-> Index "RDB$INDEX_nn" Range Scan (full match)
E - ................-> Filter
E ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
E ........................-> Bitmap
E + ............................-> Index "RDB$INDEX_nn" Range Scan (partial match: 1/2)
E + ................-> Filter
E + ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
E + ........................-> Bitmap And
E + ............................-> Bitmap
E - ............................-> Index "RDB$INDEX_nn" Unique Scan
E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
E + ............................-> Bitmap
E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
E Select Expression
E ....-> Filter
E ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
E ............-> Bitmap
E ................-> Index "RDB$INDEX_nn" Range Scan (full match)
tests/bugs/gh_8161_test.py:103: AssertionError
|