[
https://issues.apache.org/jira/browse/PHOENIX-3295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15553441#comment-15553441
]
Samarth Jain commented on PHOENIX-3295:
---------------------------------------
Yes, that is correct. Indexes and tables have different column qualifiers. For
ex - a key value column may have qualifier 13 in view while in index it may be
11. In such a scenario using column qualifier to detect whether a column exists
both in view and index won't work. We need to rely on the column family and
column name for that.
It possibly could be improved, though. I wasn't particularly crazy about having
to track column family, column name information separately for this purpose.
> 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)