db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Knut Anders Hatlen <Knut.Hat...@Sun.COM>
Subject Re: svn commit: r371561 [9/11] - in /db/derby/code/trunk/java: client/org/apache/derby/client/ client/org/apache/derby/client/am/ client/org/apache/derby/client/net/ client/org/apache/derby/jdbc/ testing/org/apache/derbyTesting/functionTests/master/DerbyNe...
Date Thu, 02 Feb 2006 09:53:56 GMT
Hi David, I'm sorry that I didn't notice it earlier, but I have found
a problem with the following method:

> Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java
> URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java?rev=371561&r1=371560&r2=371561&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java (original)
> +++ db/derby/code/trunk/java/client/org/apache/derby/client/am/SqlException.java Mon
Jan 23 07:58:34 2006
> +    
> +    /**
> +     * Convert this SqlException into a java.sql.SQLException
> +     */
> +    public SQLException getSQLException()
> +    {
> +        if ( wrappedException_ != null )
> +        {
> +            return wrappedException_;
> +        }
> +                
> +        // When we have support for JDBC 4 SQLException subclasses, this is
> +        // where we decide which exception to create
> +        SQLException sqle = new SQLException(getMessage(), getSQLState(), 
> +            getErrorCode());
> +
> +        // If we're in a runtime that supports chained exceptions, set the cause 
> +        // of the SQLException.
> +         if (JVMInfo.JDK_ID >= JVMInfo.J2SE_14 )
> +        {
> +            sqle.initCause(getCause());
> +        }
> +
> +        // Set up the nextException chain
> +        if ( nextException_ != null )
> +        {
> +            // The exception chain gets constructed automatically through 
> +            // the beautiful power of recursion
> +            sqle.setNextException(nextException_.getSQLException());
> +        }
> +        
> +        return sqle;
> +    }    

I think

    if (JVMInfo.JDK_ID >= JVMInfo.J2SE_14 )
    {
        sqle.initCause(getCause());
    }

should have been

    if (JVMInfo.JDK_ID >= JVMInfo.J2SE_14 )
    {
        sqle.initCause(this);
    }

It is the SqlException that is the cause of the SQLException. The
cause of an SqlException is often null, and if we pass the null value
to SQLException.initCause(), we lose all of the driver internal stack
trace, and it makes debugging very difficult. All we get in the stack
trace is SqlException.getSQLException(), the top-level JDBC method and
the application stack.

There is a similar problem in SqlWarning.getSQLWarning().

-- 
Knut Anders


Mime
View raw message