Changed FAIL -> ABORT trigger exceptions
With FAIL, triggers choke but leave the changes in despite. We need to have the current statement undone, however.
This commit is contained in:
		
							parent
							
								
									f54f940f74
								
							
						
					
					
						commit
						5299966837
					
				@ -2,12 +2,12 @@ CREATE TRIGGER linkTransferTightly
 | 
				
			|||||||
    AFTER INSERT ON Transfer 
 | 
					    AFTER INSERT ON Transfer 
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SELECT RAISE(FAIL, "It is not the debtor who is set to pay")
 | 
					  SELECT RAISE(ABORT, "It is not the debtor who is set to pay")
 | 
				
			||||||
    WHERE (SELECT debtor FROM Debit WHERE billId=NEW.billId)
 | 
					    WHERE (SELECT debtor FROM Debit WHERE billId=NEW.billId)
 | 
				
			||||||
       != (SELECT account FROM Credit WHERE credId=NEW.credId)
 | 
					       != (SELECT account FROM Credit WHERE credId=NEW.credId)
 | 
				
			||||||
    ;
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SELECT RAISE(FAIL, "Target of a debit cannot be an incoming payment")
 | 
					  SELECT RAISE(ABORT, "Target of a debit cannot be an incoming payment")
 | 
				
			||||||
  FROM Credit c
 | 
					  FROM Credit c
 | 
				
			||||||
    JOIN Debit d ON c.credId = d.targetCredit
 | 
					    JOIN Debit d ON c.credId = d.targetCredit
 | 
				
			||||||
  WHERE c.credId = NEW.credId
 | 
					  WHERE c.credId = NEW.credId
 | 
				
			||||||
@ -18,8 +18,8 @@ BEGIN
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  INSERT INTO __INTERNAL_TRIGGER_STACK
 | 
					  INSERT INTO __INTERNAL_TRIGGER_STACK
 | 
				
			||||||
      SELECT NEW.ROWID,
 | 
					      SELECT NEW.ROWID,
 | 
				
			||||||
          CASE remainingDebt   WHEN 0 THEN RAISE(FAIL, "Debt settled") ELSE NEW.billId END,
 | 
					          CASE remainingDebt   WHEN 0 THEN RAISE(ABORT, "Debt settled") ELSE NEW.billId END,
 | 
				
			||||||
          CASE remainingCredit WHEN 0 THEN RAISE(FAIL, "Credit spent") ELSE NEW.credId END,
 | 
					          CASE remainingCredit WHEN 0 THEN RAISE(ABORT, "Credit spent") ELSE NEW.credId END,
 | 
				
			||||||
          min(remainingDebt, remainingCredit) 
 | 
					          min(remainingDebt, remainingCredit) 
 | 
				
			||||||
      FROM (SELECT
 | 
					      FROM (SELECT
 | 
				
			||||||
          (SELECT value - paid FROM Debit WHERE billId=NEW.billId) AS remainingDebt, 
 | 
					          (SELECT value - paid FROM Debit WHERE billId=NEW.billId) AS remainingDebt, 
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@ CREATE TRIGGER checkIBANatTransfer
 | 
				
			|||||||
    BEFORE INSERT ON Debit
 | 
					    BEFORE INSERT ON Debit
 | 
				
			||||||
    WHEN NEW.targetCredit IS NULL
 | 
					    WHEN NEW.targetCredit IS NULL
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
   SELECT RAISE(FAIL, "IBAN used does not match IBAN currently stored in account record")
 | 
					   SELECT RAISE(ABORT, "IBAN used does not match IBAN currently stored in account record")
 | 
				
			||||||
   FROM (
 | 
					   FROM (
 | 
				
			||||||
      SELECT instr(NEW.purpose, IBAN) AS fnd
 | 
					      SELECT instr(NEW.purpose, IBAN) AS fnd
 | 
				
			||||||
      FROM Account
 | 
					      FROM Account
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,6 @@ CREATE TRIGGER x_changedCredit
 | 
				
			|||||||
    WHEN EXISTS (SELECT * FROM Transfer WHERE credId=NEW.credId)
 | 
					    WHEN EXISTS (SELECT * FROM Transfer WHERE credId=NEW.credId)
 | 
				
			||||||
     AND NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK)
 | 
					     AND NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK)
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "Credit involved in transactions to revoke at first");
 | 
					    SELECT RAISE(ABORT, "Credit involved in transactions to revoke at first");
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,6 @@ CREATE TRIGGER x_changedDebit
 | 
				
			|||||||
    WHEN EXISTS (SELECT * FROM Transfer WHERE billId=NEW.billId)
 | 
					    WHEN EXISTS (SELECT * FROM Transfer WHERE billId=NEW.billId)
 | 
				
			||||||
     AND NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK LIMIT 1)
 | 
					     AND NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK LIMIT 1)
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "Debt is involved in transfers to revoke at first");
 | 
					    SELECT RAISE(ABORT, "Debt is involved in transfers to revoke at first");
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,6 @@ CREATE TRIGGER x_changedTransfer
 | 
				
			|||||||
    WHEN OLD.amount IS NOT NULL
 | 
					    WHEN OLD.amount IS NOT NULL
 | 
				
			||||||
      AND NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK)
 | 
					      AND NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK)
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "Transfer cannot be updated, but needs to be replaced to make triggers run");
 | 
					    SELECT RAISE(ABORT, "Transfer cannot be updated, but needs to be replaced to make triggers run");
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,6 @@ CREATE TRIGGER x_paidChangedOutsideTrigger
 | 
				
			|||||||
    BEFORE UPDATE OF paid ON Debit
 | 
					    BEFORE UPDATE OF paid ON Debit
 | 
				
			||||||
    WHEN NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK LIMIT 1)
 | 
					    WHEN NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK LIMIT 1)
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "paid is set and adjusted automatically according to added Transfer records");
 | 
					    SELECT RAISE(ABORT, "paid is set and adjusted automatically according to added Transfer records");
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
CREATE TRIGGER x_paidFromBeginning
 | 
					CREATE TRIGGER x_paidFromBeginning
 | 
				
			||||||
    BEFORE INSERT ON Debit
 | 
					    BEFORE INSERT ON Debit
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "Debt must be initially unpaid")
 | 
					    SELECT RAISE(ABORT, "Debt must be initially unpaid")
 | 
				
			||||||
    WHERE NEW.paid <> 0;
 | 
					    WHERE NEW.paid <> 0;
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,6 @@ CREATE TRIGGER x_spentChangedOutsideTrigger
 | 
				
			|||||||
    BEFORE UPDATE OF spent ON Credit
 | 
					    BEFORE UPDATE OF spent ON Credit
 | 
				
			||||||
    WHEN NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK)
 | 
					    WHEN NOT EXISTS (SELECT * FROM __INTERNAL_TRIGGER_STACK)
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "spent is set and adjusted automatically according to added Transfer records");
 | 
					    SELECT RAISE(ABORT, "spent is set and adjusted automatically according to added Transfer records");
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
CREATE TRIGGER x_spentFromBeginning
 | 
					CREATE TRIGGER x_spentFromBeginning
 | 
				
			||||||
    BEFORE INSERT ON Credit
 | 
					    BEFORE INSERT ON Credit
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
    SELECT RAISE(FAIL, "credit must be initially unused")
 | 
					    SELECT RAISE(ABORT, "credit must be initially unused")
 | 
				
			||||||
    WHERE NEW.spent != 0;
 | 
					    WHERE NEW.spent != 0;
 | 
				
			||||||
END;
 | 
					END;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user