You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/08/22 09:22:38 UTC

[11/17] kylin git commit: minor, more checks on computed column

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/68b2b305
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/68b2b305
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/68b2b305

Branch: refs/heads/2.1.x
Commit: 68b2b3050118c43807524296d5664eb5c0aa30ee
Parents: f7c27a2
Author: Hongbin Ma <ma...@apache.org>
Authored: Mon Aug 21 22:10:36 2017 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Mon Aug 21 22:11:22 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/68b2b305/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/68b2b305/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 e21ecf3..1bc9729 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
@@ -494,7 +494,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/68b2b305/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/68b2b305/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)