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

morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 36bbe02f96cf2dd6d8370b5ff7cc5cee0a924c5d
Author: morningman <morning...@163.com>
AuthorDate: Fri Jun 24 13:03:04 2022 +0800

    [hotfix] change hive, broker, iceberg table query to non-vec engine
---
 .../java/org/apache/doris/analysis/FromClause.java | 37 +++++++++++++++++++++-
 ...ectorizedUtil.java => VecNotImplException.java} | 21 +++---------
 .../apache/doris/common/util/VectorizedUtil.java   | 19 +++++++++++
 .../java/org/apache/doris/qe/StmtExecutor.java     | 13 ++++++--
 thirdparty/vars.sh                                 |  2 +-
 5 files changed, 70 insertions(+), 22 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java
index be71841967..e77fd6ac21 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FromClause.java
@@ -20,11 +20,14 @@ package org.apache.doris.analysis;
 
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Table;
+import org.apache.doris.catalog.Table.TableType;
 import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
+import org.apache.doris.common.VecNotImplException;
+import org.apache.doris.common.util.VectorizedUtil;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
@@ -145,15 +148,47 @@ public class FromClause implements ParseNode, 
Iterable<TableRef> {
             leftTblRef = tblRef;
         }
 
+        checkExternalTable(analyzer);
         // TODO: remove when query from hive table is supported
         checkFromHiveTable(analyzer);
 
         analyzed_ = true;
     }
 
+    private void checkExternalTable(Analyzer analyzer) throws UserException {
+        for (TableRef tblRef : tableRefs_) {
+            if (!(tblRef instanceof BaseTableRef)) {
+                continue;
+            }
+
+            TableName tableName = tblRef.getName();
+            String dbName = tableName.getDb();
+            if (Strings.isNullOrEmpty(dbName)) {
+                dbName = analyzer.getDefaultDb();
+            } else {
+                dbName = 
ClusterNamespace.getFullName(analyzer.getClusterName(), 
tblRef.getName().getDb());
+            }
+            if (Strings.isNullOrEmpty(dbName)) {
+                ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_DB_ERROR);
+            }
+
+            Database db = 
analyzer.getCatalog().getDbOrAnalysisException(dbName);
+            String tblName = tableName.getTbl();
+            Table table = db.getTableOrAnalysisException(tblName);
+            if (VectorizedUtil.isVectorized()) {
+                if (table.getType() == TableType.BROKER || table.getType() == 
TableType.HIVE
+                        || table.getType() == TableType.ICEBERG) {
+                    throw new VecNotImplException("Not support table type " + 
table.getType() + " in vec engine");
+                }
+            }
+        }
+    }
+
     public FromClause clone() {
         ArrayList<TableRef> clone = Lists.newArrayList();
-        for (TableRef tblRef: tableRefs_) clone.add(tblRef.clone());
+        for (TableRef tblRef : tableRefs_) {
+            clone.add(tblRef.clone());
+        }
         return new FromClause(clone);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/VecNotImplException.java
similarity index 53%
copy from 
fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java
copy to 
fe/fe-core/src/main/java/org/apache/doris/common/VecNotImplException.java
index 6146bbc5a8..2c5d12e7d8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/VecNotImplException.java
@@ -15,23 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.common.util;
+package org.apache.doris.common;
 
-import org.apache.doris.qe.ConnectContext;
-
-public class VectorizedUtil {
-    /**
-     * 1. Return false if there is no current connection (Rule1 to be changed)
-     * 2. Returns the vectorized switch value of the query 
'globalState.enableQueryVec'
-     * 3. If it is not currently a query, return the vectorized switch value 
of the session 'enableVectorizedEngine'
-     * @return true: vec. false: non-vec
-     */
-    public static boolean isVectorized() {
-        ConnectContext connectContext = ConnectContext.get();
-        if (connectContext == null) {
-            return false;
-        }
-        return connectContext.getSessionVariable().enableVectorizedEngine();
+public class VecNotImplException extends UserException {
+    public VecNotImplException(String msg) {
+        super(msg);
     }
 }
-
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java
index 6146bbc5a8..7e3a501ebd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/VectorizedUtil.java
@@ -17,7 +17,12 @@
 
 package org.apache.doris.common.util;
 
+import org.apache.doris.analysis.SetVar;
+import org.apache.doris.analysis.StringLiteral;
+import org.apache.doris.common.DdlException;
 import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.SessionVariable;
+import org.apache.doris.qe.VariableMgr;
 
 public class VectorizedUtil {
     /**
@@ -33,5 +38,19 @@ public class VectorizedUtil {
         }
         return connectContext.getSessionVariable().enableVectorizedEngine();
     }
+
+    public static void switchToQueryNonVec() {
+        ConnectContext connectContext = ConnectContext.get();
+        if (connectContext == null) {
+            return;
+        }
+        SessionVariable sessionVariable = connectContext.getSessionVariable();
+        sessionVariable.setIsSingleSetVar(true);
+        try {
+            VariableMgr.setVar(sessionVariable, new 
SetVar("enable_vectorized_engine", new StringLiteral("false")));
+        } catch (DdlException e) {
+            // do nothing
+        }
+    }
 }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 7531f00e45..db4251206b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -67,6 +67,7 @@ import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.UserException;
+import org.apache.doris.common.VecNotImplException;
 import org.apache.doris.common.Version;
 import org.apache.doris.common.util.DebugUtil;
 import org.apache.doris.common.util.MetaLockUtils;
@@ -76,6 +77,7 @@ import org.apache.doris.common.util.QueryPlannerProfile;
 import org.apache.doris.common.util.RuntimeProfile;
 import org.apache.doris.common.util.SqlParserUtils;
 import org.apache.doris.common.util.TimeUtils;
+import org.apache.doris.common.util.VectorizedUtil;
 import org.apache.doris.load.EtlJobType;
 import org.apache.doris.metric.MetricRepo;
 import org.apache.doris.mysql.MysqlChannel;
@@ -118,7 +120,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-
+import com.google.protobuf.ByteString;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.thrift.TException;
@@ -137,8 +139,6 @@ import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
-import com.google.protobuf.ByteString;
-
 // Do one COM_QUERY process.
 // first: Parse receive byte array to statement struct.
 // second: Do handle function for statement.
@@ -594,6 +594,13 @@ public class StmtExecutor implements ProfileWriter {
                     } else {
                         resetAnalyzerAndStmt();
                     }
+                } catch (VecNotImplException e) {
+                    if (i == analyzeTimes) {
+                        throw e;
+                    } else {
+                        resetAnalyzerAndStmt();
+                        VectorizedUtil.switchToQueryNonVec();
+                    }
                 } catch (UserException e) {
                     throw e;
                 } catch (Exception e) {
diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh
index d0121cfc95..8d9ce00628 100755
--- a/thirdparty/vars.sh
+++ b/thirdparty/vars.sh
@@ -45,7 +45,7 @@ export TP_LIB_DIR=$TP_INSTALL_DIR/lib
 export TP_JAR_DIR=$TP_INSTALL_DIR/lib/jar
 
 # source of all dependencies, default unuse it
-export 
REPOSITORY_URL=https://doris-thirdparty-hk-1308700295.cos.ap-hongkong.myqcloud.com/thirdparty
+export REPOSITORY_URL=
 
 #####################################################
 # Download url, filename and unpaced filename


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

Reply via email to