Regression in 3.0.x: wrong handling in FOR-cursor when NOT EXISTS( select from <VIEW> ) statement is used to check results obtained from SP ---------------------------------------------------------------------------------------------------------------------------------------------
Key: CORE-4497 URL: http://tracker.firebirdsql.org/browse/CORE-4497 Project: Firebird Core Issue Type: Bug Affects Versions: 3.0 Alpha 2 Reporter: Pavel Zotov DDL: #### create or alter procedure z_pget as begin end; create or alter view z_vdbg as select 1 as not_handled_agent_id from rdb$database; commit; recreate global temporary table z_gtt(id int, agent_id int) on commit delete rows; recreate table z_doc(id int, agent_id int); commit; insert into z_doc(id, agent_id) values (101, 7); -- var-1: -- insert into z_doc(id, agent_id) values (100, 1); -- <<<<<<<<<<<<<< ::: NB ::: uncomment this line for TEST-1, see below -- var-2 -- insert into z_doc(id, agent_id) values (102, 1); -- <<<<<<<<<<<<<< ::: NB ::: uncomment this line for TEST-2, see below commit; set term ^; create or alter procedure z_pget returns ( clo_doc_id int, clo_agent_id int) as begin delete from z_gtt; insert into z_gtt select * from z_doc; for select f.id, f.agent_id from z_gtt f order by f.id into clo_doc_id, clo_agent_id do suspend; end ^ set term ;^ commit; Script to be run: ============ -- File 'test.sql' set term ^; execute block returns( doc_for_handling int, agent_for_handling int ) as declare v_agent_id int; begin for select p.clo_doc_id, p.clo_agent_id from z_pget p into doc_for_handling, v_agent_id do begin agent_for_handling = null; if ( NOT exists( select * from z_vdbg v where v.not_handled_agent_id = (select h.agent_id from z_doc h where h.id= :doc_for_handling ) ) ) then begin agent_for_handling = v_agent_id; end suspend; end end ^ set term ;^ commit; TEST-1: ###### 1) uncomment line "insert into z_doc(id, agent_id) values (100, 1);" in the DDL script which is shown above 2) run the script 'test.sql': Result in LI-V2.5.3.26788: DOC_FOR_HANDLING AGENT_FOR_HANDLING ================ ================== 100 <null> 101 7 (it's correct) Result in LI-T3.0.0.31228: DOC_FOR_HANDLING AGENT_FOR_HANDLING ================ ================== 100 <null> 101 <null> (WRONG! Record with DOC_FOR_HANDLING *must* have the value = 7 in the column AGENT_FOR_HANDLING) TEST-2: ###### 1) uncomment line "insert into z_doc(id, agent_id) values (102, 1);" in the DDL script which is shown above 2) run the script 'test.sql': Result in LI-V2.5.3.26788: DOC_FOR_HANDLING AGENT_FOR_HANDLING ================ ================== 101 7 102 <null> (it's correct) Result in LI-T3.0.0.31228: DOC_FOR_HANDLING AGENT_FOR_HANDLING ================ ================== 101 7 102 1 (WRONG! Record with AGENT_FOR_HANDLING = 1 should never be displayed!) PS. Sorry for too long subject of this tiocket: I couldn`t understand what exactly has most influence on such results in 3.0. -- 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 ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel