/*
 * Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
 * and the EPL 1.0 (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.expression.aggregate;

import java.util.TreeMap;
import org.h2.engine.Database;
import org.h2.value.Value;
import org.h2.value.ValueNull;

Data stored while calculating an aggregate that needs distinct values with their counts.
/** * Data stored while calculating an aggregate that needs distinct values with * their counts. */
class AggregateDataDistinctWithCounts extends AggregateData { private final boolean ignoreNulls; private final int maxDistinctCount; private TreeMap<Value, LongDataCounter> values;
Creates new instance of data for aggregate that needs distinct values with their counts.
Params:
  • ignoreNulls – whether NULL values should be ignored
  • maxDistinctCount – maximum count of distinct values to collect
/** * Creates new instance of data for aggregate that needs distinct values * with their counts. * * @param ignoreNulls * whether NULL values should be ignored * @param maxDistinctCount * maximum count of distinct values to collect */
AggregateDataDistinctWithCounts(boolean ignoreNulls, int maxDistinctCount) { this.ignoreNulls = ignoreNulls; this.maxDistinctCount = maxDistinctCount; } @Override void add(Database database, Value v) { if (ignoreNulls && v == ValueNull.INSTANCE) { return; } if (values == null) { values = new TreeMap<>(database.getCompareMode()); } LongDataCounter a = values.get(v); if (a == null) { if (values.size() >= maxDistinctCount) { return; } a = new LongDataCounter(); values.put(v, a); } a.count++; } @Override Value getValue(Database database, int dataType) { return null; }
Returns map with values and their counts.
Returns:map with values and their counts
/** * Returns map with values and their counts. * * @return map with values and their counts */
TreeMap<Value, LongDataCounter> getValues() { return values; } }