From 3e33f09a95ce82504ad2eb70743cb17730a101e6 Mon Sep 17 00:00:00 2001 From: starocean999 <40539150+starocean999@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:11:57 +0800 Subject: [PATCH] [fix](planner)fix bug of resolve column (#23649) pick from master #23512 --- .../org/apache/doris/analysis/Analyzer.java | 29 ++++++- .../test_inlineview_error_msg.groovy | 80 +++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 regression-test/suites/correctness_p0/test_inlineview_error_msg.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java index 11032bcb7d38d3..5f2b520118e64b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java @@ -899,7 +899,34 @@ public SlotDescriptor registerColumnRef(TableName tblName, String colName) throw // =================================================== // Someone may concern that if t2 is not alias of t, this fix will cause incorrect resolve. In fact, // this does not happen, since we push t2.a in (1.2) down to this inline view, t2 must be alias of t. - if (d == null && isInlineView && newTblName.getTbl().equals(explicitViewAlias)) { + // create table tmp_can_drop_t1 ( + // cust_id varchar(96), + // user_id varchar(96) + // ) + // create table tmp_can_drop_t2 ( + // cust_id varchar(96), + // usr_id varchar(96) + // ) + // select + // a.cust_id, + // a.usr_id + // from ( + // select + // a.cust_id, + // a.usr_id, --------->(report error, because there is no user_id column in tmp_can_drop_t1) + // a.user_id + // from tmp_can_drop_t1 a + // full join ( + // select + // cust_id, + // usr_id + // from + // tmp_can_drop_t2 + // ) b + // on b.cust_id = a.cust_id + // ) a; + if (d == null && isInlineView && newTblName.getTbl().equals(explicitViewAlias) + && !tupleByAlias.containsKey(newTblName.getTbl())) { d = resolveColumnRef(colName); } } diff --git a/regression-test/suites/correctness_p0/test_inlineview_error_msg.groovy b/regression-test/suites/correctness_p0/test_inlineview_error_msg.groovy new file mode 100644 index 00000000000000..7e739570e0e8cc --- /dev/null +++ b/regression-test/suites/correctness_p0/test_inlineview_error_msg.groovy @@ -0,0 +1,80 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_inlineview_error_msg") { + sql "set enable_nereids_planner=false" + sql """ + drop table if exists tmp_can_drop_t1; + """ + + sql """ + drop table if exists tmp_can_drop_t2; + """ + + sql """ + create table tmp_can_drop_t1 ( + cust_id varchar(96), + user_id varchar(96) + ) + DISTRIBUTED by random BUCKETS 1 + PROPERTIES( + "replication_num" = "1" + ); + """ + + sql """ + create table tmp_can_drop_t2 ( + cust_id varchar(96), + usr_id varchar(96) + ) + DISTRIBUTED by random BUCKETS 1 + PROPERTIES( + "replication_num" = "1" + ); + """ + test { + sql """ + select + a.cust_id, + a.usr_id + from ( + select + a.cust_id, + a.usr_id, + a.user_id + from tmp_can_drop_t1 a + full join ( + select + cust_id, + usr_id + from + tmp_can_drop_t2 + ) b + on b.cust_id = a.cust_id + ) a; + """ + exception "Unknown column 'usr_id' in 'a'" + } + + sql """ + drop table if exists tmp_can_drop_t1; + """ + + sql """ + drop table if exists tmp_can_drop_t2; + """ +} \ No newline at end of file