[ 
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-v3.patch

[~jamestaylor]

I have attached an updated v3 patch. [~samarthjain] already commited the v2 
patch. 

This patch has the following changes:
I changed the column qualifier name of the single key value to use a constant.
I also modified ArrayColumnExpression to store the key value column expression 
a field and return this in getKeyValueExpression().

In IndexMaintainer I modified the map to use an ImmutableBytesPtr instead of 
ByteBuffer.
{code}
-            Map<ByteBuffer, List<Pair<ColumnReference, ColumnReference>>> 
familyToColListMap = Maps.newHashMap();
+            Map<ImmutableBytesPtr, List<Pair<ColumnReference, 
ColumnReference>>> familyToColListMap = Maps.newHashMap();
{code} 

PHOENIX-3442 was created to handle support for default values,



> 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-v2.patch, PHOENIX-3295-v3.patch, 
> 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