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)