[ https://issues.apache.org/jira/browse/PHOENIX-4855?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16636266#comment-16636266 ]
ASF GitHub Bot commented on PHOENIX-4855: ----------------------------------------- Github user ChinmaySKulkarni commented on a diff in the pull request: https://github.com/apache/phoenix/pull/339#discussion_r222150790 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java --- @@ -718,9 +731,9 @@ private PTable addDerivedColumnsFromAncestors(PTable table, long timestamp, List<PColumn> excludedColumns = Lists.newArrayList(); --- End diff -- These are for primary key columns present in the base table, but dropped in the view, right? Let's rename this to `excludedPkColumns` > Continue to write base table column metadata when creating a view in order to > support rollback > ---------------------------------------------------------------------------------------------- > > Key: PHOENIX-4855 > URL: https://issues.apache.org/jira/browse/PHOENIX-4855 > Project: Phoenix > Issue Type: Sub-task > Reporter: Thomas D'Silva > Assignee: Thomas D'Silva > Priority: Major > Attachments: PHOENIX-4855-4.x-HBase-1.3.patch > > > Currently we filter out the parent table columns while creating a view. If we > have to support rollback we still need to write the parent table column > metadata. > Instead of this we should filter out the duplicate columns in > {{MetaDataEndpointImpl.combineColumns}} > {code} > // Here we are passed the parent's columns to add to a view, PHOENIX-3534 > allows for a splittable > // System.Catalog thus we only store the columns that are new to > the view, not the parents columns, > // thus here we remove everything that is ORDINAL.POSITION <= > baseColumnCount and update the > // ORDINAL.POSITIONS to be shifted accordingly. > // TODO PHOENIX-4767 remove the following code that removes the > base table column metadata in the next release > if (PTableType.VIEW.equals(tableType) && > !ViewType.MAPPED.equals(viewType)) { > boolean isSalted = MetaDataUtil.getSaltBuckets(tableMetadata, > GenericKeyValueBuilder.INSTANCE, new ImmutableBytesWritable()) > 0; > int baseColumnCount = > MetaDataUtil.getBaseColumnCount(tableMetadata) - (isSalted ? 1 : 0); > if (baseColumnCount > 0) { > Iterator<Mutation> mutationIterator = > tableMetadata.iterator(); > while (mutationIterator.hasNext()) { > Mutation mutation = mutationIterator.next(); > // if not null and ordinal position < base column > count remove this mutation > ImmutableBytesWritable ptr = new > ImmutableBytesWritable(); > MetaDataUtil.getMutationValue(mutation, > PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, > GenericKeyValueBuilder.INSTANCE, ptr); > if (MetaDataUtil.getMutationValue(mutation, > PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, > GenericKeyValueBuilder.INSTANCE, ptr)) { > int ordinalValue = > PInteger.INSTANCE.getCodec().decodeInt(ptr, SortOrder.ASC); > if (ordinalValue <= baseColumnCount) { > mutationIterator.remove(); > } else { > if (mutation instanceof Put) { > byte[] ordinalPositionBytes = new > byte[PInteger.INSTANCE.getByteSize()]; > int newOrdinalValue = ordinalValue - > baseColumnCount; > PInteger.INSTANCE.getCodec() > .encodeInt(newOrdinalValue, > ordinalPositionBytes, 0); > byte[] family = > Iterables.getOnlyElement(mutation.getFamilyCellMap().keySet()); > MetaDataUtil.mutatePutValue((Put) > mutation, family, PhoenixDatabaseMetaData.ORDINAL_POSITION_BYTES, > ordinalPositionBytes); > } > } > } > } > } > } > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)