Subject Re: [firebird-tools] Re: How can I confirm a bug report has been received?
Author Achim Kalwa
Hi Steve,

riasteve2000 wrote:

> try this on the Employee.GDB data base...
>
> CREATE PROCEDURE ATEST(DEPT_NO_IN CHAR(3), DEPARTMENT_IN VARCHAR(25))
> RETURNS(DEPT_NO CHAR(3), DEPARTMENT VARCHAR(25)) AS
> BEGIN
> DEPT_NO = DEPT_NO_IN;
> DEPARTMENT = DEPARTMENT_IN;
>
> INSERT INTO DEPARTMENT(DEPT_NO, DEPARTMENT)
> VALUES(:DEPT_NO, :DEPARTMENT);
>
> SUSPEND;
> END
>
> Now, fire the procedure from the ISQL window in IBOCONSOLE...
>
> select * from ATest('1','name')
>
> You will get a unique key constraint, because the procedure is fired
> twice and the constraint occurs on the second execution of the script.
> Look at the Department table and you will see the results of the first
> insert.

Thank you, Steve. I can reproduce this error on my system. It is caused
in IBOConsole by some code to retrieve the number of affected rows. In
first step, the query is opened (simplified):

DataSet.Close;
DataSet.SQL.Text := 'select * from ATest('1', 'name');
DataSet.Prepare;
DataSet.Open;

In an second step, IBOConsole tries to read the Query's RecordCount
property:

FQueryStats.Rows := Dataset.RecordCount;

But this generates internally a new query with "select count(*) from
ATEST..." . :-(

I'm not sure this bug is really related to IBOConsole. Probably this is
a design problem in IB-Objects, the delphi access components for
Firebird and Interbase.

I'll report this bug to Lorenzo (IBOConsole) and Jason (IB-Objects).


Achim