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 2024/01/23 06:12:22 UTC
(doris) 02/03: [fix](planner) row policy rewriter generate wrong plan on join table ref (#30233)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 9a8bcf2b1b878a8b0c996bf39b23b64a7bcff358
Author: morrySnow <10...@users.noreply.github.com>
AuthorDate: Tue Jan 23 13:59:04 2024 +0800
[fix](planner) row policy rewriter generate wrong plan on join table ref (#30233)
---
.../org/apache/doris/analysis/StmtRewriter.java | 12 ++++++-
.../suites/query_p0/test_row_policy.groovy | 42 ++++++++++++++++++++++
2 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java
index d80328683dd..1ac31c8fc63 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java
@@ -1338,7 +1338,17 @@ public class StmtRewriter {
null,
null,
LimitElement.NO_LIMIT);
- selectStmt.fromClause.set(i, new InlineViewRef(tableRef.getAliasAsName().getTbl(), stmt));
+ InlineViewRef inlineViewRef = new InlineViewRef(tableRef.getAliasAsName().getTbl(), stmt);
+ inlineViewRef.setJoinOp(tableRef.joinOp);
+ inlineViewRef.setLeftTblRef(tableRef.leftTblRef);
+ inlineViewRef.setOnClause(tableRef.onClause);
+ tableRef.joinOp = null;
+ tableRef.leftTblRef = null;
+ tableRef.onClause = null;
+ if (selectStmt.fromClause.size() > i + 1) {
+ selectStmt.fromClause.get(i + 1).setLeftTblRef(inlineViewRef);
+ }
+ selectStmt.fromClause.set(i, inlineViewRef);
selectStmt.analyze(analyzer);
reAnalyze = true;
}
diff --git a/regression-test/suites/query_p0/test_row_policy.groovy b/regression-test/suites/query_p0/test_row_policy.groovy
new file mode 100644
index 00000000000..5866d89d96e
--- /dev/null
+++ b/regression-test/suites/query_p0/test_row_policy.groovy
@@ -0,0 +1,42 @@
+// 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_row_policy") {
+ def dbName = context.config.getDbNameByFile(context.file)
+ def tableName = "t1"
+ def user = "test_row_policy"
+ def tokens = context.config.jdbcUrl.split('/')
+ def url=tokens[0] + "//" + tokens[2] + "/" + dbName + "?"
+ sql """DROP TABLE IF EXISTS ${tableName}"""
+ sql """CREATE TABLE ${tableName} (id INT) DISTRIBUTED BY HASH(id) PROPERTIES('replication_num'='1')"""
+ sql """DROP USER IF EXISTS ${user}"""
+ sql """CREATE USER ${user} IDENTIFIED BY '123456';"""
+ sql """GRANT SELECT_PRIV ON ${dbName} TO ${user}"""
+ sql """DROP ROW POLICY IF EXISTS policy_01 ON ${tableName} FOR ${user}"""
+ sql """CREATE ROW POLICY IF NOT EXISTS policy_01 ON ${tableName} AS restrictive TO ${user} USING(id=1)"""
+
+ connect(user=user, password='123456', url=url) {
+ sql "set enable_nereids_planner = false"
+ sql "SELECT * FROM ${tableName} a JOIN ${tableName} b ON a.id = b.id"
+ }
+
+ connect(user=user, password='123456', url=url) {
+ sql "set enable_nereids_planner = true"
+ sql "set enable_fallback_to_original_planner = false"
+ sql "SELECT * FROM ${tableName} a JOIN ${tableName} b ON a.id = b.id"
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org