Repository: phoenix Updated Branches: refs/heads/encodecolumns2 a65ab0030 -> 9180ce22d
Fix determination of qualifier range Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/9180ce22 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/9180ce22 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/9180ce22 Branch: refs/heads/encodecolumns2 Commit: 9180ce22d2782632b9c96c97c8165554efc98a95 Parents: a65ab00 Author: Samarth <samarth.j...@salesforce.com> Authored: Mon Feb 13 22:07:34 2017 -0800 Committer: Samarth <samarth.j...@salesforce.com> Committed: Mon Feb 13 22:07:34 2017 -0800 ---------------------------------------------------------------------- .../UngroupedAggregateRegionObserver.java | 2 +- .../apache/phoenix/util/EncodedColumnsUtil.java | 33 +++++++++----------- 2 files changed, 15 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/9180ce22/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java index b6a0a6b..70ef609 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java @@ -337,7 +337,7 @@ public class UngroupedAggregateRegionObserver extends BaseScannerRegionObserver ColumnReference[] dataColumns = IndexUtil.deserializeDataTableColumnsToJoin(scan); final TupleProjector p = TupleProjector.deserializeProjectorFromScan(scan); final HashJoinInfo j = HashJoinInfo.deserializeHashJoinFromScan(scan); - boolean useQualifierAsIndex = EncodedColumnsUtil.useQualifierAsIndex(EncodedColumnsUtil.getMinMaxQualifiersFromScan(scan)) && scan.getAttribute(BaseScannerRegionObserver.TOPN) != null; + boolean useQualifierAsIndex = EncodedColumnsUtil.useQualifierAsIndex(EncodedColumnsUtil.getMinMaxQualifiersFromScan(scan)); if ((localIndexScan && !isDelete && !isDescRowKeyOrderUpgrade) || (j == null && p != null)) { if (dataColumns != null) { tupleProjector = IndexUtil.getTupleProjector(scan, dataColumns); http://git-wip-us.apache.org/repos/asf/phoenix/blob/9180ce22/phoenix-core/src/main/java/org/apache/phoenix/util/EncodedColumnsUtil.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/EncodedColumnsUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/EncodedColumnsUtil.java index b33b085..59e99fd 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/util/EncodedColumnsUtil.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/util/EncodedColumnsUtil.java @@ -21,7 +21,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.apache.phoenix.schema.PTable.QualifierEncodingScheme.NON_ENCODED_QUALIFIERS; import java.util.Arrays; +import java.util.Collections; import java.util.Map; +import java.util.Map.Entry; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; @@ -135,28 +137,21 @@ public class EncodedColumnsUtil { public static Map<String, Pair<Integer, Integer>> getFamilyQualifierRanges(PTable table) { checkNotNull(table); QualifierEncodingScheme encodingScheme = table.getEncodingScheme(); - Preconditions.checkArgument(encodingScheme != NON_ENCODED_QUALIFIERS, - "Use this method only for tables with encoding scheme " - + NON_ENCODED_QUALIFIERS); - Map<String, Pair<Integer, Integer>> toReturn = Maps.newHashMapWithExpectedSize(table.getColumns().size()); - for (PColumn column : table.getColumns()) { - if (!SchemaUtil.isPKColumn(column)) { - String colFamily = column.getFamilyName().getString(); - Pair<Integer, Integer> minMaxQualifiers = toReturn.get(colFamily); - Integer encodedColumnQualifier = encodingScheme.decode(column.getColumnQualifierBytes()); - if (minMaxQualifiers == null) { - minMaxQualifiers = new Pair<>(encodedColumnQualifier, encodedColumnQualifier); - toReturn.put(colFamily, minMaxQualifiers); - } else { - if (encodedColumnQualifier < minMaxQualifiers.getFirst()) { - minMaxQualifiers.setFirst(encodedColumnQualifier); - } else if (encodedColumnQualifier > minMaxQualifiers.getSecond()) { - minMaxQualifiers.setSecond(encodedColumnQualifier); - } + Preconditions.checkArgument(encodingScheme != NON_ENCODED_QUALIFIERS); + if (table.getEncodedCQCounter() != null) { + Map<String, Integer> values = table.getEncodedCQCounter().values(); + Map<String, Pair<Integer, Integer>> toReturn = Maps.newHashMapWithExpectedSize(values.size()); + for (Entry<String, Integer> e : values.entrySet()) { + Integer lowerBound = QueryConstants.ENCODED_CQ_COUNTER_INITIAL_VALUE; + Integer upperBound = e.getValue() - 1; + if (lowerBound > upperBound) { + lowerBound = upperBound; } + toReturn.put(e.getKey(), new Pair<>(lowerBound, upperBound)); } + return toReturn; } - return toReturn; + return Collections.emptyMap(); } public static byte[] getColumnQualifierBytes(String columnName, Integer numberBasedQualifier, PTable table, boolean isPk) {