Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.3.1.4, 10.5.3.0, 10.6.1.0
    • Fix Version/s: 10.5.3.1, 10.6.1.0
    • Component/s: SQL
    • Labels:
      None
    • Urgency:
      Urgent
    • Bug behavior facts:
      Seen in production

      Description

      A NPE occurs at org.apache.derby.iapi.util.JBitSet.or().

      A NPE occured at the same location before: http://issues.apache.org/jira/browse/DERBY-1574
      The bug was confirmed by Bryan Pendleton to show in the HEAD as well: http://mail-archives.apache.org/mod_mbox/db-derby-user/201002.mbox/%3C4B79F74E.1000005@amberpoint.com%3E

      To reproduce:
      ----------------------

      CREATE TABLE ABC (ID int PRIMARY KEY NOT NULL);
      CREATE TABLE DEF (ID int PRIMARY KEY NOT NULL);

      SELECT *
      FROM ABC t1
      WHERE (SELECT DISTINCT t2.ID FROM DEF t2)
      IN (SELECT t3.ID FROM DEF t3)

      ----------------------

      Leads to

      error message:
      Error: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ001, SQLERRMC: java.lang.NullPointerExceptionXJ001.U
      SQLState: XJ001
      ErrorCode: -1

      Stacktrace:
      java.lang.NullPointerException
      at org.apache.derby.iapi.util.JBitSet.or(Unknown Source)
      at org.apache.derby.impl.sql.compile.OptimizerImpl.<init>(Unknown Source)
      at org.apache.derby.impl.sql.compile.Level2OptimizerImpl.<init>(Unknown Source)
      at org.apache.derby.impl.sql.compile.Level2OptimizerFactoryImpl.getOptimizerImpl(Unknown Source)
      at org.apache.derby.impl.sql.compile.OptimizerFactoryImpl.getOptimizer(Unknown Source)
      at org.apache.derby.impl.sql.compile.ResultSetNode.getOptimizer(Unknown Source)
      at org.apache.derby.impl.sql.compile.SelectNode.optimize(Unknown Source)
      at org.apache.derby.impl.sql.compile.SubqueryNode.optimize(Unknown Source)
      at org.apache.derby.impl.sql.compile.SubqueryList.optimize(Unknown Source)
      at org.apache.derby.impl.sql.compile.SelectNode.optimize(Unknown Source)
      at org.apache.derby.impl.sql.compile.DMLStatementNode.optimizeStatement(Unknown Source)
      at org.apache.derby.impl.sql.compile.CursorNode.optimizeStatement(Unknown Source)
      at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
      at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
      at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown Source)
      at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
      at org.apache.derby.impl.drda.DRDAStatement.prepare(Unknown Source)
      at org.apache.derby.impl.drda.DRDAStatement.explicitPrepare(Unknown Source)
      at org.apache.derby.impl.drda.DRDAConnThread.parsePRPSQLSTT(Unknown Source)
      at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown Source)
      at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
      Cleanup action completed

      1. preprocess.diff
        0.7 kB
        Knut Anders Hatlen
      2. d4549-1a.diff
        3 kB
        Knut Anders Hatlen

        Issue Links

          Activity

          Transition Time In Source Status Execution Times Last Executer Last Execution Date
          Open Open In Progress In Progress
          3h 19m 1 Knut Anders Hatlen 16/Feb/10 12:44
          In Progress In Progress Resolved Resolved
          1d 21h 52m 1 Knut Anders Hatlen 18/Feb/10 10:36
          Resolved Resolved Closed Closed
          1214d 22h 42m 1 Knut Anders Hatlen 17/Jun/13 09:19
          Gavin made changes -
          Workflow jira [ 12499103 ] Default workflow, editable Closed status [ 12802736 ]
          Knut Anders Hatlen made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Hide
          Knut Anders Hatlen added a comment -

          [bulk update] Close all resolved issues that haven't been updated for more than one year.

          Show
          Knut Anders Hatlen added a comment - [bulk update] Close all resolved issues that haven't been updated for more than one year.
          Knut Anders Hatlen made changes -
          Fix Version/s 10.5.3.1 [ 12314182 ]
          Hide
          Knut Anders Hatlen added a comment -

          Merged fix to 10.5 and committed revision 916631.

          Show
          Knut Anders Hatlen added a comment - Merged fix to 10.5 and committed revision 916631.
          Knut Anders Hatlen made changes -
          Status In Progress [ 3 ] Resolved [ 5 ]
          Issue & fix info [Patch Available]
          Fix Version/s 10.6.0.0 [ 12313727 ]
          Resolution Fixed [ 1 ]
          Hide
          Knut Anders Hatlen added a comment -

          Thanks for looking at the patch, Bryan!
          Committed revision 911315.

          I think this fix is a candidate for back-porting to 10.5. Will do that in a couple of days if it doesn't cause any problems in the nightly regression tests.

          Show
          Knut Anders Hatlen added a comment - Thanks for looking at the patch, Bryan! Committed revision 911315. I think this fix is a candidate for back-porting to 10.5. Will do that in a couple of days if it doesn't cause any problems in the nightly regression tests.
          Hide
          Bryan Pendleton added a comment -

          The patch looks good to me. I agree with your analysis the that missing preprocess() call is the cause.

          +1 to commit.

          Show
          Bryan Pendleton added a comment - The patch looks good to me. I agree with your analysis the that missing preprocess() call is the cause. +1 to commit.
          Knut Anders Hatlen made changes -
          Issue & fix info [Patch Available]
          Knut Anders Hatlen made changes -
          Attachment d4549-1a.diff [ 12436093 ]
          Hide
          Knut Anders Hatlen added a comment -

          Attaching an updated patch which includes a test case. All the regression tests ran cleanly with the patch.

          Show
          Knut Anders Hatlen added a comment - Attaching an updated patch which includes a test case. All the regression tests ran cleanly with the patch.
          Knut Anders Hatlen made changes -
          Status Open [ 1 ] In Progress [ 3 ]
          Knut Anders Hatlen made changes -
          Assignee Knut Anders Hatlen [ knutanders ]
          Knut Anders Hatlen made changes -
          Attachment preprocess.diff [ 12435972 ]
          Hide
          Knut Anders Hatlen added a comment -

          It looks like the problem is very similar to DERBY-1574, only that in this case it's SubqueryNode that forgets to call preprocess() recursively on leftOperand. The attached patch (preprocess.diff) makes the NPE go away, and all the lang tests ran cleanly with it.

          Show
          Knut Anders Hatlen added a comment - It looks like the problem is very similar to DERBY-1574 , only that in this case it's SubqueryNode that forgets to call preprocess() recursively on leftOperand. The attached patch (preprocess.diff) makes the NPE go away, and all the lang tests ran cleanly with it.
          Murat Knecht made changes -
          Affects Version/s 10.3.1.4 [ 12312590 ]
          Hide
          Murat Knecht added a comment -

          Confirmed bug for version 10.3.1.4 and added it as "affected".

          Show
          Murat Knecht added a comment - Confirmed bug for version 10.3.1.4 and added it as "affected".
          Knut Anders Hatlen made changes -
          Link This issue relates to DERBY-1574 [ DERBY-1574 ]
          Kristian Waagan made changes -
          Field Original Value New Value
          Affects Version/s 10.6.0.0 [ 12313727 ]
          Hide
          Kristian Waagan added a comment -

          Ran repro on trunk, which also has the bug. Stack trace with line numbers below:

          ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
          java.sql.SQLException: Java exception: ': java.lang.NullPointerException'.
          [ snip ]
          Caused by: java.lang.NullPointerException
          at org.apache.derby.iapi.util.JBitSet.or(JBitSet.java:241)
          at org.apache.derby.impl.sql.compile.ReferencedTablesVisitor.visit(ReferencedTablesVisitor.java:77)
          at org.apache.derby.impl.sql.compile.QueryTreeNode.accept(QueryTreeNode.java:735)
          at org.apache.derby.impl.sql.compile.SubqueryNode.acceptChildren(SubqueryNode.java:2294)
          at org.apache.derby.impl.sql.compile.QueryTreeNode.accept(QueryTreeNode.java:738)
          at org.apache.derby.impl.sql.compile.ValueNode.getTablesReferenced(ValueNode.java:790)
          at org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode.selfComparison(BinaryRelationalOperatorNode.java:531)
          at org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode.optimizableEqualityNode(BinaryRelationalOperatorNode.java:1400)
          at org.apache.derby.impl.sql.compile.PredicateList.hasOptimizableEqualityPredicate(PredicateList.java:389)
          at org.apache.derby.impl.sql.compile.FromBaseTable.isOneRowResultSet(FromBaseTable.java:4432)
          at org.apache.derby.impl.sql.compile.FromBaseTable.isOneRowResultSet(FromBaseTable.java:3864)
          at org.apache.derby.impl.sql.compile.FromBaseTable.nextAccessPath(FromBaseTable.java:441)
          at org.apache.derby.impl.sql.compile.ProjectRestrictNode.nextAccessPath(ProjectRestrictNode.java:188)
          at org.apache.derby.impl.sql.compile.OptimizerImpl.getNextDecoratedPermutation(OptimizerImpl.java:1551)
          at org.apache.derby.impl.sql.compile.SelectNode.optimize(SelectNode.java:1912)
          at org.apache.derby.impl.sql.compile.DMLStatementNode.optimizeStatement(DMLStatementNode.java:315)
          at org.apache.derby.impl.sql.compile.CursorNode.optimizeStatement(CursorNode.java:558)
          at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:381)
          at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:90)
          at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:828)
          at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:606)
          ... 14 more

          Show
          Kristian Waagan added a comment - Ran repro on trunk, which also has the bug. Stack trace with line numbers below: ERROR XJ001: Java exception: ': java.lang.NullPointerException'. java.sql.SQLException: Java exception: ': java.lang.NullPointerException'. [ snip ] Caused by: java.lang.NullPointerException at org.apache.derby.iapi.util.JBitSet.or(JBitSet.java:241) at org.apache.derby.impl.sql.compile.ReferencedTablesVisitor.visit(ReferencedTablesVisitor.java:77) at org.apache.derby.impl.sql.compile.QueryTreeNode.accept(QueryTreeNode.java:735) at org.apache.derby.impl.sql.compile.SubqueryNode.acceptChildren(SubqueryNode.java:2294) at org.apache.derby.impl.sql.compile.QueryTreeNode.accept(QueryTreeNode.java:738) at org.apache.derby.impl.sql.compile.ValueNode.getTablesReferenced(ValueNode.java:790) at org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode.selfComparison(BinaryRelationalOperatorNode.java:531) at org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode.optimizableEqualityNode(BinaryRelationalOperatorNode.java:1400) at org.apache.derby.impl.sql.compile.PredicateList.hasOptimizableEqualityPredicate(PredicateList.java:389) at org.apache.derby.impl.sql.compile.FromBaseTable.isOneRowResultSet(FromBaseTable.java:4432) at org.apache.derby.impl.sql.compile.FromBaseTable.isOneRowResultSet(FromBaseTable.java:3864) at org.apache.derby.impl.sql.compile.FromBaseTable.nextAccessPath(FromBaseTable.java:441) at org.apache.derby.impl.sql.compile.ProjectRestrictNode.nextAccessPath(ProjectRestrictNode.java:188) at org.apache.derby.impl.sql.compile.OptimizerImpl.getNextDecoratedPermutation(OptimizerImpl.java:1551) at org.apache.derby.impl.sql.compile.SelectNode.optimize(SelectNode.java:1912) at org.apache.derby.impl.sql.compile.DMLStatementNode.optimizeStatement(DMLStatementNode.java:315) at org.apache.derby.impl.sql.compile.CursorNode.optimizeStatement(CursorNode.java:558) at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:381) at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:90) at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:828) at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:606) ... 14 more
          Murat Knecht created issue -

            People

            • Assignee:
              Knut Anders Hatlen
              Reporter:
              Murat Knecht
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development