From ee0cc5854830d6d0a31ce72a7fd2e2e0daecdae2 Mon Sep 17 00:00:00 2001
From: wangxiaoyu8 <wangxiaoyu1@jd.com>
Date: Thu, 10 Sep 2015 17:31:21 +0800
Subject: [PATCH] KYLIN-1022 Error in CubeDesc update when delete lookup table

---
 cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java      | 8 +++++---
 cube/src/main/java/org/apache/kylin/cube/model/DimensionDesc.java | 6 +++---
 .../java/org/apache/kylin/rest/controller/CubeDescController.java | 2 +-
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
index 23d7d55..4d41cdb 100644
--- a/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
+++ b/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
@@ -474,8 +474,10 @@ public class CubeDesc extends RootPersistentEntity {
 
             // when column is omitted, special case
             if (colStrs == null && dim.isDerived() || ArrayUtils.contains(colStrs, "{FK}")) {
-                for (TblColRef col : join.getForeignKeyColumns()) {
-                    dimCols.add(initDimensionColRef(col));
+                if(join != null) {
+                    for (TblColRef col : join.getForeignKeyColumns()) {
+                        dimCols.add(initDimensionColRef(col));
+                    }
                 }
             }
             // normal case
@@ -499,7 +501,7 @@ public class CubeDesc extends RootPersistentEntity {
 
             // init derived columns
             TblColRef[] hostCols = dimColArray;
-            if (dim.isDerived()) {
+            if (dim.isDerived() && join != null) {
                 String[] derived = dim.getDerived();
                 String[][] split = splitDerivedColumnAndExtra(derived);
                 String[] derivedNames = split[0];
diff --git a/cube/src/main/java/org/apache/kylin/cube/model/DimensionDesc.java b/cube/src/main/java/org/apache/kylin/cube/model/DimensionDesc.java
index bc5b484..643580a 100644
--- a/cube/src/main/java/org/apache/kylin/cube/model/DimensionDesc.java
+++ b/cube/src/main/java/org/apache/kylin/cube/model/DimensionDesc.java
@@ -109,9 +109,9 @@ public class DimensionDesc {
             StringUtil.toUpperCaseArray(derived, derived);
         }
 
-        if (derived != null && join == null) {
-            throw new IllegalStateException("Derived can only be defined on lookup table, cube " + cubeDesc + ", " + this);
-        }
+//        if (derived != null && join == null) {
+//            throw new IllegalStateException("Derived can only be defined on lookup table, cube " + cubeDesc + ", " + this);
+//        }
     }
 
     public boolean isHierarchyColumn(TblColRef col) {
diff --git a/server/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java b/server/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
index 52e838c..e01ed02 100644
--- a/server/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
+++ b/server/src/main/java/org/apache/kylin/rest/controller/CubeDescController.java
@@ -57,8 +57,8 @@ public class CubeDescController {
             return null;
         }
         CubeDesc cSchema = cubeInstance.getDescriptor();
-        cSchema.setRetentionRange(cubeInstance.getRetentionRange());
         if (cSchema != null) {
+            cSchema.setRetentionRange(cubeInstance.getRetentionRange());
             return new CubeDesc[] { cSchema };
         } else {
             return null;
-- 
1.9.1

