[
https://issues.apache.org/jira/browse/PHOENIX-3295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15553395#comment-15553395
]
James Taylor commented on PHOENIX-3295:
---------------------------------------
+1. I think this an improvement. Would it make sense for ArrayColumnExpression
to be derived from KeValueExpression to simplify it further?
bq. We need it to look up the PColumn to get the original data column name.
Do we have a map of column name to position, is that why we need this? Are
there many dependencies on needing the original cf:cq? Seems like
IndexMaintainer might be able to get by with two int[] for the positions of
each KV column in table and index.
> Remove ReplaceArrayColumnWithKeyValueColumnExpressionVisitor
> -------------------------------------------------------------
>
> Key: PHOENIX-3295
> URL: https://issues.apache.org/jira/browse/PHOENIX-3295
> Project: Phoenix
> Issue Type: Improvement
> Reporter: Thomas D'Silva
> Assignee: Thomas D'Silva
> Attachments: PHOENIX-3295.patch
>
>
> ReplaceArrayColumnWithKeyValueColumnExpressionVisitor is only used in one
> place in IndexUtil.generateIndexData because we use a ValueGetter to get the
> value of the data table column using the original data table column
> reference. This is also why ArrayColumnExpression needs to keep track of the
> original key value column expression.
> If we don't replace the array column expression with the original column
> expression when it looks up the column by the qualifier it won't find it.
> {code}
> ValueGetter valueGetter = new ValueGetter() {
>
> @Override
> public byte[] getRowKey() {
> return dataMutation.getRow();
> }
>
> @Override
> public ImmutableBytesWritable
> getLatestValue(ColumnReference ref) {
> // Always return null for our empty key value, as
> this will cause the index
> // maintainer to always treat this Put as a new
> row.
> if (isEmptyKeyValue(table, ref)) {
> return null;
> }
> byte[] family = ref.getFamily();
> byte[] qualifier = ref.getQualifier();
> RowMutationState rowMutationState =
> valuesMap.get(ptr);
> PColumn column = null;
> try {
> column =
> table.getColumnFamily(family).getPColumnForColumnQualifier(qualifier);
> } catch (ColumnNotFoundException e) {
> } catch (ColumnFamilyNotFoundException e) {
> }
> if (rowMutationState!=null && column!=null) {
> byte[] value =
> rowMutationState.getColumnValues().get(column);
> ImmutableBytesPtr ptr = new
> ImmutableBytesPtr();
> ptr.set(value==null ?
> ByteUtil.EMPTY_BYTE_ARRAY : value);
>
> SchemaUtil.padData(table.getName().getString(), column, ptr);
> return ptr;
> }
> return null;
> }
>
> };
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)