Hari Krishna Dara created PHOENIX-7615:
------------------------------------------

             Summary: NPE when NULL is bound to a CASE inside ON DUPLICATE KEY
                 Key: PHOENIX-7615
                 URL: https://issues.apache.org/jira/browse/PHOENIX-7615
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 5.3.0
            Reporter: Hari Krishna Dara
            Assignee: Hari Krishna Dara


A NullPointerException is thrown when using a CASE expression to conditionally 
bind a value to NULL in an UPSERT statement using ON DUPLICATE KEY. Here is a 
sample table and an UPSERT statement that can reproduce it (we need to use JDBC 
to bind a NULL)

 

{{    CREATE TABLE test_tale(}}
{{        row_id INTEGER NOT NULL,}}
{{        chunk VARCHAR,}}
{{        CONSTRAINT PK PRIMARY KEY (row_id))}}

 

{{    UPSERT INTO test_table (row_id, chunk) VALUES (:1, :2)}}
{{        ON DUPLICATE KEY UPDATE}}
{{            chunk = CASE WHEN :2 IS NOT NULL THEN :2 ELSE chunk END}}

 

Here is a sample exception stacktrace:

 

{{java.lang.NullPointerException}}
{{    at 
org.apache.phoenix.jdbc.PhoenixParameterMetaData.addParam(PhoenixParameterMetaData.java:161)}}
{{    at 
org.apache.phoenix.compile.BindManager.addParamMetaData(BindManager.java:78)}}
{{    at 
org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:755)}}
{{    at 
org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:144)}}
{{    at 
org.apache.phoenix.parse.IsNullParseNode.accept(IsNullParseNode.java:53)}}
{{    at 
org.apache.phoenix.parse.CompoundParseNode.acceptChildren(CompoundParseNode.java:64)}}
{{    at org.apache.phoenix.parse.CaseParseNode.accept(CaseParseNode.java:45)}}
{{    at 
org.apache.phoenix.compile.UpsertCompiler.getOnDuplicateKeyBytes(UpsertCompiler.java:928)}}
{{    at 
org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:873)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:1142)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:1128)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:626)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:607)}}
{{    at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:606)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:584)}}
{{    at 
org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:184)}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to