You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2023/06/22 07:58:39 UTC

[doris] branch master updated: [Bug](materialized-veiw) fix error happens when parsing create materialized view stmt #21095

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

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new fa3bb2eabe [Bug](materialized-veiw) fix error happens when parsing create materialized view stmt #21095
fa3bb2eabe is described below

commit fa3bb2eabee234ee8acf704c4024ea9c4ab4a4ad
Author: Pxl <px...@qq.com>
AuthorDate: Thu Jun 22 15:58:32 2023 +0800

    [Bug](materialized-veiw) fix error happens when parsing create materialized view stmt #21095
---
 .../doris/catalog/MaterializedIndexMeta.java       | 30 ++++++++++++++++++----
 .../java/org/apache/doris/catalog/OlapTable.java   |  4 +--
 2 files changed, 27 insertions(+), 7 deletions(-)

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 1d3d353bf3..07c33b85bc 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,8 +28,10 @@ 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;
@@ -75,18 +77,21 @@ public class MaterializedIndexMeta implements Writable, GsonPostProcessable {
     private Map<String, Column> nameToColumn;
     private Map<String, Column> definedNameToColumn;
 
+    @SerializedName(value = "dbName")
+    private String dbName;
+
     private static final Logger LOG = LogManager.getLogger(MaterializedIndexMeta.class);
 
 
     public MaterializedIndexMeta(long indexId, List<Column> schema, int schemaVersion, int schemaHash,
             short shortKeyColumnCount, TStorageType storageType, KeysType keysType, OriginStatement defineStmt) {
         this(indexId, schema, schemaVersion, schemaHash, shortKeyColumnCount, storageType, keysType,
-                defineStmt, null); // indexes is null by default
+                defineStmt, null, null); // indexes is null by default
     }
 
     public MaterializedIndexMeta(long indexId, List<Column> schema, int schemaVersion, int schemaHash,
             short shortKeyColumnCount, TStorageType storageType, KeysType keysType, OriginStatement defineStmt,
-            List<Index> indexes) {
+            List<Index> indexes, String dbName) {
         this.indexId = indexId;
         Preconditions.checkState(schema != null);
         Preconditions.checkState(schema.size() != 0);
@@ -101,6 +106,7 @@ public class MaterializedIndexMeta implements Writable, GsonPostProcessable {
         this.defineStmt = defineStmt;
         this.indexes = indexes != null ? indexes : Lists.newArrayList();
         initColumnNameMap();
+        this.dbName = dbName;
     }
 
     public void setWhereClause(Expr whereClause) {
@@ -286,6 +292,12 @@ public class MaterializedIndexMeta implements Writable, GsonPostProcessable {
     }
 
     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;
@@ -297,14 +309,22 @@ public class MaterializedIndexMeta implements Writable, GsonPostProcessable {
         try {
             stmt = (CreateMaterializedViewStmt) SqlParserUtils.getStmt(parser, defineStmt.idx);
             if (analyzer != null) {
-                stmt.analyze(analyzer);
+                try {
+                    stmt.analyze(analyzer);
+                } catch (Exception e) {
+                    LOG.warn("CreateMaterializedViewStmt analyze failed, reason=" + e.getMessage());
+                }
             }
 
             stmt.setIsReplay(true);
             setWhereClause(stmt.getWhereClause());
             stmt.rewriteToBitmapWithCheck();
-            Map<String, Expr> columnNameToDefineExpr = stmt.parseDefineExpr(analyzer);
-            setColumnsDefineExpr(columnNameToDefineExpr);
+            try {
+                Map<String, Expr> columnNameToDefineExpr = stmt.parseDefineExpr(analyzer);
+                setColumnsDefineExpr(columnNameToDefineExpr);
+            } catch (Exception e) {
+                LOG.warn("CreateMaterializedViewStmt parseDefineExpr failed, reason=" + e.getMessage());
+            }
 
         } catch (Exception e) {
             throw new IOException("error happens when parsing create materialized view stmt: " + defineStmt, e);
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 af4a653f46..d76e2e7aaf 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
@@ -355,8 +355,8 @@ public class OlapTable extends Table {
             Preconditions.checkState(storageType == TStorageType.COLUMN);
         }
 
-        MaterializedIndexMeta indexMeta = new MaterializedIndexMeta(indexId, schema, schemaVersion,
-                schemaHash, shortKeyColumnCount, storageType, keysType, origStmt, indexes);
+        MaterializedIndexMeta indexMeta = new MaterializedIndexMeta(indexId, schema, schemaVersion, schemaHash,
+                shortKeyColumnCount, storageType, keysType, origStmt, indexes, getQualifiedDbName());
         try {
             indexMeta.parseStmt(analyzer);
         } catch (Exception e) {


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