Icon View Incident Report

Serious Serious
Reported By: Fernando Dias
Reported On: 2/28/2009
For: Version 2.02 Build 8
# 2937 Changing the Action Time for a Trigger Does Not Take Effect Immediately

When the action time of a trigger is changed from BEFORE INSERT to BEFORE UPDATE, the trigger doesn't fire at the correct time immediately after the change. I wrote a script to demonstrate this and I'm sending you the script along with a test database.

SCRIPT
BEGIN
  DECLARE Cur1 CURSOR WITHOUT RETURN FOR Sql1 ;
  DECLARE CurX CURSOR WITH RETURN FOR SqlX;
  DECLARE TriggerName VARCHAR;

  -- Drop Triggers 
  PREPARE Sql1 FROM 'SELECT Name FROM Information.Triggers
                     WHERE TableName = ''TblX''';
  OPEN Cur1;  
  FETCH FIRST FROM Cur1(Name) INTO TriggerName;
  WHILE NOT EOF(Cur1) DO
    EXECUTE IMMEDIATE 'DROP TRIGGER "'+TriggerName+'" FROM TblX';
    FETCH NEXT FROM Cur1(Name) INTO TriggerName;
  END WHILE;
  UNPREPARE Sql1;

  -- Delete all rows from test table
  EXECUTE IMMEDIATE 'DELETE FROM TblX';
  EXECUTE IMMEDIATE 'ALTER TABLE TblX ALTER Id RESTART WITH 0';

  -- 1. Create the BEFORE INSERT Trigger
  EXECUTE IMMEDIATE '
    CREATE TRIGGER TR01 
    BEFORE INSERT ON "TblX"
    BEGIN
      SET NEWROW.Action = NEWROW.Action + ''; Before Insert fired'' ;
    END;
  ';
   
  -- 2. INSERT a row
  EXECUTE IMMEDIATE 'INSERT INTO TblX(Action) VALUES(''Insert Row'')';

   
  -- 3. Change trigger to BEFORE UPDATE
  EXECUTE IMMEDIATE '
    ALTER TRIGGER TR01
    BEFORE UPDATE ON "TblX"
    BEGIN
      SET NEWROW.Action = NEWROW.Action + ''; Before Update fired'' ;
    END;
  ';
   
  -- 4. UPDATE all rows
  EXECUTE IMMEDIATE 'UPDATE TblX SET Action = Action + ''; Update '' ';
  
  --> The BEFORE UPDATE didn't fire 

  PREPARE SqlX FROM 'SELECT * FROM TblX';
  OPEN CurX;

END



Resolution Resolution
Fixed Problem on 3/1/2009 in version 2.02 build 9


Products Affected Products Affected
ElevateDB Additional Software and Utilities
ElevateDB DAC Client-Server
ElevateDB DAC Client-Server with Source
ElevateDB DAC Standard
ElevateDB DAC Standard with Source
ElevateDB DAC Trial
ElevateDB LCL Standard with Source
ElevateDB VCL Client-Server
ElevateDB VCL Client-Server with Source
ElevateDB VCL Standard
ElevateDB VCL Standard with Source
ElevateDB VCL Trial

Image