mkalen      2005/03/04 14:39:06

  Modified:    src/java/org/apache/ojb/broker/accesslayer Tag:
                        OJB_1_0_RELEASE JdbcAccessImpl.java
  Log:
  Add check for FK-violation when throwing KeyConstraintViolatedException. 
Makes PostgeSQL pass some tests that expect specific broker exception. 
(Transparent change for other calling methods since catch-blocks will apply to 
superclass of exception.)
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.22.2.3  +37 -8     
db-ojb/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java
  
  Index: JdbcAccessImpl.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java,v
  retrieving revision 1.22.2.2
  retrieving revision 1.22.2.3
  diff -u -r1.22.2.2 -r1.22.2.3
  --- JdbcAccessImpl.java       27 Nov 2004 23:38:05 -0000      1.22.2.2
  +++ JdbcAccessImpl.java       4 Mar 2005 22:39:05 -0000       1.22.2.3
  @@ -51,6 +51,17 @@
   public class JdbcAccessImpl implements JdbcAccess
   {
       private static final String SQL_STATE_KEY_VIOLATED = "23000";
  +    private static final String SQL_STATE_FK_VIOLATED = "23505";
  +    /*
  +        X/OPEN codes within class 23:
  +            23000    INTEGRITY CONSTRAINT VIOLATION
  +            23001    RESTRICT VIOLATION
  +            23502    NOT NULL VIOLATION
  +            23503    FOREIGN KEY VIOLATION
  +            23505    UNIQUE VIOLATION
  +            23514    CHECK VIOLATION
  +    */
  +
       /**
        * The logger used.
        */
  @@ -78,7 +89,10 @@
        */
       public void executeDelete(ClassDescriptor cld, Object obj) throws 
PersistenceBrokerException
       {
  -        if(logger.isDebugEnabled()) logger.safeDebug("executeDelete", obj);
  +        if (logger.isDebugEnabled())
  +        {
  +            logger.debug("executeDelete: " + obj);
  +        }
   
           PreparedStatement stmt = null;
           try
  @@ -141,7 +155,10 @@
        */
       public void executeDelete(Query query, ClassDescriptor cld) throws 
PersistenceBrokerException
       {
  -        if(logger.isDebugEnabled()) logger.safeDebug("executeDelete (by 
Query)", query);
  +        if (logger.isDebugEnabled())
  +        {
  +            logger.debug("executeDelete (by Query): " + query);
  +        }
   
           PreparedStatement stmt = null;
   
  @@ -177,7 +194,10 @@
        */
       public void executeInsert(ClassDescriptor cld, Object obj) throws 
PersistenceBrokerException
       {
  -        if(logger.isDebugEnabled()) logger.safeDebug("executeInsert", obj);
  +        if (logger.isDebugEnabled())
  +        {
  +            logger.debug("executeInsert: " + obj);
  +        }
   
           PreparedStatement stmt = null;
           try
  @@ -212,6 +232,7 @@
           }
           catch (SQLException e)
           {
  +            final String stateCode = e.getSQLState();
               // Build a detailed error message
               StringBuffer msg = new StringBuffer("SQL failure while insert 
object data for class ");
               try
  @@ -227,7 +248,8 @@
                               .append(fields[i].getPersistentField().get(obj));
                   }
                   msg.append("], object was " + obj);
  -                msg.append(", exception message is [" + e.getMessage() + 
"]");
  +                msg.append(", exception message is 
[").append(e.getMessage()).append("]");
  +                msg.append(", SQL code [").append(stateCode).append("]");
               }
               catch (Exception ignore)
               {
  @@ -237,7 +259,9 @@
               /**
                * throw a specific type of runtime exception for a key 
constraint.
                */
  -            if (SQL_STATE_KEY_VIOLATED.equals(e.getSQLState()))
  +            if (SQL_STATE_KEY_VIOLATED.equals(stateCode)
  +                ||
  +                SQL_STATE_FK_VIOLATED.equals(stateCode))
               {
                   throw new KeyConstraintViolatedException(msg.toString(), e);
               }
  @@ -260,7 +284,9 @@
       public ResultSetAndStatement executeQuery(Query query, ClassDescriptor 
cld) throws PersistenceBrokerException
       {
           if (logger.isDebugEnabled())
  -            logger.safeDebug("executeQuery", query);
  +        {
  +            logger.debug("executeQuery: " + query);
  +        }
           /*
                 * MBAIRD: we should create a scrollable resultset if the start 
at
                 * index or end at index is set
  @@ -455,7 +481,10 @@
        */
       public void executeUpdate(ClassDescriptor cld, Object obj) throws 
PersistenceBrokerException
       {
  -        if(logger.isDebugEnabled()) logger.safeDebug("executeUpdate", obj);
  +        if (logger.isDebugEnabled())
  +        {
  +            logger.debug("executeUpdate: " + obj);
  +        }
   
           PreparedStatement stmt = null;
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to