/* * Copyright (c) 2004, 2005, 2006 TADA AB - Taby Sweden * Distributed under the terms shown in the file COPYRIGHT * found in the root folder of this project or at * http://eng.tada.se/osprojects/COPYRIGHT.html */ package org.postgresql.pljava; import java.sql.SQLException; /** * An exception specially suited to be thrown from within a method * designated to be a trigger function. The message generated by * this exception will contain information on what trigger and * what relation it was that caused the exception * * @author Thomas Hallgren */ public class TriggerException extends SQLException { private static final long serialVersionUID = 5543711707414329116L; private static boolean s_recursionLock = false; public static final String TRIGGER_ACTION_EXCEPTION = "09000"; private static final String makeMessage(TriggerData td, String message) { StringBuffer bld = new StringBuffer(); bld.append("In Trigger "); if(!s_recursionLock) { s_recursionLock = true; try { bld.append(td.getName()); bld.append(" on relation "); bld.append(td.getTableName()); } catch(SQLException e) { bld.append("(exception while generating exception message)"); } finally { s_recursionLock = false; } } if(message != null) { bld.append(": "); bld.append(message); } return bld.toString(); } /** * Create an exception based on the <code>TriggerData</code> that was * passed to the trigger method. * @param td The <code>TriggerData</code> that was passed to the trigger * method. */ public TriggerException(TriggerData td) { super(makeMessage(td, null), TRIGGER_ACTION_EXCEPTION); } /** * Create an exception based on the <code>TriggerData</code> that was * passed to the trigger method and an additional message. * @param td The <code>TriggerData</code> that was passed to the trigger * method. * @param reason An additional message with info about the exception. */ public TriggerException(TriggerData td, String reason) { super(makeMessage(td, reason), TRIGGER_ACTION_EXCEPTION); } }