Rajeshbabu Chintaguntla created PHOENIX-7263: ------------------------------------------------
Summary: 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 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)