Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-4247

Null pointer exception generated when preparing a statement containing "IN (?)" or "= ?", but not if using "IN (?, ?)" or enclosing the select query in another query.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 10.4.2.1, 10.5.1.1, 10.6.1.0
    • None
    • SQL
    • None
    • Crash, Regression

    Description

      Null pointer exception generated when preparing a statement containing "IN ", "GROUP BY", and "HAVING".
      The bug occurs if using "IN " or "= ?", but not if using "IN (?, ?)" or enclosing the select query in another query.

      The tables involved are:

      "CREATE TABLE types (" +
      " id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY," +
      " name VARCHAR(128) NOT NULL UNIQUE," +
      " shortName VARCHAR(64) NOT NULL" +
      ")";

      "CREATE TABLE methodParameters (" +
      " method INT REFERENCES methods (id)," +
      " position INT," +
      " parameter INT REFERENCES types (id)" +
      ")";

      The null pointer exception is generated by the command: dbConnection.prepareStatement(sqlStr);

      when sqlStr is:
      SELECT method FROM methodParameters AS mp INNER JOIN types ON mp.parameter = types.id WHERE types.name IN GROUP BY method HAVING COUNT(method) >= ?
      or
      SELECT method FROM methodParameters AS mp INNER JOIN types ON mp.parameter = types.id WHERE types.name = ? GROUP BY method HAVING COUNT(method) >= ?

      but not when sqlStr is:
      SELECT method FROM methodParameters AS mp INNER JOIN types ON mp.parameter = types.id WHERE types.name IN (?, ?) GROUP BY method HAVING COUNT(method) >= ?
      or
      SELECT method FROM methodParameters WHERE method IN ( SELECT method FROM methodParameters AS mp INNER JOIN types ON mp.parameter = types.id WHERE types.name IN GROUP BY method HAVING COUNT(method) >= ? )

      The information about the exception are:

      SQL state: XJ001
      Error code: 0
      Message: Exception Java : ': java.lang.NullPointerException'.

      java.sql.SQLException: Exception Java : ': java.lang.NullPointerException'.
      at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
      at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
      at org.apache.derby.impl.jdbc.ConnectionChild.handleException(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.thinkcollabs.jmbrowser.db.DAO.initSelect(DAO.java:375)
      at org.thinkcollabs.jmbrowser.db.DB_Derby$MethodDataLoader.run(DB_Derby.java:254)
      Caused by: java.sql.SQLException: Exception Java : ': java.lang.NullPointerException'.
      at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
      ... 16 more
      Caused by: java.lang.NullPointerException
      at org.apache.derby.impl.sql.compile.ColumnReference.remapColumnReferencesToExpressions(Unknown Source)
      at org.apache.derby.impl.sql.compile.AggregateNode.getNewExpressionResultColumn(Unknown Source)
      at org.apache.derby.impl.sql.compile.GroupByNode.addAggregateColumns(Unknown Source)
      at org.apache.derby.impl.sql.compile.GroupByNode.addNewColumnsForAggregation(Unknown Source)
      at org.apache.derby.impl.sql.compile.GroupByNode.addAggregates(Unknown Source)
      at org.apache.derby.impl.sql.compile.GroupByNode.init(Unknown Source)
      at org.apache.derby.iapi.sql.compile.NodeFactory.getNode(Unknown Source)
      at org.apache.derby.impl.sql.compile.SelectNode.genProjectRestrict(Unknown Source)
      at org.apache.derby.impl.sql.compile.SelectNode.modifyAccessPaths(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)
      ... 9 more

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              gleguern Le Guernic
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: