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-08-09 16:27:08.711
2024-08-09 16:27:08.720 act = <firebird.qa.plugin.Action object at [hex]>
2024-08-09 16:27:08.729 tmp_fbk = PosixPath('/var/tmp/qa_2024/test_11320/gh_8161.tmp.fbk')
2024-08-09 16:27:08.736 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2024-08-09 16:27:08.743
2024-08-09 16:27:08.749 @pytest.mark.version('>=3.0.12')
2024-08-09 16:27:08.756 def test_1(act: Action, tmp_fbk: Path, capsys):
2024-08-09 16:27:08.763 zipped_fbk_file = zipfile.Path(act.files_dir / 'gh_8161.zip', at = 'gh_8161.fbk')
2024-08-09 16:27:08.769 tmp_fbk.write_bytes(zipped_fbk_file.read_bytes())
2024-08-09 16:27:08.774
2024-08-09 16:27:08.780 act.gbak(switches = ['-rep', str(tmp_fbk), act.db.db_path], combine_output = True, io_enc = locale.getpreferredencoding())
2024-08-09 16:27:08.784 print(act.stdout) # must be empty
2024-08-09 16:27:08.789
2024-08-09 16:27:08.801 test_sql = """
2024-08-09 16:27:08.811 execute block as
2024-08-09 16:27:08.818 declare relname varchar(32);
2024-08-09 16:27:08.824 declare cnt int;
2024-08-09 16:27:08.832 begin
2024-08-09 16:27:08.842 for select X.RDB$RELATION_NAME
2024-08-09 16:27:08.855 from RDB$RELATION_FIELDS X
2024-08-09 16:27:08.867 where X.RDB$FIELD_SOURCE = 'BOOL_EMUL'
2024-08-09 16:27:08.879 into :relname
2024-08-09 16:27:08.888 do begin
2024-08-09 16:27:08.895 select count(*)
2024-08-09 16:27:08.902 from RDB$DEPENDENCIES DEP, RDB$PROCEDURES PRC
2024-08-09 16:27:08.907 where DEP.RDB$DEPENDED_ON_NAME = :relname
2024-08-09 16:27:08.912 AND DEP.RDB$FIELD_NAME = :relname
2024-08-09 16:27:08.916 AND DEP.RDB$DEPENDED_ON_TYPE = 0 /* obj_relation */
2024-08-09 16:27:08.921 AND DEP.RDB$DEPENDENT_TYPE = 5 /* obj_procedure */
2024-08-09 16:27:08.926 AND DEP.RDB$DEPENDENT_NAME = PRC.RDB$PROCEDURE_NAME
2024-08-09 16:27:08.932 AND PRC.RDB$PACKAGE_NAME IS NULL
2024-08-09 16:27:08.936 into :cnt;
2024-08-09 16:27:08.941 end
2024-08-09 16:27:08.946 end
2024-08-09 16:27:08.951 """
2024-08-09 16:27:08.956
2024-08-09 16:27:08.961 with act.db.connect() as con:
2024-08-09 16:27:08.969 cur = con.cursor()
2024-08-09 16:27:08.976 ps = cur.prepare(test_sql)
2024-08-09 16:27:08.982 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2024-08-09 16:27:08.987
2024-08-09 16:27:08.992 expected_stdout = """
2024-08-09 16:27:09.000 Select Expression
2024-08-09 16:27:09.009 ....-> Singularity Check
2024-08-09 16:27:09.018 ........-> Aggregate
2024-08-09 16:27:09.026 ............-> Nested Loop Join (inner)
2024-08-09 16:27:09.034 ................-> Filter
2024-08-09 16:27:09.041 ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-08-09 16:27:09.049 ........................-> Bitmap
2024-08-09 16:27:09.056 ............................-> Index "RDB$INDEX_28" Range Scan (full match)
2024-08-09 16:27:09.063 ................-> Filter
2024-08-09 16:27:09.070 ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
2024-08-09 16:27:09.078 ........................-> Bitmap
2024-08-09 16:27:09.085 ............................-> Index "RDB$INDEX_21" Unique Scan
2024-08-09 16:27:09.092 Select Expression
2024-08-09 16:27:09.099 ....-> Filter
2024-08-09 16:27:09.106 ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
2024-08-09 16:27:09.112 ............-> Bitmap
2024-08-09 16:27:09.118 ................-> Index "RDB$INDEX_3" Range Scan (full match)
2024-08-09 16:27:09.124 """
2024-08-09 16:27:09.130 act.expected_stdout = expected_stdout
2024-08-09 16:27:09.142 act.stdout = capsys.readouterr().out
2024-08-09 16:27:09.153 > assert act.clean_stdout == act.clean_expected_stdout
2024-08-09 16:27:09.161 E assert
2024-08-09 16:27:09.169 E Select Expression
2024-08-09 16:27:09.181 E ....-> Singularity Check
2024-08-09 16:27:09.192 E ........-> Aggregate
2024-08-09 16:27:09.200 E ............-> Nested Loop Join (inner)
2024-08-09 16:27:09.208 E ................-> Filter
2024-08-09 16:27:09.215 E - ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-08-09 16:27:09.221 E - ........................-> Bitmap
2024-08-09 16:27:09.227 E - ............................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-08-09 16:27:09.233 E - ................-> Filter
2024-08-09 16:27:09.246 E ....................-> Table "RDB$PROCEDURES" as "PRC" Access By ID
2024-08-09 16:27:09.257 E ........................-> Bitmap
2024-08-09 16:27:09.269 E + ............................-> Index "RDB$INDEX_nn" Range Scan (partial match: 1/2)
2024-08-09 16:27:09.279 E + ................-> Filter
2024-08-09 16:27:09.287 E + ....................-> Table "RDB$DEPENDENCIES" as "DEP" Access By ID
2024-08-09 16:27:09.295 E + ........................-> Bitmap And
2024-08-09 16:27:09.302 E + ............................-> Bitmap
2024-08-09 16:27:09.309 E - ............................-> Index "RDB$INDEX_nn" Unique Scan
2024-08-09 16:27:09.326 E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-08-09 16:27:09.347 E + ............................-> Bitmap
2024-08-09 16:27:09.356 E + ................................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-08-09 16:27:09.362 E Select Expression
2024-08-09 16:27:09.369 E ....-> Filter
2024-08-09 16:27:09.376 E ........-> Table "RDB$RELATION_FIELDS" as "X" Access By ID
2024-08-09 16:27:09.382 E ............-> Bitmap
2024-08-09 16:27:09.392 E ................-> Index "RDB$INDEX_nn" Range Scan (full match)
2024-08-09 16:27:09.402
2024-08-09 16:27:09.409 tests/bugs/gh_8161_test.py:103: AssertionError
2024-08-09 16:27:09.416 ---------------------------- Captured stdout setup -----------------------------
2024-08-09 16:27:09.423 Creating db: localhost:/var/tmp/qa_2024/test_11320/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_fbk = PosixPath('/var/tmp/qa_2024/test_11320/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
|