
| Key: |
CORE-3003
|
| Type: |
Bug
|
| Status: |
Resolved
|
| Resolution: |
Fixed
|
| Priority: |
Major
|
| Assignee: |
Dmitry Yemanov
|
| Reporter: |
kdv
|
| Votes: |
0
|
| Watchers: |
2
|
|
If you were logged in you would be able to see more operations.
|
|
|
| Planning Status: |
Unspecified
|
|
Firebird 2.5 have new funtionality, that checks existance of SUSPEND statement in procedure being called via SELECT statement. If procedure does not contain SUSPEND, SELECTing from procedure will cause an error:
Procedure ... is not selectable (it does not contain a SUSPEND statement).
This seems to be ok, but same error can happen during RESTORE, and restore will fail.
Example:
1.
create or alter procedure A
returns (
OUT integer)
AS
declare variable i integer;
begin
select emp_no from employee
where EMP_NO = 1
into :out;
suspend;
end
2.
create or alter procedure B
AS
declare variable i int;
begin
SELECT out from a
into :i;
end
3.
create or alter procedure A
returns (
OUT integer)
AS
declare variable i integer;
begin
select emp_no from employee
where EMP_NO = 1
into :out;
end
This will not cause any error, because dependency from procedure B and procedure A call method is not checked.
4. make backup, make restore. You will get ERROR
gbak: ERROR:invalid request BLR at offset 30
gbak: ERROR: Procedure A is not selectable (it does not contain a SUSPEND statement)
gbak:Exiting before completion due to errors
This is exactly the same problem, that exists with the change of parameter number or type of the procedure being called from another procedure. So, we have new one case of non-restorable backup.
I suggest to change this at least from ERROR to WARNING.
|
|
Description
|
Firebird 2.5 have new funtionality, that checks existance of SUSPEND statement in procedure being called via SELECT statement. If procedure does not contain SUSPEND, SELECTing from procedure will cause an error:
Procedure ... is not selectable (it does not contain a SUSPEND statement).
This seems to be ok, but same error can happen during RESTORE, and restore will fail.
Example:
1.
create or alter procedure A
returns (
OUT integer)
AS
declare variable i integer;
begin
select emp_no from employee
where EMP_NO = 1
into :out;
suspend;
end
2.
create or alter procedure B
AS
declare variable i int;
begin
SELECT out from a
into :i;
end
3.
create or alter procedure A
returns (
OUT integer)
AS
declare variable i integer;
begin
select emp_no from employee
where EMP_NO = 1
into :out;
end
This will not cause any error, because dependency from procedure B and procedure A call method is not checked.
4. make backup, make restore. You will get ERROR
gbak: ERROR:invalid request BLR at offset 30
gbak: ERROR: Procedure A is not selectable (it does not contain a SUSPEND statement)
gbak:Exiting before completion due to errors
This is exactly the same problem, that exists with the change of parameter number or type of the procedure being called from another procedure. So, we have new one case of non-restorable backup.
I suggest to change this at least from ERROR to WARNING. |
Show » |
|