Repository: kylin Updated Branches: refs/heads/2.0.x f885c8d73 -> aa7640539
KYLIN-2462 fix PK/FK backward-compatibility issue Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/aa764053 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/aa764053 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/aa764053 Branch: refs/heads/2.0.x Commit: aa76405393d6564798795acf3186489bfc16839a Parents: f885c8d Author: Li Yang <liy...@apache.org> Authored: Thu Apr 13 19:21:59 2017 +0800 Committer: Li Yang <liy...@apache.org> Committed: Thu Apr 13 19:21:59 2017 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/common/KylinVersion.java | 37 +++++++++++++++++--- .../org/apache/kylin/cube/model/CubeDesc.java | 13 +++++++ 2 files changed, 45 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/aa764053/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java b/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java index 465ca5a..bc91a7a 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java @@ -33,7 +33,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -public class KylinVersion { +public class KylinVersion implements Comparable { private static final String COMMIT_SHA1_v15 = "commit_SHA1"; private static final String COMMIT_SHA1_v13 = "commit.sha1"; @@ -65,12 +65,34 @@ public class KylinVersion { public String toString() { return "" + major + "." + minor + "." + revision; } + + @Override + public int compareTo(Object o) { + KylinVersion v = (KylinVersion) o; + int comp; + + comp = this.major - v.major; + if (comp != 0) + return comp; + + comp = this.minor - v.minor; + if (comp != 0) + return comp; + + comp = this.revision - v.revision; + if (comp != 0) + return comp; + + return (this.isSnapshot ? 0 : 1) - (v.isSnapshot ? 0 : 1); + } /** * Require MANUAL updating kylin version per ANY upgrading. */ private static final KylinVersion CURRENT_KYLIN_VERSION = new KylinVersion("2.0.0"); + private static final KylinVersion VERSION_200 = new KylinVersion("2.0.0"); + private static final Set<KylinVersion> SIGNATURE_INCOMPATIBLE_REVISIONS = new HashSet<KylinVersion>(); /** @@ -100,6 +122,14 @@ public class KylinVersion { return CURRENT_KYLIN_VERSION; } + public static boolean isBefore200(String ver) { + return new KylinVersion(ver).compareTo(VERSION_200) < 0; + } + + public static void main(String[] args) { + System.out.println(isBefore200("2.0.0")); + } + public boolean isCompatibleWith(KylinVersion v) { KylinVersion current = CURRENT_KYLIN_VERSION; if (current.major != v.major || current.minor != v.minor) { @@ -135,10 +165,6 @@ public class KylinVersion { return !signatureIncompatible; } - public static void main(String[] args) { - System.out.println(getKylinClientInformation()); - } - public static String getKylinClientInformation() { StringBuilder buf = new StringBuilder(); @@ -172,4 +198,5 @@ public class KylinVersion { return StringUtils.EMPTY; } } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/kylin/blob/aa764053/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java index b391055..ff65a3c 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java @@ -864,6 +864,19 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { private TblColRef initDimensionColRef(DimensionDesc dim, String colName) { TblColRef col = model.findColumn(dim.getTable(), colName); + + // for backward compatibility + if (KylinVersion.isBefore200(getVersion())) { + // always use FK instead PK, FK could be shared by more than one lookup tables + JoinDesc join = dim.getJoin(); + if (join != null) { + int idx = ArrayUtils.indexOf(join.getPrimaryKeyColumns(), col); + if (idx >= 0) { + col = join.getForeignKeyColumns()[idx]; + } + } + } + return initDimensionColRef(col); }