KYLIN-2360 fix minor SonarCube issue
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/503d232d Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/503d232d Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/503d232d Branch: refs/heads/master-cdh5.7 Commit: 503d232dc1875d504959a3e00da2eb62a7b7d599 Parents: 980b03b Author: shaofengshi <shaofeng...@apache.org> Authored: Thu Jan 5 18:04:56 2017 +0800 Committer: shaofengshi <shaofeng...@apache.org> Committed: Thu Jan 5 18:09:45 2017 +0800 ---------------------------------------------------------------------- .../adapter/enumerable/EnumerableWindow.java | 53 +++++++++++++++++++- .../kylin/common/persistence/ResourceTool.java | 5 +- .../apache/kylin/common/util/StringUtil.java | 2 +- .../org/apache/kylin/dict/CacheDictionary.java | 29 ++++++----- 4 files changed, 71 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/503d232d/atopcalcite/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableWindow.java ---------------------------------------------------------------------- diff --git a/atopcalcite/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableWindow.java b/atopcalcite/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableWindow.java index 547210c..216b07c 100644 --- a/atopcalcite/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableWindow.java +++ b/atopcalcite/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableWindow.java @@ -80,6 +80,7 @@ public class EnumerableWindow extends Window implements EnumerableRel { constants, rowType, groups); } + @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) { return super.computeSelfCost(planner, mq) .multiplyBy(EnumerableConvention.COST_MULTIPLIER); @@ -104,6 +105,7 @@ public class EnumerableWindow extends Window implements EnumerableRel { this.constants = constants; } + @Override public Expression field(BlockBuilder list, int index, Type storageType) { if (index < actualInputFieldCount) { Expression current = list.append("current", row); @@ -113,6 +115,55 @@ public class EnumerableWindow extends Window implements EnumerableRel { } } + private void sampleOfTheGeneratedWindowedAggregate() { + // Here's overview of the generated code + // For each list of rows that have the same partitioning key, evaluate + // all of the windowed aggregate functions. + + // builder + Iterator<Integer[]> iterator = null; + + // builder3 + Integer[] rows = iterator.next(); + + int prevStart = -1; + int prevEnd = -1; + + for (int i = 0; i < rows.length; i++) { + // builder4 + Integer row = rows[i]; + + int start = 0; + int end = 100; + if (start != prevStart || end != prevEnd) { + // builder5 + int actualStart = 0; + if (start != prevStart || end < prevEnd) { + // builder6 + // recompute + actualStart = start; + // implementReset + } else { // must be start == prevStart && end > prevEnd + actualStart = prevEnd + 1; + } + prevStart = start; + prevEnd = end; + + if (start != -1) { + for (int j = actualStart; j <= end; j++) { + // builder7 + // implementAdd + } + } + // implementResult + // list.add(new Xxx(row.deptno, row.empid, sum, count)); + } + } + // multiMap.clear(); // allows gc + // source = Linq4j.asEnumerable(list); + } + + @Override public Result implement(EnumerableRelImplementor implementor, Prefer pref) { final JavaTypeFactory typeFactory = implementor.getTypeFactory(); final EnumerableRel child = (EnumerableRel) getInput(); @@ -121,7 +172,7 @@ public class EnumerableWindow extends Window implements EnumerableRel { Expression source_ = builder.append("source", result.block); final List<Expression> translatedConstants = - new ArrayList<Expression>(constants.size()); + new ArrayList<>(constants.size()); for (RexLiteral constant : constants) { translatedConstants.add( RexToLixTranslator.translateLiteral(constant, constant.getType(), http://git-wip-us.apache.org/repos/asf/kylin/blob/503d232d/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java index 2c8bc83..b3aac09 100644 --- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java +++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceTool.java @@ -28,11 +28,14 @@ import java.util.NavigableSet; import org.apache.commons.io.IOUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceTool { private static String[] includes = null; private static String[] excludes = null; + private static final Logger logger = LoggerFactory.getLogger(ResourceTool.class); public static void main(String[] args) throws IOException { args = StringUtil.filterSystemArgs(args); @@ -164,7 +167,7 @@ public class ResourceTool { } } catch (Exception ex) { System.err.println("Failed to open " + path); - ex.printStackTrace(); + logger.error(ex.getLocalizedMessage(), ex); } } } else { http://git-wip-us.apache.org/repos/asf/kylin/blob/503d232d/core-common/src/main/java/org/apache/kylin/common/util/StringUtil.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/util/StringUtil.java b/core-common/src/main/java/org/apache/kylin/common/util/StringUtil.java index 12e7279..96d294b 100644 --- a/core-common/src/main/java/org/apache/kylin/common/util/StringUtil.java +++ b/core-common/src/main/java/org/apache/kylin/common/util/StringUtil.java @@ -161,7 +161,7 @@ public class StringUtil { if (!s.isEmpty()) r.add(s); } - return (String[]) r.toArray(new String[r.size()]); + return r.toArray(new String[r.size()]); } } http://git-wip-us.apache.org/repos/asf/kylin/blob/503d232d/core-dictionary/src/main/java/org/apache/kylin/dict/CacheDictionary.java ---------------------------------------------------------------------- diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/CacheDictionary.java b/core-dictionary/src/main/java/org/apache/kylin/dict/CacheDictionary.java index 1b3bfa1..1e260b2 100644 --- a/core-dictionary/src/main/java/org/apache/kylin/dict/CacheDictionary.java +++ b/core-dictionary/src/main/java/org/apache/kylin/dict/CacheDictionary.java @@ -25,20 +25,19 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** - * Created by xiefan on 16-12-30. */ -abstract public class CacheDictionary<T> extends Dictionary<T> { +public abstract class CacheDictionary<T> extends Dictionary<T> { private static final long serialVersionUID = 1L; - transient protected boolean enableValueCache = false; + protected transient boolean enableValueCache = false; - transient private SoftReference<Map> valueToIdCache; + private transient SoftReference<ConcurrentHashMap> valueToIdCache; - transient private SoftReference<Object[]> idToValueCache; + private transient SoftReference<Object[]> idToValueCache; - transient protected int baseId; + protected transient int baseId; - transient protected BytesConverter<T> bytesConvert; + protected transient BytesConverter<T> bytesConvert; public CacheDictionary() { @@ -46,11 +45,11 @@ abstract public class CacheDictionary<T> extends Dictionary<T> { //value --> id @Override - final protected int getIdFromValueImpl(T value, int roundingFlag) { + protected final int getIdFromValueImpl(T value, int roundingFlag) { if (enableValueCache && roundingFlag == 0) { Map cache = valueToIdCache.get(); // SoftReference to skip cache gracefully when short of memory if (cache != null) { - Integer id = null; + Integer id; id = (Integer) cache.get(value); if (id != null) return id.intValue(); @@ -66,7 +65,7 @@ abstract public class CacheDictionary<T> extends Dictionary<T> { //id --> value @Override - final protected T getValueFromIdImpl(int id) { + protected final T getValueFromIdImpl(int id) { if (enableValueCache) { Object[] cache = idToValueCache.get(); if (cache != null) { @@ -83,7 +82,7 @@ abstract public class CacheDictionary<T> extends Dictionary<T> { return bytesConvert.convertFromBytes(valueBytes, 0, valueBytes.length); } - final protected int calcSeqNoFromId(int id) { + protected final int calcSeqNoFromId(int id) { int seq = id - baseId; if (seq < 0 || seq >= getSize()) { throw new IllegalArgumentException("Not a valid ID: " + id); @@ -91,15 +90,15 @@ abstract public class CacheDictionary<T> extends Dictionary<T> { return seq; } - final public void enableCache() { + public final void enableCache() { this.enableValueCache = true; if (this.valueToIdCache == null) - this.valueToIdCache = new SoftReference<Map>(new ConcurrentHashMap()); + this.valueToIdCache = new SoftReference<>(new ConcurrentHashMap()); if (this.idToValueCache == null) - this.idToValueCache = new SoftReference<Object[]>(new Object[getSize()]); + this.idToValueCache = new SoftReference<>(new Object[getSize()]); } - final public void disableCache() { + public final void disableCache() { this.enableValueCache = false; this.valueToIdCache = null; this.idToValueCache = null;