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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 075e5b1bcd3b0d6932c9dca3702af655e5226ba7
Author: Pxl <pxl...@qq.com>
AuthorDate: Mon Aug 28 15:18:18 2023 +0800

    [Bug](materialized-view) fix loaddb analyze failed on MaterializedIndexMeta 
(#23442)
---
 .../src/main/java/org/apache/doris/catalog/Database.java     |  7 +++++++
 .../java/org/apache/doris/catalog/MaterializedIndexMeta.java | 12 ++----------
 .../src/main/java/org/apache/doris/catalog/OlapTable.java    | 11 +++++++++++
 fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java |  4 ++++
 .../java/org/apache/doris/datasource/InternalCatalog.java    |  6 ++++++
 .../org/apache/doris/catalog/MaterializedIndexMetaTest.java  |  1 +
 6 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
index d12e607522..7c2981e239 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.catalog;
 
+import org.apache.doris.analysis.Analyzer;
 import org.apache.doris.catalog.TableIf.TableType;
 import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
@@ -612,6 +613,12 @@ public class Database extends MetaObject implements 
Writable, DatabaseIf<Table>
         }
     }
 
+    public void analyze(Analyzer analyzer) {
+        for (Table table : nameToTable.values()) {
+            table.analyze(analyzer);
+        }
+    }
+
     @Override
     public void readFields(DataInput in) throws IOException {
         super.readFields(in);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
index f7b50e5f2d..08e8d85b88 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
@@ -28,10 +28,8 @@ import org.apache.doris.common.io.Writable;
 import org.apache.doris.common.util.SqlParserUtils;
 import org.apache.doris.persist.gson.GsonPostProcessable;
 import org.apache.doris.persist.gson.GsonUtils;
-import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.OriginStatement;
 import org.apache.doris.qe.SqlModeHelper;
-import org.apache.doris.system.SystemInfoService;
 import org.apache.doris.thrift.TStorageType;
 
 import com.google.common.base.Preconditions;
@@ -292,16 +290,9 @@ public class MaterializedIndexMeta implements Writable, 
GsonPostProcessable {
     @Override
     public void gsonPostProcess() throws IOException {
         initColumnNameMap();
-        parseStmt(null);
     }
 
     public void parseStmt(Analyzer analyzer) throws IOException {
-        if (analyzer == null && dbName != null) {
-            ConnectContext connectContext = new ConnectContext();
-            connectContext.setCluster(SystemInfoService.DEFAULT_CLUSTER);
-            connectContext.setDatabase(dbName);
-            analyzer = new Analyzer(Env.getCurrentEnv(), connectContext);
-        }
         // analyze define stmt
         if (defineStmt == null) {
             return;
@@ -316,7 +307,8 @@ public class MaterializedIndexMeta implements Writable, 
GsonPostProcessable {
                 try {
                     stmt.analyze(analyzer);
                 } catch (Exception e) {
-                    LOG.warn("CreateMaterializedViewStmt analyze failed, 
reason=" + e.getMessage());
+                    LOG.warn("CreateMaterializedViewStmt analyze failed, mv=" 
+ defineStmt.originStmt + ", reason=", e);
+                    return;
                 }
             }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 10eddeeacf..9a7866f83a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -2226,4 +2226,15 @@ public class OlapTable extends Table {
             }
         }
     }
+
+    @Override
+    public void analyze(Analyzer analyzer) {
+        for (MaterializedIndexMeta meta : indexIdToMeta.values()) {
+            try {
+                meta.parseStmt(analyzer);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
index d3d72f03e3..a6d1b11d78 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
@@ -18,6 +18,7 @@
 package org.apache.doris.catalog;
 
 import org.apache.doris.alter.AlterCancelException;
+import org.apache.doris.analysis.Analyzer;
 import org.apache.doris.analysis.CreateTableStmt;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.MetaNotFoundException;
@@ -554,4 +555,7 @@ public abstract class Table extends MetaObject implements 
Writable, TableIf {
     public Optional<ColumnStatistic> getColumnStatistic(String colName) {
         return Optional.empty();
     }
+
+    public void analyze(Analyzer analyzer) {
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
index 5502db8076..ac10fa32a2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
@@ -3077,6 +3077,12 @@ public class InternalCatalog implements 
CatalogIf<Database> {
             idToDb.put(db.getId(), db);
             fullNameToDb.put(db.getFullName(), db);
             
Env.getCurrentGlobalTransactionMgr().addDatabaseTransactionMgr(db.getId());
+
+            ConnectContext connectContext = new ConnectContext();
+            connectContext.setCluster(SystemInfoService.DEFAULT_CLUSTER);
+            connectContext.setDatabase(db.getFullName());
+            Analyzer analyzer = new Analyzer(Env.getCurrentEnv(), 
connectContext);
+            db.analyze(analyzer);
         }
         // ATTN: this should be done after load Db, and before loadAlterJob
         recreateTabletInvertIndex();
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/catalog/MaterializedIndexMetaTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/MaterializedIndexMetaTest.java
index 60cb797e9b..1bbf7a5682 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/catalog/MaterializedIndexMetaTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/MaterializedIndexMetaTest.java
@@ -105,6 +105,7 @@ public class MaterializedIndexMetaTest {
         // 2. Read objects from file
         DataInputStream in = new DataInputStream(Files.newInputStream(path));
         MaterializedIndexMeta readIndexMeta = MaterializedIndexMeta.read(in);
+        readIndexMeta.parseStmt(null);
         Assert.assertEquals(1, readIndexMeta.getIndexId());
         List<Column> resultColumns = readIndexMeta.getSchema();
         for (Column column : resultColumns) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to