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

James Taylor commented on PHOENIX-3295:
---------------------------------------

I think it's ok to bring back the old value getter if need be, but I'd really 
like to get rid of needing the original KeyValue column expression 
(KeyValueColumnExpression) here:
{code}
public class ArrayColumnExpression extends ColumnExpression {
    
    private String displayName; // client-side only
    private int index;
    // expression that represents the array (where all cols are stored in a 
single key value)
    private KeyValueColumnExpression arrayExpression;
    // expression that represents this column if (it were stored as a regular 
key value) 
    private KeyValueColumnExpression origKVExpression;
{code}
Does this change allow that too?

> 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)

Reply via email to