phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas D'Silva (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (PHOENIX-3295) Remove ReplaceArrayColumnWithKeyValueColumnExpressionVisitor
Date Wed, 05 Oct 2016 22:46:20 GMT

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

Thomas D'Silva updated PHOENIX-3295:
------------------------------------
    Attachment: PHOENIX-3295.patch

[~jamestaylor]

I had to bring back the old value getter (in IndexUtil.generateIndexData) in order to remove
ReplaceArrayColumnWithKeyValueColumnExpressionVisitor. 

Thanks,
Thomas

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

Mime
View raw message