Message "request depth exceeded. (Recursive definition?)" appears when code
violates uniqueness of index with computed-by key that force engine to scan
multiple records. Command "QUIT" is impossible in 3.0 and very slow in 2.5.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: CORE-4963
URL: http://tracker.firebirdsql.org/browse/CORE-4963
Project: Firebird Core
Issue Type: Bug
Reporter: Pavel Zotov
Conside following script (I named it 'qq2.sql'):
===
recreate table foo(id int primary key);
commit;
set term ^;
execute block as
begin
execute statement 'drop sequence g'; when any do begin end
end
^ set term ;^
commit;
create sequence g;
commit;
insert into foo values(1);
insert into foo values(2);
insert into foo values(3);
commit;
create unique index foo_unq on foo computed by( iif( exists(select * from foo x
where x.id < 0 and x.id<>foo.id), 0, id ) );
set list on;
set echo on;
update foo set id = -id where id = 1;
select current_time as "Inside ISQL, before QUIT:" from rdb$database;
quit;
===
Key expression for index is completely stupid: no matter what does it mean but
it is allowed in such form by engine.
Then create batch:
===
@echo off
setlocal enabledelayedexpansion enableextensions
C:\MIX\firebird\fb25\bin\isql.exe /3255:e25 -i qq2.sql
echo After ISQL: !time!
===
Substitute in this batch your path to isql, host/port and alias and run it.
On Windows 32-bit I get:
1) for WI-V2.5.5.26936:
===
update foo set id = -id where id = 1;
Statement failed, SQLSTATE = 54001
unsuccessful metadata update
-request depth exceeded. (Recursive definition?)
After line 21 in file qq2.sql
select current_time as "Inside ISQL, before QUIT:" from rdb$database;
Inside ISQL, before QUIT: 21:22:04.0000
quit;
After ISQL: 21:24:04,58
===
Message text seems not clear: what 'recursive' was too deep ? Also, 'QUIT'
command performed about 2 minutes - too long.
2) for WI-V3.0.0.32084: the same STDERR & STDOUT, but 'QUIT' hangs infinitely.
Link to full dumps of firebird.exe and isql.exe (for 3.0) see here:
https://yadi.sk/d/IMwFWgU5jjkPN
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel