minor refactor on metadata
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b8ddd820 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b8ddd820 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b8ddd820 Branch: refs/heads/master Commit: b8ddd820383881fedd6ea617874887e0b0b32734 Parents: 826788a Author: Hongbin Ma <mahong...@apache.org> Authored: Thu Dec 28 16:15:49 2017 +0800 Committer: Hongbin Ma <m...@kyligence.io> Committed: Thu Dec 28 17:37:18 2017 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/common/StorageURLTest.java | 18 ++- .../common/util/AbstractKylinTestCase.java | 4 + .../apache/kylin/metadata/model/ColumnDesc.java | 5 +- .../kylin/metadata/model/DataModelDesc.java | 14 ++- .../kylin/metadata/model/DataModelManager.java | 6 +- .../apache/kylin/metadata/model/JoinsTree.java | 24 +++- .../metadata/model/tool/CalciteParser.java | 37 ++++++ .../kylin/metadata/model/JoinsTreeTest.java | 2 +- .../kylin/model/tool/CalciteParserTest.java | 122 ------------------- .../apache/kylin/query/ITKylinQueryTest.java | 2 +- .../org/apache/kylin/query/KylinTestBase.java | 4 + .../test/resources/query/sql_limit/query01.sql | 2 +- .../test/resources/query/sql_limit/query03.sql | 6 +- .../apache/kylin/rest/request/ModelRequest.java | 8 ++ .../apache/kylin/rest/service/ModelService.java | 5 +- .../kylin/rest/util/Log4jConfigListener.java | 1 + 16 files changed, 121 insertions(+), 139 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-common/src/test/java/org/apache/kylin/common/StorageURLTest.java ---------------------------------------------------------------------- diff --git a/core-common/src/test/java/org/apache/kylin/common/StorageURLTest.java b/core-common/src/test/java/org/apache/kylin/common/StorageURLTest.java index eaa7548..643cc30 100644 --- a/core-common/src/test/java/org/apache/kylin/common/StorageURLTest.java +++ b/core-common/src/test/java/org/apache/kylin/common/StorageURLTest.java @@ -63,7 +63,23 @@ public class StorageURLTest { } @Test + public void testHDFS() { + { + StorageURL id = new StorageURL( + "master_ci_instance@hdfs,path=hdfs://sandbox.hortonworks.com:8020/kylin/master_ci_instance/metadata/f112fe00-6f99-4f8e-b075-d57c08501106"); + + assertEquals("master_ci_instance", id.getIdentifier()); + assertEquals("hdfs", id.getScheme()); + assertEquals(1, id.getAllParameters().size()); + assertEquals( + "master_ci_instance@hdfs,path=hdfs://sandbox.hortonworks.com:8020/kylin/master_ci_instance/metadata/f112fe00-6f99-4f8e-b075-d57c08501106", + id.toString()); + } + } + + @Test public void testEdgeCases() { + { StorageURL id = new StorageURL(""); assertEquals("kylin_metadata", id.getIdentifier()); @@ -87,7 +103,7 @@ public class StorageURLTest { assertEquals("hello@hbase,a", id.toString()); } } - + @Test public void testValueOfCache() { StorageURL id1 = StorageURL.valueOf("hello@hbase"); http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-common/src/test/java/org/apache/kylin/common/util/AbstractKylinTestCase.java ---------------------------------------------------------------------- diff --git a/core-common/src/test/java/org/apache/kylin/common/util/AbstractKylinTestCase.java b/core-common/src/test/java/org/apache/kylin/common/util/AbstractKylinTestCase.java index 37790d2..7cbf5b6 100644 --- a/core-common/src/test/java/org/apache/kylin/common/util/AbstractKylinTestCase.java +++ b/core-common/src/test/java/org/apache/kylin/common/util/AbstractKylinTestCase.java @@ -26,6 +26,10 @@ import org.apache.kylin.common.KylinConfig; */ public abstract class AbstractKylinTestCase { + static { + System.setProperty("needCheckCC", "true"); + } + public abstract void createTestMetadata(String... overlayMetadataDirs) throws Exception; public abstract void cleanupTestMetadata() throws Exception; http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java index 03c89c3..b8de534 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java @@ -57,6 +57,10 @@ public class ColumnDesc implements Serializable { @JsonInclude(JsonInclude.Include.NON_NULL) private String index; + @JsonProperty("cc_expr") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String computedColumnExpr = null;//if null, it's not a computed column + // parsed from data type private DataType type; @@ -65,7 +69,6 @@ public class ColumnDesc implements Serializable { private boolean isNullable = true; private TblColRef ref; - private String computedColumnExpr = null;//if null, it's not a computed column public ColumnDesc() { // default constructor for Jackson } http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/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 4dd4399..21175ba 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 @@ -124,7 +124,7 @@ public class DataModelDesc extends RootPersistentEntity { public KylinConfig getConfig() { return config; } - + @Override public String resourceName() { return name; @@ -338,8 +338,16 @@ public class DataModelDesc extends RootPersistentEntity { throw new IllegalArgumentException("Table not found by " + tableIdentity + " in model " + name); } + /** + * @param isOnlineModel will affect the exposed view of project specific tables + */ public void init(KylinConfig config, Map<String, TableDesc> tables, List<DataModelDesc> otherModels, boolean isOnlineModel) { + initInternal(config, tables, otherModels, isOnlineModel); + } + + public void initInternal(KylinConfig config, Map<String, TableDesc> tables, List<DataModelDesc> otherModels, + boolean isOnlineModel) { this.config = config; initJoinTablesForUpgrade(); @@ -353,7 +361,7 @@ public class DataModelDesc extends RootPersistentEntity { boolean reinit = validate(); if (reinit) { // model slightly changed by validate() and must init() again - init(config, tables, otherModels, isOnlineModel); + initInternal(config, tables, otherModels, isOnlineModel); } } @@ -615,7 +623,7 @@ public class DataModelDesc extends RootPersistentEntity { // validate PK/FK are in dimensions boolean pkfkDimAmended = false; - for (Chain chain : joinsTree.tableChains.values()) { + for (Chain chain : joinsTree.getTableChains().values()) { pkfkDimAmended = validatePkFkDim(chain.join, mcols) || pkfkDimAmended; } return pkfkDimAmended; http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java index c06a31b..a83f2c3 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java @@ -88,7 +88,7 @@ public class DataModelManager { protected DataModelDesc initEntityAfterReload(DataModelDesc model, String resourceName) { String prj = ProjectManager.getInstance(config).getProjectOfModel(model.getName()).getName(); if (!model.isDraft()) { - model.init(config, getAllTablesMap(prj), listDataModels(), true); + model.init(config, getAllTablesMap(prj), getModels(prj), true); } return model; } @@ -182,7 +182,7 @@ public class DataModelManager { if (null != model) { ret.add(model); } else { - logger.error("Failed to load model " + modelName); + logger.info("Model " + modelName + " is missing or unloaded yet"); } } } @@ -274,7 +274,7 @@ public class DataModelManager { String prj = ProjectManager.getInstance(config).getProjectOfModel(dataModelDesc.getName()).getName(); if (!dataModelDesc.isDraft()) - dataModelDesc.init(config, this.getAllTablesMap(prj), listDataModels(), true); + dataModelDesc.init(config, this.getAllTablesMap(prj), getModels(prj), false); crud.save(dataModelDesc); http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/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 2ee2b34..d86a74a 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 @@ -24,15 +24,17 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; 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 Map<String, Chain> tableChains = new LinkedHashMap<>(); private IJoinDescMatcher joinDescMatcher = DEFAULT_JOINDESC_MATCHER; public JoinsTree(TableRef rootTable, List<JoinDesc> joins) { @@ -51,6 +53,10 @@ public class JoinsTree implements Serializable { } } + public JoinsTree(Map<String, Chain> tableChains) { + this.tableChains = tableChains; + } + public Map<String, String> matches(JoinsTree another) { return matches(another, Collections.<String, String> emptyMap()); } @@ -147,6 +153,22 @@ public class JoinsTree implements Serializable { this.joinDescMatcher = joinDescMatcher; } + public JoinsTree getSubgraphByAlias(Set<String> aliases) { + Map<String, Chain> subgraph = Maps.newHashMap(); + for (String alias : aliases) { + Chain chain = tableChains.get(alias); + if (chain == null) + throw new IllegalArgumentException("Table with alias " + alias + " is not found"); + + while (chain.getFkSide() != null) { + subgraph.put(chain.table.getAlias(), chain); + chain = chain.getFkSide(); + } + subgraph.put(chain.table.getAlias(), chain); + } + return new JoinsTree(subgraph); + } + public static class Chain implements Serializable { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java index 4ae0849..d48100c 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java @@ -21,6 +21,7 @@ package org.apache.kylin.metadata.model.tool; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.calcite.sql.SqlIdentifier; @@ -184,4 +185,40 @@ public class CalciteParser { } return Pair.newPair(left, right); } + + public static String replaceAliasInExpr(String expr, Map<String, String> renaming) { + String prefix = "select "; + String suffix = " from t"; + String sql = prefix + expr + suffix; + SqlNode sqlNode = CalciteParser.getOnlySelectNode(sql); + + final Set<SqlIdentifier> s = Sets.newHashSet(); + SqlVisitor sqlVisitor = new SqlBasicVisitor() { + @Override + public Object visit(SqlIdentifier id) { + Preconditions.checkState(id.names.size() == 2); + s.add(id); + return null; + } + }; + + sqlNode.accept(sqlVisitor); + List<SqlIdentifier> sqlIdentifiers = Lists.newArrayList(s); + + CalciteParser.descSortByPosition(sqlIdentifiers); + + for (SqlIdentifier sqlIdentifier : sqlIdentifiers) { + Pair<Integer, Integer> replacePos = CalciteParser.getReplacePos(sqlIdentifier, sql); + int start = replacePos.getFirst(); + int end = replacePos.getSecond(); + String aliasInExpr = sqlIdentifier.names.get(0); + String col = sqlIdentifier.names.get(1); + String renamedAlias = renaming.get(aliasInExpr); + Preconditions.checkNotNull(renamedAlias, + "rename for alias " + aliasInExpr + " in expr (" + expr + ") is not found"); + sql = sql.substring(0, start) + renamedAlias + "." + col + sql.substring(end); + } + + return sql.substring(prefix.length(), sql.length() - suffix.length()); + } } http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsTreeTest.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsTreeTest.java b/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsTreeTest.java index 85ddb13..e00f5c3 100644 --- a/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsTreeTest.java +++ b/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsTreeTest.java @@ -50,7 +50,7 @@ public class JoinsTreeTest extends LocalFileMetadataTestCase { DataModelDesc model = mgr.getDataModelDesc("ci_left_join_model"); JoinsTree joinsTree = model.getJoinsTree(); - Chain chain = joinsTree.tableChains.get("BUYER_COUNTRY"); + Chain chain = joinsTree.getTableChains().get("BUYER_COUNTRY"); assertTrue(chain.table == model.findTable("BUYER_COUNTRY")); assertTrue(chain.fkSide.table == model.findTable("BUYER_ACCOUNT")); assertTrue(chain.fkSide.fkSide.table == model.findTable("TEST_ORDER")); http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/core-metadata/src/test/java/org/apache/kylin/model/tool/CalciteParserTest.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/test/java/org/apache/kylin/model/tool/CalciteParserTest.java b/core-metadata/src/test/java/org/apache/kylin/model/tool/CalciteParserTest.java deleted file mode 100644 index 2c42ef3..0000000 --- a/core-metadata/src/test/java/org/apache/kylin/model/tool/CalciteParserTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -package org.apache.kylin.model.tool; - -import static org.junit.Assert.assertEquals; - -import org.apache.calcite.sql.SqlNode; -import org.apache.calcite.sql.SqlSelect; -import org.apache.calcite.sql.parser.SqlParseException; -import org.apache.kylin.common.util.Pair; -import org.apache.kylin.metadata.model.tool.CalciteParser; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -import com.google.common.base.Preconditions; - -public class CalciteParserTest { - - @Rule - public final ExpectedException exception = ExpectedException.none(); - - @Test - public void testNoTableNameExists() throws SqlParseException { - String expr1 = "a + b"; - assertEquals("x.a + x.b", CalciteParser.insertAliasInExpr(expr1, "x")); - - String expr2 = "a + year(b)"; - assertEquals("x.a + year(x.b)", CalciteParser.insertAliasInExpr(expr2, "x")); - - String expr3 = "a + hiveudf(b)"; - assertEquals("x.a + hiveudf(x.b)", CalciteParser.insertAliasInExpr(expr3, "x")); - } - - @Test - public void testTableNameExists1() throws SqlParseException { - String expr1 = "a + x.b"; - - exception.expect(IllegalArgumentException.class); - exception.expectMessage("SqlIdentifier X.B contains DB/Table name"); - CalciteParser.insertAliasInExpr(expr1, "x"); - } - - @Test - public void testTableNameExists2() throws SqlParseException { - String expr1 = "a + year(x.b)"; - - exception.expect(IllegalArgumentException.class); - exception.expectMessage("SqlIdentifier X.B contains DB/Table name"); - CalciteParser.insertAliasInExpr(expr1, "x"); - } - - @Test - public void testTableNameExists3() throws SqlParseException { - String expr1 = "a + hiveudf(x.b)"; - - exception.expect(IllegalArgumentException.class); - exception.expectMessage("SqlIdentifier X.B contains DB/Table name"); - CalciteParser.insertAliasInExpr(expr1, "x"); - } - - @Test - public void testCasewhen() { - String expr = "(CASE LSTG_FORMAT_NAME WHEN 'Auction' THEN 'x' WHEN 'y' THEN '222' ELSE 'z' END)"; - String alias = "TEST_KYLIN_FACT"; - String s = CalciteParser.insertAliasInExpr(expr, alias); - System.out.println(s); - assertEquals( - "(CASE TEST_KYLIN_FACT.LSTG_FORMAT_NAME WHEN 'Auction' THEN 'x' WHEN 'y' THEN '222' ELSE 'z' END)", - s); - } - - @Test - public void testPos() throws SqlParseException { - String[] sqls = new String[] { "select \n a \n + \n b \n from t", // - "select\na\n+\nb\nfrom t", // - "select \r\n a \r\n + \r\n b \r\n from t", // - "select\r\na\r\n+\r\nb\r\nfrom t" }; - - for (String sql : sqls) { - SqlNode parse = ((SqlSelect) CalciteParser.parse(sql)).getSelectList().get(0); - Pair<Integer, Integer> replacePos = CalciteParser.getReplacePos(parse, sql); - String substring = sql.substring(replacePos.getFirst(), replacePos.getSecond()); - Preconditions.checkArgument(substring.startsWith("a")); - Preconditions.checkArgument(substring.endsWith("b")); - } - - } - - - @Test - public void testPosWithBrackets() throws SqlParseException { - String[] sqls = new String[] { - "select ( a + b) * (c+ d ) from t", "select (a+b) * (c+d) from t", - "select (a + b) * (c+ d) from t", "select (a+b) * (c+d) from t", - }; - - for (String sql : sqls) { - SqlNode parse = ((SqlSelect) CalciteParser.parse(sql)).getSelectList().get(0); - Pair<Integer, Integer> replacePos = CalciteParser.getReplacePos(parse, sql); - String substring = sql.substring(replacePos.getFirst(), replacePos.getSecond()); - Preconditions.checkArgument(substring.startsWith("(")); - Preconditions.checkArgument(substring.endsWith(")")); - } - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java b/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java index 6dfdeb5..4edfb3d 100644 --- a/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java +++ b/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java @@ -137,7 +137,7 @@ public class ITKylinQueryTest extends KylinTestBase { public void testSingleRunQuery() throws Exception { System.setProperty("log4j.configuration", "file:../build/conf/kylin-tools-log4j.properties"); - String queryFileName = getQueryFolderPrefix() + "src/test/resources/query/sql_verifyCount/query03.sql"; + String queryFileName = getQueryFolderPrefix() + "src/test/resources/query/sql_verifyCount/query02.sql"; File sqlFile = new File(queryFileName); if (sqlFile.exists()) { http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java b/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java index c735b55..2c5b556 100644 --- a/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java +++ b/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java @@ -77,6 +77,10 @@ import com.google.common.io.Files; */ public class KylinTestBase { + static { + System.setProperty("needCheckCC", "true"); + } + private static final Logger logger = LoggerFactory.getLogger(KylinTestBase.class); public static boolean PRINT_RESULT = false; http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/kylin-it/src/test/resources/query/sql_limit/query01.sql ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/resources/query/sql_limit/query01.sql b/kylin-it/src/test/resources/query/sql_limit/query01.sql index 0752165..57ff062 100644 --- a/kylin-it/src/test/resources/query/sql_limit/query01.sql +++ b/kylin-it/src/test/resources/query/sql_limit/query01.sql @@ -19,7 +19,7 @@ select * from test_kylin_fact - inner join TEST_CATEGORY_GROUPINGS as TEST_CATEGORY_GROUPINGS + left join TEST_CATEGORY_GROUPINGS as TEST_CATEGORY_GROUPINGS ON TEST_KYLIN_FACT.LEAF_CATEG_ID = TEST_CATEGORY_GROUPINGS.LEAF_CATEG_ID AND TEST_KYLIN_FACT.LSTG_SITE_ID = TEST_CATEGORY_GROUPINGS.SITE_ID where lstg_format_name='FP-GTC' limit 20 http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/kylin-it/src/test/resources/query/sql_limit/query03.sql ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/resources/query/sql_limit/query03.sql b/kylin-it/src/test/resources/query/sql_limit/query03.sql index 765d8a1..2f18b89 100644 --- a/kylin-it/src/test/resources/query/sql_limit/query03.sql +++ b/kylin-it/src/test/resources/query/sql_limit/query03.sql @@ -19,11 +19,11 @@ SELECT test_kylin_fact.cal_dt , sum(test_kylin_fact.price) as GMV, count(*) as TRANS_CNT FROM test_kylin_fact - inner JOIN edw.test_cal_dt as test_cal_dt + left JOIN edw.test_cal_dt as test_cal_dt ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt - inner JOIN test_category_groupings + left JOIN test_category_groupings ON test_kylin_fact.leaf_categ_id = test_category_groupings.leaf_categ_id AND test_kylin_fact.lstg_site_id = test_category_groupings.site_id - inner JOIN edw.test_sites as test_sites + left JOIN edw.test_sites as test_sites ON test_kylin_fact.lstg_site_id = test_sites.site_id where test_kylin_fact.seller_id = 10000002 + 4 http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/server-base/src/main/java/org/apache/kylin/rest/request/ModelRequest.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/request/ModelRequest.java b/server-base/src/main/java/org/apache/kylin/rest/request/ModelRequest.java index dc8e06e..5f07997 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/request/ModelRequest.java +++ b/server-base/src/main/java/org/apache/kylin/rest/request/ModelRequest.java @@ -26,6 +26,7 @@ public class ModelRequest { private boolean successful; private String message; private String project; + private boolean isSeekingExprAdvice; public String getUuid() { return uuid; @@ -104,4 +105,11 @@ public class ModelRequest { this.project = project; } + public boolean isSeekingExprAdvice() { + return isSeekingExprAdvice; + } + + public void setIsSeekingExprAdvice(boolean seekingExprAdvice) { + isSeekingExprAdvice = seekingExprAdvice; + } } http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java index 3fa40a5..600c901 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java @@ -288,11 +288,11 @@ public class ModelService extends BasicService { String modelName = dataModelDesc.getName(); List<CubeInstance> cubes = cubeService.listAllCubes(null, project, modelName, true); List<DataModelDesc> historyModels = listAllModels(modelName, project, true); - + StringBuilder checkRet = new StringBuilder(); if (cubes != null && cubes.size() != 0 && !historyModels.isEmpty()) { dataModelDesc.init(getConfig(), getTableManager().getAllTablesMap(project), - getDataModelManager().listDataModels(), false); + getDataModelManager().getModels(project), false); List<String> curModelDims = getModelCols(dataModelDesc); List<String> curModelMeasures = getModelMeasures(dataModelDesc); @@ -352,6 +352,7 @@ public class ModelService extends BasicService { } public DataModelDesc updateModelToResourceStore(DataModelDesc modelDesc, String projectName) throws IOException { + aclEvaluate.checkProjectWritePermission(projectName); Message msg = MsgPicker.getMsg(); http://git-wip-us.apache.org/repos/asf/kylin/blob/b8ddd820/server-base/src/main/java/org/apache/kylin/rest/util/Log4jConfigListener.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/util/Log4jConfigListener.java b/server-base/src/main/java/org/apache/kylin/rest/util/Log4jConfigListener.java index 3dde9cf..13eca74 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/util/Log4jConfigListener.java +++ b/server-base/src/main/java/org/apache/kylin/rest/util/Log4jConfigListener.java @@ -36,6 +36,7 @@ public class Log4jConfigListener extends org.springframework.web.util.Log4jConfi super.contextInitialized(event); } System.setProperty("needCheckCC", "true"); + } @Override