RETURNING not working with view when the field's value is generated in table's 
trigger
--------------------------------------------------------------------------------------

                 Key: CORE-3624
                 URL: http://tracker.firebirdsql.org/browse/CORE-3624
             Project: Firebird Core
          Issue Type: Bug
          Components: Engine
    Affects Versions: 2.5.0, 2.5.1
            Reporter: Ain Valtin
            Priority: Minor


When VIEW is not updatable unless you write "on insert" triggers then the 
RETURNING doesn't work with values which are generated in table's trigger. Ie 
consider the following setup:

CREATE TABLE Bar(
  id  INTEGER,
  foo INTEGER
);

CREATE TABLE Foo(
  id  INTEGER,
  bar INTEGER
);

CREATE SEQUENCE GEN_Foo;

CREATE VIEW vFoo AS SELECT Foo.* FROM Foo LEFT JOIN bar ON foo.bar = bar.id;

SET TERM ^ ;

CREATE TRIGGER Foo_I FOR Foo
ACTIVE BEFORE INSERT POSITION 10
AS
BEGIN
  -- generate PK
  IF(NEW.id IS NULL)THEN NEW.id = NEXT VALUE FOR GEN_Foo;
END^

-- this trigger is required to make view insertable
CREATE TRIGGER vFoo_I FOR vFoo
ACTIVE BEFORE INSERT POSITION 20
AS
BEGIN
  INSERT INTO Foo(bar) VALUES(NEW.bar);
END^

SET TERM ; ^

Now when inserting record to the view:

INSERT INTO vFoo(bar) VALUES(10) RETURNING id;

the statement returns NULL for the id (but the PK is generated OK and record is 
added to the table). Workaround is to generate the PK in view's trigger (code 
dublication!) or use RETURNING in the view's trigger (kind of strange...), ie

CREATE TRIGGER vFoo_I FOR vFoo
ACTIVE BEFORE INSERT POSITION 10
AS
BEGIN
  IF(NEW.id IS NULL)THEN NEW.id = NEXT VALUE FOR GEN_Foo;
  INSERT INTO Foo(id, bar) VALUES(NEW.id, NEW.bar);
END^

or

CREATE TRIGGER vFoo_I FOR vFoo
ACTIVE BEFORE INSERT POSITION 10
AS
BEGIN
  INSERT INTO Foo(bar) VALUES(NEW.bar) RETURNING id INTO NEW.id;
END^

With either of those triggers the ID is returned OK.

-- 
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

        

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to