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);
     }
 

Reply via email to