This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 148d8f61aaafbca0c207d76f0747a85ed0b11fbb
Author: Pengfei Zhan <dethr...@gmail.com>
AuthorDate: Mon Sep 11 14:43:04 2023 +0800

    KYLIN-5837 Support only reusing user defined computedColumns
---
 .../java/org/apache/kylin/common/KapConfig.java    | 27 +++-------
 .../org/apache/kylin/common/KylinConfigBase.java   | 25 ++++++---
 .../org/apache/kylin/common/KapConfigTest.java     | 15 ++----
 .../apache/kylin/common/KylinConfigBaseTest.java   |  8 +++
 .../kylin/query/util/ComputedColumnRewriter.java   | 17 +++---
 .../kylin/query/util/ConvertToComputedColumn.java  | 60 ++++++++--------------
 .../query/util/RestoreFromComputedColumn.java      | 19 +++----
 7 files changed, 79 insertions(+), 92 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java
index c7c10c500d..c79a588c95 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java
@@ -22,13 +22,14 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Map;
 
-import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.Path;
 import org.apache.kylin.common.annotation.Clarification;
 import org.apache.kylin.common.util.EncryptUtil;
 import org.apache.kylin.common.util.FileUtils;
 
+import lombok.extern.slf4j.Slf4j;
+
 @Slf4j
 @Clarification(priority = Clarification.Priority.MAJOR, msg = "Enterprise")
 public class KapConfig {
@@ -233,21 +234,6 @@ public class KapConfig {
         return config.getOptional("kylin.smart.conf." + conf, null);
     }
 
-    /**
-     * Query
-     */
-    public boolean isImplicitComputedColumnConvertEnabled() {
-        return 
Boolean.parseBoolean(config.getOptional("kylin.query.implicit-computed-column-convert",
 "true"));
-    }
-
-    public boolean isAggComputedColumnRewriteEnabled() {
-        return 
Boolean.parseBoolean(config.getOptional("kylin.query.agg-computed-column-rewrite",
 "true"));
-    }
-
-    public int getComputedColumnMaxRecursionTimes() {
-        return 
Integer.parseInt(config.getOptional("kylin.query.computed-column-max-recursion-times",
 "10"));
-    }
-
     public boolean isJdbcEscapeEnabled() {
         return 
Boolean.parseBoolean(config.getOptional("kylin.query.jdbc-escape-enabled", 
"true"));
     }
@@ -266,7 +252,8 @@ public class KapConfig {
     }
 
     public Boolean isConstraintPropagationEnabled() {
-        return 
Boolean.parseBoolean(config.getOptional("kylin.query.engine.spark-constraint-propagation-enabled",
 FALSE));
+        return Boolean
+                
.parseBoolean(config.getOptional("kylin.query.engine.spark-constraint-propagation-enabled",
 FALSE));
     }
 
     /**
@@ -716,11 +703,13 @@ public class KapConfig {
     }
 
     public boolean isApplyLimitInfoToSourceScanRowsEnabled() {
-        return 
Boolean.parseBoolean(config.getOptional("kylin.query.apply-limit-info-to-source-scan-rows-enabled",
 FALSE));
+        return Boolean
+                
.parseBoolean(config.getOptional("kylin.query.apply-limit-info-to-source-scan-rows-enabled",
 FALSE));
     }
 
     public boolean isAutoAdjustBigQueryRowsThresholdEnabled() {
-        return 
Boolean.parseBoolean(config.getOptional("kylin.query.auto-adjust-big-query-rows-threshold-enabled",
 FALSE));
+        return Boolean
+                
.parseBoolean(config.getOptional("kylin.query.auto-adjust-big-query-rows-threshold-enabled",
 FALSE));
     }
 
     public long getBigQuerySecond() {
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index a2518358a9..3042b23c58 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -793,6 +793,18 @@ public abstract class KylinConfigBase implements 
Serializable {
         return 
Boolean.parseBoolean(getOptional("kylin.metadata.only-reuse-user-defined-computed-column",
 FALSE));
     }
 
+    public boolean isConvertExpressionToCcEnabled() {
+        return 
Boolean.parseBoolean(getOptional("kylin.query.implicit-computed-column-convert",
 TRUE));
+    }
+
+    public boolean isAggComputedColumnRewriteEnabled() {
+        return 
Boolean.parseBoolean(getOptional("kylin.query.agg-computed-column-rewrite", 
TRUE));
+    }
+
+    public int getConvertCcMaxIterations() {
+        return 
Integer.parseInt(getOptional("kylin.query.computed-column-max-recursion-times", 
"10"));
+    }
+
     /**
      * expose computed column in the table metadata and select * queries
      */
@@ -1941,14 +1953,14 @@ public abstract class KylinConfigBase implements 
Serializable {
     }
 
     public String getMppOnTheFlyLayoutsProvider() {
-        return this.getOptional("kylin.query.mpp-on-the-fly-layouts-provider", 
"io.kyligence.kap.engine.spark.job.MppOnTheFlyImpl");
+        return this.getOptional("kylin.query.mpp-on-the-fly-layouts-provider",
+                "io.kyligence.kap.engine.spark.job.MppOnTheFlyImpl");
     }
 
     public boolean enableReplaceDynamicParams() {
         return 
Boolean.parseBoolean(this.getOptional("kylin.query.replace-dynamic-params-enabled",
 FALSE));
     }
 
-
     public String getPercentileApproxAlgorithm() {
         // Valid values: t-digest
         return this.getOptional("kylin.query.percentile-approx-algorithm", "");
@@ -2870,8 +2882,7 @@ public abstract class KylinConfigBase implements 
Serializable {
     }
 
     public long getTableAccessCacheTTL() {
-        return 
TimeUtil.timeStringAs(getOptional("kylin.source.hive.table-access-cache-ttl", 
"7d"),
-                TimeUnit.MINUTES);
+        return 
TimeUtil.timeStringAs(getOptional("kylin.source.hive.table-access-cache-ttl", 
"7d"), TimeUnit.MINUTES);
     }
 
     public String[] getHiveDatabases() {
@@ -4126,11 +4137,13 @@ public abstract class KylinConfigBase implements 
Serializable {
     }
 
     public boolean isKylinLocalCacheEnabled() {
-        return 
Boolean.parseBoolean(getOptional("kylin.storage.columnar.spark-conf.spark.kylin.local-cache.enabled",
 FALSE));
+        return Boolean
+                
.parseBoolean(getOptional("kylin.storage.columnar.spark-conf.spark.kylin.local-cache.enabled",
 FALSE));
     }
 
     public boolean isKylinFileStatusCacheEnabled() {
-        return 
Boolean.parseBoolean(getOptional("kylin.storage.columnar.spark-conf.spark.hadoop.spark.kylin.file-status-cache.enabled",
 FALSE));
+        return Boolean.parseBoolean(getOptional(
+                
"kylin.storage.columnar.spark-conf.spark.hadoop.spark.kylin.file-status-cache.enabled",
 FALSE));
     }
 
     public boolean isSupportPushdownHiveCsvEnhancement() {
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/KapConfigTest.java 
b/src/core-common/src/test/java/org/apache/kylin/common/KapConfigTest.java
index ba98e66eab..ed20497851 100644
--- a/src/core-common/src/test/java/org/apache/kylin/common/KapConfigTest.java
+++ b/src/core-common/src/test/java/org/apache/kylin/common/KapConfigTest.java
@@ -70,15 +70,6 @@ public class KapConfigTest {
 
         map.put("getChannelUser", new PropertiesEntity("kylin.env.channel", 
"on-premises", "on-premises"));
 
-        map.put("isImplicitComputedColumnConvertEnabled",
-                new 
PropertiesEntity("kylin.query.implicit-computed-column-convert", "true", true));
-
-        map.put("isAggComputedColumnRewriteEnabled",
-                new 
PropertiesEntity("kylin.query.agg-computed-column-rewrite", "true", true));
-
-        map.put("getComputedColumnMaxRecursionTimes",
-                new 
PropertiesEntity("kylin.query.computed-column-max-recursion-times", "10", 10));
-
         map.put("isJdbcEscapeEnabled", new 
PropertiesEntity("kylin.query.jdbc-escape-enabled", "true", true));
 
         map.put("getListenerBusBusyThreshold",
@@ -258,8 +249,10 @@ public class KapConfigTest {
                 new 
PropertiesEntity("kylin.query.spark-job-trace-parallel-max", "50", 50));
         map.put("isSourceUsageUnwrapComputedColumn",
                 new 
PropertiesEntity("kylin.metadata.history-source-usage-unwrap-computed-column", 
"true", true));
-        map.put("getKerberosTGTRenewalInterval", new 
PropertiesEntity("kylin.kerberos.tgt-renewal-interval-minutes", "10", 10L));
-        map.put("getKerberosTGTRetryInterval", new 
PropertiesEntity("kylin.kerberos.tgt-retry-interval-minutes", "60", 60L));
+        map.put("getKerberosTGTRenewalInterval",
+                new 
PropertiesEntity("kylin.kerberos.tgt-renewal-interval-minutes", "10", 10L));
+        map.put("getKerberosTGTRetryInterval",
+                new 
PropertiesEntity("kylin.kerberos.tgt-retry-interval-minutes", "60", 60L));
     }
 
     @Test
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
index 59e4a3fc9b..f01a4ab8a1 100644
--- 
a/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
@@ -105,6 +105,14 @@ class KylinConfigBaseTest {
                 new 
PropertiesEntity("kylin.metrics.system-cube-sink-default-class",
                         "org.apache.kylin.metrics.lib.impl.hive.HiveSink",
                         "org.apache.kylin.metrics.lib.impl.hive.HiveSink"));
+        map.put("isConvertExpressionToCcEnabled",
+                new 
PropertiesEntity("kylin.query.implicit-computed-column-convert", "true", true));
+
+        map.put("isAggComputedColumnRewriteEnabled",
+                new 
PropertiesEntity("kylin.query.agg-computed-column-rewrite", "true", true));
+
+        map.put("getConvertCcMaxIterations",
+                new 
PropertiesEntity("kylin.query.computed-column-max-recursion-times", "10", 10));
 
         map.put("isKylinMetricsMonitorEnabled", new 
PropertiesEntity("kylin.metrics.monitor-enabled", "false", false));
 
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/util/ComputedColumnRewriter.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/util/ComputedColumnRewriter.java
index 1e198f87db..ea4878190e 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/util/ComputedColumnRewriter.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/util/ComputedColumnRewriter.java
@@ -24,9 +24,9 @@ import java.util.Map;
 
 import org.apache.calcite.sql.SqlNode;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.kylin.common.KapConfig;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.CollectionUtil;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.metadata.model.ComputedColumnDesc;
 import org.apache.kylin.metadata.model.NDataModel;
 import org.apache.kylin.metadata.model.ParameterDesc;
@@ -41,8 +41,6 @@ import org.apache.kylin.query.relnode.TableColRefWithRel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-
 import lombok.val;
 import lombok.var;
 
@@ -65,7 +63,7 @@ public class ComputedColumnRewriter {
 
     private static void rewriteAggInnerCol(KylinConfig kylinConfig, 
OLAPContext context, NDataModel model,
             QueryAliasMatchInfo matchInfo) {
-        if (!KapConfig.getInstanceFromEnv().isAggComputedColumnRewriteEnabled()
+        if (!kylinConfig.isConvertExpressionToCcEnabled() || 
!kylinConfig.isAggComputedColumnRewriteEnabled()
                 || CollectionUtils.isEmpty(model.getComputedColumnDescs())) {
             return;
         }
@@ -102,8 +100,9 @@ public class ComputedColumnRewriter {
             return null;
         }
 
+        boolean onlyReuseUserDefinedCC = kylinConfig.onlyReuseUserDefinedCC();
         for (ComputedColumnDesc cc : model.getComputedColumnDescs()) {
-            if (kylinConfig.isTableExclusionEnabled() && 
kylinConfig.onlyReuseUserDefinedCC() && cc.isAutoCC()) {
+            if (onlyReuseUserDefinedCC && cc.isAutoCC()) {
                 continue;
             }
 
@@ -122,7 +121,7 @@ public class ComputedColumnRewriter {
 
     private static void rewriteTopNInnerCol(KylinConfig kylinConfig, 
OLAPContext context, NDataModel model,
             QueryAliasMatchInfo matchInfo) {
-        if (CollectionUtils.isEmpty(model.getComputedColumnDescs()))
+        if (CollectionUtils.isEmpty(model.getComputedColumnDescs()) || 
!kylinConfig.isConvertExpressionToCcEnabled())
             return;
 
         
context.getSortColumns().stream().filter(TblColRef::isInnerColumn).forEach(column
 -> {
@@ -146,7 +145,7 @@ public class ComputedColumnRewriter {
 
     private static void rewriteGroupByInnerCol(KylinConfig kylinConfig, 
OLAPContext ctx, NDataModel model,
             QueryAliasMatchInfo matchInfo) {
-        if (CollectionUtils.isEmpty(model.getComputedColumnDescs())) {
+        if (CollectionUtils.isEmpty(model.getComputedColumnDescs()) || 
!kylinConfig.isConvertExpressionToCcEnabled()) {
             return;
         }
 
@@ -161,8 +160,10 @@ public class ComputedColumnRewriter {
                         
tableColRefWIthRel.getTblColRef().getParserDescription(), e);
                 continue;
             }
+
+            boolean onlyReuseUserDefinedCC = 
kylinConfig.onlyReuseUserDefinedCC();
             for (ComputedColumnDesc cc : model.getComputedColumnDescs()) {
-                if (kylinConfig.isTableExclusionEnabled() && 
kylinConfig.onlyReuseUserDefinedCC() && cc.isAutoCC()) {
+                if (onlyReuseUserDefinedCC && cc.isAutoCC()) {
                     continue;
                 }
                 SqlNode ccExpressionNode = 
CalciteParser.getExpNode(cc.getExpression());
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
index ba1f57a832..1c4fa5a287 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
@@ -51,7 +51,6 @@ import org.apache.calcite.sql.util.SqlVisitor;
 import org.apache.calcite.util.Litmus;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.kylin.common.KapConfig;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.common.util.ThreadUtil;
@@ -70,7 +69,6 @@ import org.apache.kylin.metadata.project.NProjectManager;
 import org.apache.kylin.query.IQueryTransformer;
 
 import lombok.SneakyThrows;
-import lombok.val;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -259,32 +257,22 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
         return transformImpl(originSql, project, defaultSchema, 
dataModelDescs);
     }
 
-    private String transformImpl(String originSql, String project, String 
defaultSchema,
-            List<NDataModel> dataModelDescs) throws SqlParseException {
-
+    private String transformImpl(String originSql, String project, String 
defaultSchema, List<NDataModel> models)
+            throws SqlParseException {
         if (project == null || originSql == null) {
             return originSql;
         }
 
-        return transformImpl(originSql, new QueryAliasMatcher(project, 
defaultSchema), dataModelDescs);
-    }
-
-    private String transformImpl(String originSql, QueryAliasMatcher 
queryAliasMatcher, List<NDataModel> dataModelDescs)
-            throws SqlParseException {
-        if 
(!KapConfig.getInstanceFromEnv().isImplicitComputedColumnConvertEnabled()) {
+        KylinConfig projectConfig = NProjectManager.getProjectConfig(project);
+        QueryAliasMatcher queryAliasMatcher = new QueryAliasMatcher(project, 
defaultSchema);
+        if (!projectConfig.isConvertExpressionToCcEnabled()) {
             return originSql;
         }
 
+        int maxRecursionTimes = projectConfig.getConvertCcMaxIterations();
         String sql = originSql;
-        if (queryAliasMatcher == null || sql == null) {
-            return sql;
-        }
-
-        int recursionTimes = 0;
-        int maxRecursionTimes = 
KapConfig.getInstanceFromEnv().getComputedColumnMaxRecursionTimes();
-
-        while ((recursionTimes++) < maxRecursionTimes) {
-            Pair<String, Boolean> result = transformImplRecursive(sql, 
queryAliasMatcher, dataModelDescs, false);
+        for (int i = 0; i < maxRecursionTimes; i++) {
+            Pair<String, Boolean> result = transformImplRecursive(sql, 
queryAliasMatcher, models);
             sql = result.getFirst();
             boolean recursionCompleted = result.getSecond();
             if (recursionCompleted) {
@@ -296,7 +284,7 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
     }
 
     private Pair<String, Boolean> transformImplRecursive(String sql, 
QueryAliasMatcher queryAliasMatcher,
-            List<NDataModel> dataModelDescs, boolean replaceCcName) throws 
SqlParseException {
+            List<NDataModel> models) throws SqlParseException {
         boolean recursionCompleted = true;
         List<SqlCall> selectOrOrderbys = SqlSubqueryFinder.getSubqueries(sql);
         Pair<String, Integer> choiceForCurrentSubquery = null; //<new sql, 
number of changes by the model>
@@ -309,9 +297,9 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
 
             SqlCall selectOrOrderby = selectOrOrderbys.get(i);
 
-            ComputedColumnReplacer rewriteChecker = new 
ComputedColumnReplacer(queryAliasMatcher, dataModelDescs,
+            ComputedColumnReplacer rewriteChecker = new 
ComputedColumnReplacer(queryAliasMatcher, models,
                     recursionCompleted, choiceForCurrentSubquery, 
selectOrOrderby);
-            rewriteChecker.replace(sql, replaceCcName);
+            rewriteChecker.replace(sql, false);
             recursionCompleted = rewriteChecker.isRecursionCompleted();
             choiceForCurrentSubquery = 
rewriteChecker.getChoiceForCurrentSubquery();
 
@@ -402,16 +390,9 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
                 Pair<Integer, Integer> startEndPos = 
CalciteParser.getReplacePos(node, inputSql);
                 int start = startEndPos.getFirst();
                 int end = startEndPos.getSecond();
-
-                boolean conflict = false;
-                for (val pair : toBeReplacedExp) {
-                    Pair<Integer, Integer> replaced = pair.getSecond();
-                    if (!(replaced.getFirst() >= end || replaced.getSecond() 
<= start)) {
-                        // overlap with chosen areas
-                        conflict = true;
-                        break;
-                    }
-                }
+                boolean conflict = 
toBeReplacedExp.stream().map(Pair::getSecond)
+                        .anyMatch(replaced -> !(replaced.getFirst() >= end || 
replaced.getSecond() <= start));
+                // overlap with chosen areas
                 if (conflict) {
                     continue;
                 }
@@ -421,7 +402,8 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
         return toBeReplacedExp;
     }
 
-    //Return matched node's position and its alias(if exists).If can not find 
matches, return an empty list
+    // Return matched node's position and its alias(if exists).
+    // If we can not find matches, return an empty list
     private List<SqlNode> getMatchedNodes(SqlCall selectOrOrderby, String 
ccExp, QueryAliasMatchInfo matchInfo) {
         if (ccExp == null || ccExp.equals(StringUtils.EMPTY)) {
             return Collections.emptyList();
@@ -473,7 +455,7 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
     }
 
     static class SqlTreeVisitor implements SqlVisitor<SqlNode> {
-        private List<SqlNode> sqlNodes;
+        private final List<SqlNode> sqlNodes;
 
         SqlTreeVisitor() {
             this.sqlNodes = new ArrayList<>();
@@ -537,11 +519,11 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
     }
 
     private class ComputedColumnReplacer {
-        private QueryAliasMatcher queryAliasMatcher;
-        private List<NDataModel> dataModels;
+        private final QueryAliasMatcher queryAliasMatcher;
+        private final List<NDataModel> dataModels;
         private boolean recursionCompleted;
         private Pair<String, Integer> choiceForCurrentSubquery;
-        private SqlCall selectOrOrderby;
+        private final SqlCall selectOrOrderby;
 
         ComputedColumnReplacer(QueryAliasMatcher queryAliasMatcher, 
List<NDataModel> dataModels,
                 boolean recursionCompleted, Pair<String, Integer> 
choiceForCurrentSubquery, SqlCall selectOrOrderby) {
@@ -597,7 +579,7 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
         private List<ComputedColumnDesc> 
getSortedComputedColumnWithModel(NDataModel model) {
             List<ComputedColumnDesc> ccList = model.getComputedColumnDescs();
             KylinConfig projectConfig = 
NProjectManager.getProjectConfig(model.getProject());
-            if (projectConfig.isTableExclusionEnabled() && 
projectConfig.onlyReuseUserDefinedCC()) {
+            if (projectConfig.onlyReuseUserDefinedCC()) {
                 ccList = ccList.stream().filter(cc -> 
!cc.isAutoCC()).collect(Collectors.toList());
             }
             return getCCListSortByLength(ccList);
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/util/RestoreFromComputedColumn.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/util/RestoreFromComputedColumn.java
index 148f40fb6c..cfb58dcab7 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/util/RestoreFromComputedColumn.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/util/RestoreFromComputedColumn.java
@@ -35,23 +35,22 @@ import org.apache.calcite.sql.parser.SqlParseException;
 import org.apache.calcite.sql.util.SqlBasicVisitor;
 import org.apache.calcite.util.Litmus;
 import org.apache.commons.collections.MapUtils;
-import org.apache.kylin.common.KapConfig;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.common.util.Unsafe;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
+import org.apache.kylin.guava30.shaded.common.collect.Iterables;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.metadata.cube.model.NDataflowManager;
 import org.apache.kylin.metadata.model.ComputedColumnDesc;
 import org.apache.kylin.metadata.model.NDataModel;
 import org.apache.kylin.metadata.model.tool.CalciteParser;
+import org.apache.kylin.metadata.project.NProjectManager;
 import org.apache.kylin.source.adhocquery.IPushDownConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
-import org.apache.kylin.guava30.shaded.common.collect.Iterables;
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
-
 //very similar to ConvertToComputedColumn in structure, maybe we should 
extract a common base class?
 public class RestoreFromComputedColumn implements IPushDownConverter {
 
@@ -78,10 +77,11 @@ public class RestoreFromComputedColumn implements 
IPushDownConverter {
         QueryAliasMatcher queryAliasMatcher = new QueryAliasMatcher(project, 
defaultSchema);
 
         int recursionTimes = 0;
-        int maxRecursionTimes = 
KapConfig.getInstanceFromEnv().getComputedColumnMaxRecursionTimes();
+        int maxRecursionTimes = 
NProjectManager.getProjectConfig(project).getConvertCcMaxIterations();
 
         while (recursionTimes < maxRecursionTimes) {
-            QueryInterruptChecker.checkThreadInterrupted("Interrupted sql 
transformation at the stage of RestoreFromComputedColumn",
+            QueryInterruptChecker.checkThreadInterrupted(
+                    "Interrupted sql transformation at the stage of 
RestoreFromComputedColumn",
                     "Current step: SQL transformation");
             recursionTimes++;
             boolean recursionCompleted = true;
@@ -181,7 +181,8 @@ public class RestoreFromComputedColumn implements 
IPushDownConverter {
         for (NDataModel model : modelMap.values()) {
             QueryAliasMatchInfo info = 
model.getComputedColumnDescs().isEmpty() ? null
                     : queryAliasMatcher.match(model, sqlSelect);
-            QueryInterruptChecker.checkThreadInterrupted("Interrupted sql 
transformation at the stage of RestoreFromComputedColumn",
+            QueryInterruptChecker.checkThreadInterrupted(
+                    "Interrupted sql transformation at the stage of 
RestoreFromComputedColumn",
                     "Current step: SQL transformation");
             if (info == null) {
                 continue;

Reply via email to