I have the following Stored Procedure in a Firebird 3.0.11 database where its function is to convert a query in multiple tables (TestCases, Commands, Params) into a Blob Text returning an XML that represents the test case with its commands and parameters. This Stored Procedure is basically only queries. The issue is that if the test case is relatively large (more than 2500 commands) for some reason the database grows from 107MB to 10.38GB. This growth is not due to the addition of data as a backup and restore of the base returns it to the previous 107MB. Could you tell me what is happening and what I can do to avoid it?
The Blob Text that the database returns for this test case example is not that big: 1.16MB.
I have attached an example of a test case with a few commands,TestCase_45.xml, so that you can better understand the output format of this stored procedure.
ALTER PROCEDURE M_TESTCASES_EXPORT (USER_ID TYPE OF COLUMN USERS.ID,
ID TYPE OF COLUMN TESTCASES.ID)
RETURNS (XML BLOB CHARACTER SET WIN1252)
AS
DECLARE V_COMMAND TYPE OF COLUMN COMMANDS.COMMAND;
DECLARE V_TEST_CASE_COMMAND_ID TYPE OF COLUMN TESTCASECOMMANDS.ID;
BEGIN
SELECT '<TestCase><Id>'||ID||'</Id><Name><![CDATA['||TEST_CASE||']]></Name><Description>'||COALESCE('<![CDATA['||DESCRIPTION||']]>','')||'</Description><Commands>' FROM TESTCASES WHERE TESTCASES.ID=:ID AND TESTCASES.TEAM_ID=M_USER_TEAM_ID(:USER_ID) AND TESTCASES.VISIBLE INTO :XML;
IF (XML IS NOT NULL)
THEN BEGIN
FOR SELECT ID,COMMAND,:XML||'<Command><Name>'||COMMAND||'</Name><Description>'||COALESCE('<![CDATA['||DESCRIPTION||']]>','')||'</Description><Params>' FROM M_TESTCASECOMMANDS_SEARCH(:USER_ID,:ID) INTO :V_TEST_CASE_COMMAND_ID,:V_COMMAND,:XML DO
XML=XML||COALESCE((SELECT LIST(PARAM_XML,'') FROM (SELECT '<Param><Name>'||PARAM||'</Name><Value>'||COALESCE('<![CDATA['||PARAM_VALUE||']]>','')||'</Value><Description>'||COALESCE('<![CDATA['||DESCRIPTION||']]>','')||'</Description></Param>' AS PARAM_XML FROM M_TESTCASECOMMANDPARAMS_SEARCH(:USER_ID,:V_TEST_CASE_COMMAND_ID,:V_COMMAND))),'')||'</Params></Command>';
XML=XML||'</Commands></TestCase>';
SUSPEND;
END
END^
BEFORE RUN THE STORED PROCEDURE
AFTER RUN THE STORED PROCEDURE
Thanks in advanced,