[ 
https://issues.apache.org/jira/browse/DERBY-6273?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13691853#comment-13691853
 ] 

Knut Anders Hatlen commented on DERBY-6273:
-------------------------------------------

The problem seems to be this loop in CoalesceFunctionNode.bindExpression():

                //set all the parameter types to the type of the result type
                for (int index = 0; index < argumentsListSize; index++)
                {
                        if (((ValueNode) 
argumentsList.elementAt(index)).requiresTypeFromContext())
                        {
                                
((ValueNode)argumentsList.elementAt(index)).setType(getTypeServices());
                                break;
                        }
                }

The comment says it should set *all* the parameter types, but the loop only 
sets the type of the *first* parameter.

Removing the break statement from the loop seems to make the query compile 
without throwing NPE.
                
> NullPointerException when using more than one parameter in COALESCE
> -------------------------------------------------------------------
>
>                 Key: DERBY-6273
>                 URL: https://issues.apache.org/jira/browse/DERBY-6273
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.10.1.1
>            Reporter: Knut Anders Hatlen
>
> Calls to COALESCE fail with NullPointerExceptions if there are multiple ? 
> parameters:
> ij version 10.10
> ij> connect 'jdbc:derby:memory:db;create=true';
> ij> prepare ps as 'values coalesce(?,?,1)';
> ERROR XJ001: Java exception: ': java.lang.NullPointerException'. (errorCode = 
> 0)
> java.lang.NullPointerException
>       at 
> org.apache.derby.impl.sql.compile.ParameterNode.generateExpression(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.CoalesceFunctionNode.generateExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.generateExpression(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumnList.generateCore(Unknown 
> Source)
>       at org.apache.derby.impl.sql.compile.ResultColumnList.generate(Unknown 
> Source)
>       at org.apache.derby.impl.sql.compile.RowResultSetNode.generate(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ScrollInsensitiveResultSetNode.generate(Unknown
>  Source)
>       at org.apache.derby.impl.sql.compile.CursorNode.generate(Unknown Source)
>       at org.apache.derby.impl.sql.compile.StatementNode.generate(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.tools.ij.ij.PrepareStatement(Unknown Source)
>       at org.apache.derby.impl.tools.ij.ij.ijStatement(Unknown Source)
>       at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(Unknown Source)
>       at org.apache.derby.impl.tools.ij.utilMain.go(Unknown Source)
>       at org.apache.derby.impl.tools.ij.Main.go(Unknown Source)
>       at org.apache.derby.impl.tools.ij.Main.mainCore(Unknown Source)
>       at org.apache.derby.impl.tools.ij.Main.main(Unknown Source)
>       at org.apache.derby.tools.ij.main(Unknown Source)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to