diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index 90c9a871e99c84..2da11339b91ec8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -25,6 +25,7 @@ import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Table.TableType; import org.apache.doris.catalog.Type; +import org.apache.doris.catalog.View; import org.apache.doris.cluster.ClusterNamespace; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.ColumnAliasGenerator; @@ -289,6 +290,9 @@ public void getDbs(Analyzer analyzer, Map dbs) throws Analysis } else { dbName = ClusterNamespace.getFullName(analyzer.getClusterName(), tblRef.getName().getDb()); } + if(withClause_ != null && isViewTableRef(tblRef)){ + continue; + } if (Strings.isNullOrEmpty(dbName)) { ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_DB_ERROR); } @@ -313,6 +317,16 @@ public void getDbs(Analyzer analyzer, Map dbs) throws Analysis } } + private boolean isViewTableRef(TableRef tblRef) { + List views = withClause_.getViews(); + for(View view : views){ + if(view.getName().equals(tblRef.getName().toString())){ + return true; + } + } + return false; + } + // Column alias generator used during query rewriting. private ColumnAliasGenerator columnAliasGenerator = null; diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java index b46c3aab34eb1b..d57fe5c6cadc3c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java @@ -520,4 +520,11 @@ public void testSelectHintSetVar() throws Exception { planner = dorisAssert.query(sql).internalExecuteOneAndGetPlan(); Assert.assertEquals(8589934592L, planner.getPlannerContext().getQueryOptions().mem_limit); } + + @Test + public void testWithWithoutDatabase() throws Exception { + String sql = "with tmp as (select count(*) from db1.table1) select * from tmp;"; + dorisAssert.withoutUseDatabase(); + dorisAssert.query(sql).explainQuery(); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/utframe/DorisAssert.java b/fe/fe-core/src/test/java/org/apache/doris/utframe/DorisAssert.java index 4ec7c03ee3fc47..d3d87804692310 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/utframe/DorisAssert.java +++ b/fe/fe-core/src/test/java/org/apache/doris/utframe/DorisAssert.java @@ -73,6 +73,11 @@ public DorisAssert useDatabase(String dbName) { return this; } + public DorisAssert withoutUseDatabase() { + ctx.setDatabase(""); + return this; + } + public DorisAssert withTable(String sql) throws Exception { CreateTableStmt createTableStmt = (CreateTableStmt) UtFrameUtils.parseAndAnalyzeStmt(sql, ctx); Catalog.getCurrentCatalog().createTable(createTableStmt);