Skip to content

select from external procedure validates output parameters even when fetch method returns false #7696

@asfernandes

Description

@asfernandes
/***
create procedure test_proc (
    start_n integer not null,
    end_n integer not null
) returns (
    n integer not null
)
    external name 'udrcpp_example!test_proc'
    engine udr;
***/
FB_UDR_BEGIN_PROCEDURE(test_proc)
	FB_UDR_MESSAGE(InMessage,
		(FB_INTEGER, start)
		(FB_INTEGER, end)
	);

	FB_UDR_MESSAGE(OutMessage,
		(FB_INTEGER, result)
	);

	FB_UDR_EXECUTE_PROCEDURE
	{
		out->resultNull = FB_FALSE;
		out->result = in->start - 1;
	}

	FB_UDR_FETCH_PROCEDURE
	{
		++out->result;
		out->resultNull = out->result == 10 ? FB_TRUE : FB_FALSE;
		return out->result < in->end;
	}
FB_UDR_END_PROCEDURE
-- ok
SQL> select * from test_proc(2, 4);

           N 
============ 
           2 
           3 
-- should not throw error
SQL> select * from test_proc(7, 10);

           N 
============ 
           7 
           8 
           9 
Statement failed, SQLSTATE = 42000
validation error for variable N, value "*** null ***"
-At procedure 'TEST_PROC'

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions