phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas D'Silva (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-1001) Using NEXT VALUE FOR 'sequence' as an input to a function cause a NPE
Date Sat, 07 Jun 2014 22:32:01 GMT

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

Thomas D'Silva commented on PHOENIX-1001:
-----------------------------------------

[~jamestaylor] I was able to apply the patch to 3.0 and 4.0 without having to resolve any
conflicts. 

I have attached the 3.0 patch that I created, but its basically the same as the patch for
master/4.0. 

I also created PHOENIX-1030 to change Expression.isDeterministic() to return an ENUM with
three values {DETERMINISTIC, UNDETERMINISTIC_ROW, UNDETERMINISTIC_STMT}

Thanks,
Thomas

> Using NEXT VALUE FOR 'sequence' as an input to a function cause a NPE
> ---------------------------------------------------------------------
>
>                 Key: PHOENIX-1001
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1001
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Thomas D'Silva
>            Assignee: Thomas D'Silva
>         Attachments: PHOENIX-1001.patch
>
>
> I get a NPE while trying to write a test that  uses NEXT VALUE of a sequence as an input
to a function.
>  
> For example 
> {code:sql}
> CREATE SEQUENCE foo.bar START WITH 0 INCREMENT BY 62
> SELECT INVERT(NEXT VALUE FOR foo.bar) FROM SYSTEM."SEQUENCE"
> {code}
> causes an exception
> java.lang.NullPointerException
> 	at org.apache.phoenix.compile.SequenceManager$SequenceValueExpression.evaluate(SequenceManager.java:189)
> 	at org.apache.phoenix.expression.function.InvertFunction.evaluate(InvertFunction.java:47)
> 	at org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:288)
> 	at org.apache.phoenix.compile.ProjectionCompiler$SelectClauseVisitor.visitLeave(ProjectionCompiler.java:560)
> 	at org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:1)
> 	at org.apache.phoenix.parse.FunctionParseNode.accept(FunctionParseNode.java:79)
> 	at org.apache.phoenix.compile.ProjectionCompiler.compile(ProjectionCompiler.java:325)
> 	at org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:325)
> 	at org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:130)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:291)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:1)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:206)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:1)
> 	at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:54)
> 	at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:202)
> 	at org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:157)
> 	at org.apache.phoenix.end2end.SequenceIT.test123(SequenceIT.java:596)
> 	
> 	
> I was able to fix this error by changing isStateless() to return false for SequenceValueParseNode
and SeuenceValueExpression, however this caused tests to fail in SequenceIT when it tries
to use NEXT VALUE in an UPSERT
> java.sql.SQLException: ERROR 204 (22008): Values in UPSERT must evaluate to a constant.
> 	at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:309)
> 	at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:133)
> 	at org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:652)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:435)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:1)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$3.call(PhoenixStatement.java:244)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$3.call(PhoenixStatement.java:1)
> 	at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:54)
> 	at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:235)
> 	at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:946)
> 	at org.apache.phoenix.end2end.SequenceIT.testInsertNextValueFor(SequenceIT.java:191)
> 	



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message