[ https://issues.apache.org/jira/browse/PHOENIX-7263?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rajeshbabu Chintaguntla updated PHOENIX-7263: --------------------------------------------- Fix Version/s: 5.3.0 (was: 5.2.1) > 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)