You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Thomas D'Silva (JIRA)" <ji...@apache.org> on 2016/09/19 18:27:20 UTC

[jira] [Created] (PHOENIX-3295) Remove ReplaceArrayColumnWithKeyValueColumnExpressionVisitor

Thomas D'Silva created PHOENIX-3295:
---------------------------------------

             Summary: Remove ReplaceArrayColumnWithKeyValueColumnExpressionVisitor 
                 Key: PHOENIX-3295
                 URL: https://issues.apache.org/jira/browse/PHOENIX-3295
             Project: Phoenix
          Issue Type: Improvement
            Reporter: Thomas D'Silva


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)