You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Dumindu Buddhika (JIRA)" <ji...@apache.org> on 2015/07/23 06:37:04 UTC

[jira] [Updated] (PHOENIX-2138) Non equality comparisons don't work for ARRAY type columns that are DESC in row key

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

Dumindu Buddhika updated PHOENIX-2138:
--------------------------------------
    Attachment: PHOENIX-2138_v1.patch

[~jamestaylor], I have taken a look at this one. The error is caused by the inversion of bytes at ExplainTable.appendPKColumnValue method.
{code}
range = SortOrder.invert(range, 0, new byte[range.length], 0, range.length);
{code}
Error is caused as this does not work for variable length array types. Attached is a fix and some tests.

> Non equality comparisons don't work for ARRAY type columns that are DESC in row key
> -----------------------------------------------------------------------------------
>
>                 Key: PHOENIX-2138
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2138
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Assignee: Dumindu Buddhika
>         Attachments: PHOENIX-2138_v1.patch
>
>
> An exception occurs when you attempt to query an array column declared as DESC in the row key with <, >, <=, and >=.  Here's how to reproduce:
> {code}
> create table a (k varchar array primary key desc);
> upsert into a values (array['a']);
> select * from a where k >= array['a'];
> {code}
> The exception is:
> {code}
> java.lang.IllegalArgumentException
> 	at java.nio.Buffer.position(Buffer.java:236)
> 	at org.apache.phoenix.schema.types.PArrayDataType.createPhoenixArray(PArrayDataType.java:1074)
> 	at org.apache.phoenix.schema.types.PArrayDataType.toObject(PArrayDataType.java:335)
> 	at org.apache.phoenix.schema.types.PVarcharArray.toObject(PVarcharArray.java:65)
> 	at org.apache.phoenix.schema.types.PDataType.toObject(PDataType.java:966)
> 	at org.apache.phoenix.schema.types.PDataType.toObject(PDataType.java:970)
> 	at org.apache.phoenix.schema.types.PDataType.toObject(PDataType.java:999)
> 	at org.apache.phoenix.schema.types.PDataType.toStringLiteral(PDataType.java:1072)
> 	at org.apache.phoenix.schema.types.PDataType.toStringLiteral(PDataType.java:1068)
> 	at org.apache.phoenix.iterate.ExplainTable.appendPKColumnValue(ExplainTable.java:182)
> 	at org.apache.phoenix.iterate.ExplainTable.appendScanRow(ExplainTable.java:257)
> 	at org.apache.phoenix.iterate.ExplainTable.appendKeyRanges(ExplainTable.java:273)
> 	at org.apache.phoenix.iterate.ExplainTable.explain(ExplainTable.java:122)
> 	at org.apache.phoenix.iterate.BaseResultIterators.explain(BaseResultIterators.java:713)
> 	at org.apache.phoenix.iterate.RoundRobinResultIterator.explain(RoundRobinResultIterator.java:153)
> 	at org.apache.phoenix.execute.BaseQueryPlan.getPlanSteps(BaseQueryPlan.java:406)
> 	at org.apache.phoenix.execute.BaseQueryPlan.iterator(BaseQueryPlan.java:263)
> 	at org.apache.phoenix.execute.BaseQueryPlan.iterator(BaseQueryPlan.java:161)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:265)
> 	at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:255)
> 	at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> 	at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:254)
> 	at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1435)
> 	at sqlline.Commands.execute(Commands.java:822)
> 	at sqlline.Commands.sql(Commands.java:732)
> 	at sqlline.SqlLine.dispatch(SqlLine.java:808)
> 	at sqlline.SqlLine.begin(SqlLine.java:681)
> 	at sqlline.SqlLine.start(SqlLine.java:398)
> 	at sqlline.SqlLine.main(SqlLine.java:292)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)