mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 21:43:06 +01:00
87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
#coding:utf-8
|
|
|
|
"""
|
|
ID: issue-7227
|
|
ISSUE: 7227
|
|
TITLE: Dependencies of subroutines are not preserved after backup restore
|
|
DESCRIPTION:
|
|
NOTES:
|
|
[23.02.2023] pzotov
|
|
Confirmed bug on 5.0.0.573 (04-jul-2022), and on all subsequent snapshots up to 5.0.0.890 (10-jan-2023) - firebird process crashed.
|
|
Checked on 5.0.0.905 (11-jan-2023) - all fine.
|
|
|
|
[23.03.2024] pzotov
|
|
Test was not committed in repo for unknown reason. Fixed (after check again on 5.x).
|
|
"""
|
|
import pytest
|
|
from firebird.qa import *
|
|
from pathlib import Path
|
|
import locale
|
|
|
|
from firebird.driver import SrvRestoreFlag, SrvRepairFlag
|
|
from io import BytesIO
|
|
|
|
init_script = """
|
|
set term ^;
|
|
create domain domain1 integer
|
|
^
|
|
create domain domain2 integer
|
|
^
|
|
create procedure mainproc1 as
|
|
declare procedure subproc1
|
|
as
|
|
declare v domain1;
|
|
begin
|
|
end
|
|
|
|
declare function subfunc1 returns integer
|
|
as
|
|
declare v domain2;
|
|
begin
|
|
end
|
|
begin
|
|
-- nop --
|
|
end
|
|
^
|
|
set term ;^
|
|
commit;
|
|
"""
|
|
db = db_factory(init = init_script)
|
|
act = python_act('db')
|
|
|
|
db_tmp = db_factory(filename='tmp_gh_7227.restored.fdb', do_not_create=True)
|
|
|
|
chk_sql = """
|
|
set list on;
|
|
set count on;
|
|
select
|
|
rdb$dependent_name
|
|
,rdb$depended_on_name
|
|
from rdb$dependencies
|
|
order by rdb$dependent_name;
|
|
"""
|
|
|
|
expected_out = """
|
|
RDB$DEPENDENT_NAME MAINPROC1
|
|
RDB$DEPENDED_ON_NAME DOMAIN1
|
|
|
|
RDB$DEPENDENT_NAME MAINPROC1
|
|
RDB$DEPENDED_ON_NAME DOMAIN2
|
|
|
|
Records affected: 2
|
|
"""
|
|
|
|
@pytest.mark.version('>=5.0')
|
|
def test_1(act: Action, db_tmp: Database):
|
|
|
|
backup = BytesIO()
|
|
with act.connect_server() as srv:
|
|
srv.database.local_backup(database = act.db.db_path, backup_stream = backup)
|
|
backup.seek(0)
|
|
srv.database.local_restore(backup_stream = backup, database = db_tmp.db_path, flags = SrvRestoreFlag.REPLACE)
|
|
|
|
act.expected_stdout = expected_out
|
|
act.isql(switches=['-q'], use_db = db_tmp, combine_output = True, input = chk_sql, io_enc = locale.getpreferredencoding())
|
|
|
|
assert act.clean_stdout == act.clean_expected_stdout
|