minor, refactor on JoinTree

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/9f603d31
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/9f603d31
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/9f603d31

Branch: refs/heads/master
Commit: 9f603d3188bd20070ea10cbe5fc0eecc28703633
Parents: 26e191a
Author: lidongsjtu <lid...@apache.org>
Authored: Thu Nov 16 23:58:25 2017 +0800
Committer: Hongbin Ma <m...@kyligence.io>
Committed: Wed Dec 20 10:09:10 2017 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/job/JoinedFlatTable.java   |  2 +-
 .../kylin/metadata/model/DataModelDesc.java     |  5 +-
 .../apache/kylin/metadata/model/JoinDesc.java   | 28 -----------
 .../apache/kylin/metadata/model/JoinsTree.java  | 50 +++++++++++++++++++-
 4 files changed, 53 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/9f603d31/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java 
b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
index d731d4f..d918777 100644
--- a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
+++ b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
@@ -178,7 +178,7 @@ public class JoinedFlatTable {
                         if (i > 0) {
                             sql.append(" AND ");
                         }
-                        sql.append(fk[i].getIdentity() + " = " + 
pk[i].getIdentity());
+                        sql.append(fk[i].getExpressionInSourceDB() + " = " + 
pk[i].getExpressionInSourceDB());
                     }
                     sql.append(sep);
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/9f603d31/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
index bf0db73..4dd4399 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
@@ -404,11 +404,12 @@ public class DataModelDesc extends RootPersistentEntity {
             alias = alias.toUpperCase();
             join.setAlias(alias);
 
-            TableRef ref = new TableRef(this, alias, tableDesc, true);
+            boolean isLookup = join.getKind() == TableKind.LOOKUP;
+            TableRef ref = new TableRef(this, alias, tableDesc, isLookup);
 
             join.setTableRef(ref);
             addAlias(ref);
-            (join.getKind() == TableKind.LOOKUP ? lookupTableRefs : 
factTableRefs).add(ref);
+            (isLookup ? lookupTableRefs : factTableRefs).add(ref);
         }
 
         tableNameMap.putAll(aliasMap);

http://git-wip-us.apache.org/repos/asf/kylin/blob/9f603d31/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinDesc.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinDesc.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinDesc.java
index b16ad7d..4bf9af3 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinDesc.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinDesc.java
@@ -187,34 +187,6 @@ public class JoinDesc implements Serializable {
         return true;
     }
 
-    // equals() without alias
-    public boolean matches(JoinDesc other) {
-        if (other == null)
-            return false;
-        
-        if (!this.type.equalsIgnoreCase(other.getType()))
-            return false;
-        
-        // note pk/fk are sorted, sortByFK()
-        if (!this.columnDescEquals(foreignKeyColumns, other.foreignKeyColumns))
-            return false;
-        if (!this.columnDescEquals(primaryKeyColumns, other.primaryKeyColumns))
-            return false;
-        
-        return true;
-    }
-
-    private boolean columnDescEquals(TblColRef[] a, TblColRef[] b) {
-        if (a.length != b.length)
-            return false;
-        
-        for (int i = 0; i < a.length; i++) {
-            if (a[i].getColumnDesc().equals(b[i].getColumnDesc()) == false)
-                return false;
-        }
-        return true;
-    }
-
     @Override
     public String toString() {
         return "JoinDesc [type=" + type + ", primary_key=" + 
Arrays.toString(primaryKey) + ", foreign_key=" + Arrays.toString(foreignKey) + 
"]";

http://git-wip-us.apache.org/repos/asf/kylin/blob/9f603d31/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinsTree.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinsTree.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinsTree.java
index a37c6be..2ee2b34 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinsTree.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/JoinsTree.java
@@ -30,8 +30,10 @@ import com.google.common.collect.Lists;
 
 public class JoinsTree implements Serializable {
     private static final long serialVersionUID = 1L;
+    private static final IJoinDescMatcher DEFAULT_JOINDESC_MATCHER = new 
DefaultJoinDescMatcher();
 
     final Map<String, Chain> tableChains = new LinkedHashMap<>();
+    private IJoinDescMatcher joinDescMatcher = DEFAULT_JOINDESC_MATCHER;
 
     public JoinsTree(TableRef rootTable, List<JoinDesc> joins) {
         for (JoinDesc join : joins) {
@@ -108,7 +110,8 @@ public class JoinsTree implements Serializable {
             matches = anotherChain.join == null
                     && 
chain.table.getTableDesc().getIdentity().equals(anotherChain.table.getTableDesc().getIdentity());
         } else {
-            matches = chain.join.matches(anotherChain.join) && 
matchChain(chain.fkSide, anotherChain.fkSide, matchUp);
+            matches = joinDescMatcher.matches(chain.join, anotherChain.join)
+                    && matchChain(chain.fkSide, anotherChain.fkSide, matchUp);
         }
 
         if (matches) {
@@ -140,6 +143,10 @@ public class JoinsTree implements Serializable {
         return tableChains;
     }
 
+    public void setJoinDescMatcher(IJoinDescMatcher joinDescMatcher) {
+        this.joinDescMatcher = joinDescMatcher;
+    }
+
     public static class Chain implements Serializable {
         private static final long serialVersionUID = 1L;
 
@@ -170,4 +177,45 @@ public class JoinsTree implements Serializable {
         }
     }
 
+    public static interface IJoinDescMatcher {
+        boolean matches(JoinDesc join1, JoinDesc join2);
+    }
+
+    public static class DefaultJoinDescMatcher implements IJoinDescMatcher {
+        @Override
+        public boolean matches(JoinDesc join1, JoinDesc join2) {
+            if (join1 == null) {
+                return join2 == null;
+            } else if (join2 == null) {
+                return false;
+            } else {
+
+                if (!join1.getType().equalsIgnoreCase(join2.getType()))
+                    return false;
+
+                // note pk/fk are sorted, sortByFK()
+                if (!this.columnDescEquals(join1.getForeignKeyColumns(), 
join2.getForeignKeyColumns()))
+                    return false;
+                if (!this.columnDescEquals(join1.getPrimaryKeyColumns(), 
join2.getPrimaryKeyColumns()))
+                    return false;
+
+                return true;
+            }
+        }
+
+        private boolean columnDescEquals(TblColRef[] a, TblColRef[] b) {
+            if (a.length != b.length)
+                return false;
+
+            for (int i = 0; i < a.length; i++) {
+                if (columnDescEquals(a[i].getColumnDesc(), 
b[i].getColumnDesc()) == false)
+                    return false;
+            }
+            return true;
+        }
+
+        protected boolean columnDescEquals(ColumnDesc a, ColumnDesc b) {
+            return a == null ? b == null : a.equals(b);
+        }
+    }
 }

Reply via email to