minor, more checks on computed column

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

Branch: refs/heads/master
Commit: 788c731337cf76aab14ac388fa06782943cdf711
Parents: 6e28a02
Author: Hongbin Ma <mahong...@apache.org>
Authored: Mon Aug 21 22:10:36 2017 +0800
Committer: Hongbin Ma <m...@kyligence.io>
Committed: Mon Aug 21 22:55:59 2017 +0800

----------------------------------------------------------------------
 .../kylin/metadata/model/ComputedColumnDesc.java   | 17 ++++++++++++++++-
 .../apache/kylin/metadata/model/DataModelDesc.java |  2 +-
 .../resources/query/sql_computedcolumn/query04.sql |  1 +
 .../query/sql_computedcolumn/query04.sql.compare   |  2 ++
 4 files changed, 20 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/788c7313/core-metadata/src/main/java/org/apache/kylin/metadata/model/ComputedColumnDesc.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ComputedColumnDesc.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ComputedColumnDesc.java
index 9911fd2..bd785c8 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ComputedColumnDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ComputedColumnDesc.java
@@ -18,6 +18,7 @@
 package org.apache.kylin.metadata.model;
 
 import java.io.Serializable;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.calcite.sql.SqlAsOperator;
@@ -55,7 +56,9 @@ public class ComputedColumnDesc implements Serializable {
     @JsonProperty
     private String comment;
 
-    public void init(Set<String> aliasSet, String rootFactTableName) {
+    public void init(Map<String, TableRef> aliasMap, String rootFactTableName) 
{
+        Set<String> aliasSet = aliasMap.keySet();
+
         Preconditions.checkNotNull(tableIdentity, "tableIdentity is null");
         Preconditions.checkNotNull(columnName, "columnName is null");
         Preconditions.checkNotNull(expression, "expression is null");
@@ -81,6 +84,18 @@ public class ComputedColumnDesc implements Serializable {
             throw new IllegalArgumentException("Computed column has to be 
defined on fact table");
         }
 
+        for (TableRef tableRef : aliasMap.values()) {
+            if (!rootFactTableName.equals(tableRef.getAlias())) {
+                for (TblColRef tblColRef : tableRef.getColumns()) {
+                    if (this.columnName.equals(tblColRef.getName())) {
+                        throw new IllegalArgumentException(
+                                "Computed column name " + columnName + " is 
already found on table "
+                                        + tableRef.getTableIdentity() + ", use 
a different computed column name");
+                    }
+                }
+            }
+        }
+
         if ("true".equals(System.getProperty("needCheckCC"))) { //conditional 
execute this because of the calcite dependency is to available every where
             try {
                 simpleParserCheck(expression, aliasSet);

http://git-wip-us.apache.org/repos/asf/kylin/blob/788c7313/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 fd609b8..a5da833 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
@@ -501,7 +501,7 @@ public class DataModelDesc extends RootPersistentEntity {
 
         for (ComputedColumnDesc newCC : this.computedColumnDescs) {
 
-            newCC.init(aliasMap.keySet(), rootFactTableRef.getAlias());
+            newCC.init(aliasMap, rootFactTableRef.getAlias());
             final String newCCFullName = newCC.getFullName();
             final String newCCColumnName = newCC.getColumnName();
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/788c7313/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql 
b/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql
new file mode 100644
index 0000000..780de5d
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql
@@ -0,0 +1 @@
+select count(*) as a , sum (F.DEAL_AMOUNT) as b from test_kylin_fact f inner 
join test_account a on f.seller_id = a.account_id  inner join test_country c on 
country = account_country group by F.SELLER_ID_AND_COUNTRY_NAME

http://git-wip-us.apache.org/repos/asf/kylin/blob/788c7313/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql.compare
----------------------------------------------------------------------
diff --git 
a/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql.compare 
b/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql.compare
new file mode 100644
index 0000000..5ee361d
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_computedcolumn/query04.sql.compare
@@ -0,0 +1,2 @@
+select count(*) as a, sum (F.PRICE * F.ITEM_COUNT) as b from test_kylin_fact f
+                    inner join test_account a on f.seller_id = a.account_id  
inner join test_country c on country = account_country group by 
CONCAT(A.ACCOUNT_ID, C.NAME)

Reply via email to