1 @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:16:13.817
2024-07-15 14:16:13.817 act = <firebird.qa.plugin.Action object at [hex]>
2024-07-15 14:16:13.817 tmp_fbk = WindowsPath('H:/QA/temp/qa2024.tmp/fbqa/test_11340/gh_8161.tmp.fbk')
2024-07-15 14:16:13.817 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2024-07-15 14:16:13.817
2024-07-15 14:16:13.817 @pytest.mark.version('>=3.0.12')
2024-07-15 14:16:13.817 def test_1(act: Action, tmp_fbk: Path, capsys):
2024-07-15 14:16:13.817 zipped_fbk_file = zipfile.Path(act.files_dir / 'gh_8161.zip', at = 'gh_8161.fbk')
2024-07-15 14:16:13.817 tmp_fbk.write_bytes(zipped_fbk_file.read_bytes())
2024-07-15 14:16:13.817
2024-07-15 14:16:13.817 act.gbak(switches = ['-rep', str(tmp_fbk), act.db.db_path], combine_output = True, io_enc = locale.getpreferredencoding())
2024-07-15 14:16:13.817 print(act.stdout) # must be empty
2024-07-15 14:16:13.817
2024-07-15 14:16:13.818 test_sql = """
2024-07-15 14:16:13.818 execute block as
2024-07-15 14:16:13.818 declare relname varchar(32);
2024-07-15 14:16:13.818 declare cnt int;
2024-07-15 14:16:13.818 begin
2024-07-15 14:16:13.818 for select X.RDB$RELATION_NAME
2024-07-15 14:16:13.818 from RDB$RELATION_FIELDS X
2024-07-15 14:16:13.818 where X.RDB$FIELD_SOURCE = 'BOOL_EMUL'
2024-07-15 14:16:13.818 into :relname
2024-07-15 14:16:13.818 do begin
2024-07-15 14:16:13.818 select count(*)
2024-07-15 14:16:13.818 from RDB$DEPENDENCIES DEP, RDB$PROCEDURES PRC
2024-07-15 14:16:13.818 where DEP.RDB$DEPENDED_ON_NAME = :relname
2024-07-15 14:16:13.818 AND DEP.RDB$FIELD_NAME = :relname
2024-07-15 14:16:13.818 AND DEP.RDB$DEPENDED_ON_TYPE = 0 /* obj_relation */
2024-07-15 14:16:13.818 AND DEP.RDB$DEPENDENT_TYPE = 5 /* obj_procedure */
2024-07-15 14:16:13.818 AND DEP.RDB$DEPENDENT_NAME = PRC.RDB$PROCEDURE_NAME
2024-07-15 14:16:13.818 AND PRC.RDB$PACKAGE_NAME IS NULL
2024-07-15 14:16:13.818 into :cnt;
2024-07-15 14:16:13.818 end
2024-07-15 14:16:13.818 end
2024-07-15 14:16:13.819 """
2024-07-15 14:16:13.819
2024-07-15 14:16:13.819 with act.db.connect() as con:
2024-07-15 14:16:13.819 cur = con.cursor()
2024-07-15 14:16:13.819 ps = cur.prepare(test_sql)
2024-07-15 14:16:13.819 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2024-07-15 14:16:13.819
2024-07-15 14:16:13.819 expected_stdout = """
2024-07-15 14:16:13.819 Select Expression
2024-07-15 14:16:13.819 ....-> Singularity Check
2024-07-15 14:16:13.819 ........-> Aggregate
2024-07-15 14:16:13.819 ............-> Nested Loop Join (inner)
2024-07-15 14:16:13.819 ................-> Filter
2024-07-15 14:16:13.819 ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-07-15 14:16:13.819 ........................-> Bitmap
2024-07-15 14:16:13.819 ............................-> Index "RDB$INDEX_28" Range Scan (full match)
2024-07-15 14:16:13.819 ................-> Filter
2024-07-15 14:16:13.819 ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
2024-07-15 14:16:13.820 ........................-> Bitmap
2024-07-15 14:16:13.820 ............................-> Index "RDB$INDEX_21" Unique Scan
2024-07-15 14:16:13.820 Select Expression
2024-07-15 14:16:13.820 ....-> Filter
2024-07-15 14:16:13.820 ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
2024-07-15 14:16:13.820 ............-> Bitmap
2024-07-15 14:16:13.820 ................-> Index "RDB$INDEX_3" Range Scan (full match)
2024-07-15 14:16:13.820 """
2024-07-15 14:16:13.820 act.expected_stdout = expected_stdout
2024-07-15 14:16:13.820 act.stdout = capsys.readouterr().out
2024-07-15 14:16:13.820 > assert act.clean_stdout == act.clean_expected_stdout
2024-07-15 14:16:13.820 E assert
2024-07-15 14:16:13.820 E Select Expression
2024-07-15 14:16:13.820 E ....-> Singularity Check
2024-07-15 14:16:13.820 E ........-> Aggregate
2024-07-15 14:16:13.820 E ............-> Nested Loop Join (inner)
2024-07-15 14:16:13.820 E ................-> Filter
2024-07-15 14:16:13.820 E - ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-07-15 14:16:13.820 E - ........................-> Bitmap
2024-07-15 14:16:13.820 E - ............................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:16:13.820 E - ................-> Filter
2024-07-15 14:16:13.821 E ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
2024-07-15 14:16:13.821 E ........................-> Bitmap
2024-07-15 14:16:13.821 E + ............................-> Index "RDB$INDEX_nn" Range Scan (partial match: 1/2)
2024-07-15 14:16:13.821 E + ................-> Filter
2024-07-15 14:16:13.821 E + ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-07-15 14:16:13.821 E + ........................-> Bitmap And
2024-07-15 14:16:13.821 E + ............................-> Bitmap
2024-07-15 14:16:13.821 E - ............................-> Index "RDB$INDEX_nn" Unique Scan
2024-07-15 14:16:13.821 E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:16:13.821 E + ............................-> Bitmap
2024-07-15 14:16:13.821 E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:16:13.821 E Select Expression
2024-07-15 14:16:13.821 E ....-> Filter
2024-07-15 14:16:13.821 E ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
2024-07-15 14:16:13.821 E ............-> Bitmap
2024-07-15 14:16:13.821 E ................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-07-15 14:16:13.821
2024-07-15 14:16:13.822 tests\bugs\gh_8161_test.py:103: AssertionError
2024-07-15 14:16:13.822 ---------------------------- Captured stdout setup ----------------------------
2024-07-15 14:16:13.822 Cached db: db-12.0-None-None-NONE.fdb [page_size=None, sql_dialect=None, charset='NONE'
|
2 #text |
act = <firebird.qa.plugin.Action pytest object at [hex]>
tmp_fbk = WindowsPath('H:/QA/temp/qa2024.tmp/fbqa/test_11340/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
|