[ 
https://issues.apache.org/jira/browse/PHOENIX-7263?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Viraj Jasani updated PHOENIX-7263:
----------------------------------
    Fix Version/s:     (was: 5.2.0)

> Row value constructor split keys not allowed on indexes
> -------------------------------------------------------
>
>                 Key: PHOENIX-7263
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-7263
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Rajeshbabu Chintaguntla
>            Assignee: Rajeshbabu Chintaguntla
>            Priority: Major
>             Fix For: 5.3.0, 5.1.4
>
>
> While creating indexes if we pass row value constructor split keys getting 
> following errorĀ  same is passing with create table because while creating the 
> table properly building the split keys using expression compiler which is not 
> the case with index creation.
> {noformat}
> java.lang.ClassCastException: 
> org.apache.phoenix.expression.RowValueConstructorExpression cannot be cast to 
> org.apache.phoenix.expression.LiteralExpression
>       at 
> org.apache.phoenix.compile.CreateIndexCompiler.compile(CreateIndexCompiler.java:77)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableCreateIndexStatement.compilePlan(PhoenixStatement.java:1205)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableCreateIndexStatement.compilePlan(PhoenixStatement.java:1191)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:435)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:425)
>       at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:424)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:412)
>       at 
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:2009)
>       at sqlline.Commands.executeSingleQuery(Commands.java:1054)
>       at sqlline.Commands.execute(Commands.java:1003)
>       at sqlline.Commands.sql(Commands.java:967)
>       at sqlline.SqlLine.dispatch(SqlLine.java:734)
>       at sqlline.SqlLine.begin(SqlLine.java:541)
>       at sqlline.SqlLine.start(SqlLine.java:267)
>       at sqlline.SqlLine.main(SqlLine.java:206)
> {noformat}
> In create table:
> {code:java}
>         final byte[][] splits = new byte[splitNodes.size()][];
>         ImmutableBytesWritable ptr = context.getTempPtr();
>         ExpressionCompiler expressionCompiler = new 
> ExpressionCompiler(context);
>         for (int i = 0; i < splits.length; i++) {
>             ParseNode node = splitNodes.get(i);
>             if (node instanceof BindParseNode) {
>                 context.getBindManager().addParamMetaData((BindParseNode) 
> node, VARBINARY_DATUM);
>             }
>             if (node.isStateless()) {
>                 Expression expression = node.accept(expressionCompiler);
>                 if (expression.evaluate(null, ptr)) {;
>                     splits[i] = ByteUtil.copyKeyBytesIfNecessary(ptr);
>                     continue;
>                 }
>             }
>             throw new 
> SQLExceptionInfo.Builder(SQLExceptionCode.SPLIT_POINT_NOT_CONSTANT)
>                 .setMessage("Node: " + node).build().buildException();
>         }
> {code}
> Where as in indexing expecting only literals.
> {code:java}
>         final byte[][] splits = new byte[splitNodes.size()][];
>         for (int i = 0; i < splits.length; i++) {
>             ParseNode node = splitNodes.get(i);
>             if (!node.isStateless()) {
>                 throw new 
> SQLExceptionInfo.Builder(SQLExceptionCode.SPLIT_POINT_NOT_CONSTANT)
>                     .setMessage("Node: " + node).build().buildException();
>             }
>             LiteralExpression expression = 
> (LiteralExpression)node.accept(expressionCompiler);
>             splits[i] = expression.getBytes();
>         }
> {code}



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

Reply via email to