[ 
https://issues.apache.org/jira/browse/DERBY-3352?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-3352:
--------------------------------------

    Attachment: test.diff

I'm not familiar with this code, but the fix looks simple and correct to me. To 
see that it actually did what it intended to do, I wrote a small JUnit test 
that verified that the NPE was fixed and that the table was correctly 
truncated. See the attached patch. The test also checks that a "not 
implemented" exception is thrown in insane builds.

If we keep the TRUNCATE TABLE code in trunk, although only enabled in debug 
builds, I think it is worth checking in the test. Since we don't know the state 
of this code, it's good to have a place where we can add tests for it as a 
first step towards enabling it in non-debug builds as well (if it's decided 
that it's a good thing to have TRUNCATE TABLE in Derby).

> truncateTable crashed, Caused by: java.lang.NullPointerException
> ----------------------------------------------------------------
>
>                 Key: DERBY-3352
>                 URL: https://issues.apache.org/jira/browse/DERBY-3352
>             Project: Derby
>          Issue Type: Bug
>          Components: Services
>    Affects Versions: 10.3.1.4, 10.3.2.1
>         Environment: Windows XP.SP2 , Eclipse 3.2.2 , JDK 1.5_05 
>            Reporter: QingpingXu
>            Priority: Critical
>         Attachments: derby-3352.diff, test.diff
>
>
> Since derby 10.3.2.1, when truncate a table which has index , a 
> java.lang.NullPointerException is throwed;but the same src runs successfully 
> with derby 10.2.2.0。
> here's the example source code and stack trace:
> Src:
>         public static void main(String[] args)
>       {
>               
>               try
>               {
>                       Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
>                       
>                       Connection conn = 
> DriverManager.getConnection("jdbc:derby:test;create=true");
>                       
>                       Statement stat = conn.createStatement();
>                       stat.executeUpdate("create table m (uri varchar(256),f 
> int)");
>                       stat.executeUpdate("create index aa on m (uri)");
>                       stat.executeUpdate("truncate table m");
>                       
>                       System.out.println("Truncate table m successfully!");
>               }
>               catch (Exception ex)
>               {
>                       ex.printStackTrace();
>               }
>       }
> Error:
> java.sql.SQLException: Java Exception:":java.lang.NullPointerException"。
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>       at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:88)
>       at org.apache.derby.impl.jdbc.Util.javaException(Util.java:245)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346)
>       at 
> org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:1574)
>       at 
> org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81)
>       at 
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1315)
>       at 
> org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:618)
>       at 
> org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(EmbedStatement.java:176)
>       at update.UpdateURI.main(UpdateURI.java:34)
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.derby.impl.sql.execute.AlterTableConstantAction.truncateTable(AlterTableConstantAction.java:1462)
>       at 
> org.apache.derby.impl.sql.execute.AlterTableConstantAction.executeConstantAction(AlterTableConstantAction.java:531)
>       at 
> org.apache.derby.impl.sql.execute.MiscResultSet.open(MiscResultSet.java:64)
>       at 
> org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:370)
>       at 
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1225)
>       ... 3 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to