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

ASF GitHub Bot commented on PHOENIX-7263:
-----------------------------------------

chrajeshbabu commented on PR #1850:
URL: https://github.com/apache/phoenix/pull/1850#issuecomment-1990002795

   @stoty  while preparing the split keys index key constraints like order  
also should be considered. Will change the patch accordingly and will check 
whether it can be moved to existing utils.




> 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.2.0, 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