This is an automated email from the ASF dual-hosted git repository.
morrysnow 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 3970183fec3 [clean](planner) row policy removes dependency on the old
optimizer (#51122)
3970183fec3 is described below
commit 3970183fec3d002c6dd429af5265b40d7779e19c
Author: zhangdong <[email protected]>
AuthorDate: Thu May 22 19:23:21 2025 +0800
[clean](planner) row policy removes dependency on the old optimizer (#51122)
- Change "Expr" to "Expression" in RowPolicy
- Remove the logic of rewriting using row policy in the old optimizer
- Remove the logic for creating row policies based on CreatePolicyStmt
---
fe/fe-core/src/main/cup/sql_parser.cup | 16 --
.../apache/doris/analysis/CreatePolicyStmt.java | 161 ---------------------
.../org/apache/doris/analysis/StmtRewriter.java | 67 +--------
.../trees/plans/commands/CreatePolicyCommand.java | 2 +-
.../main/java/org/apache/doris/policy/Policy.java | 28 ----
.../java/org/apache/doris/policy/PolicyMgr.java | 55 -------
.../java/org/apache/doris/policy/RowPolicy.java | 41 ++----
.../main/java/org/apache/doris/qe/DdlExecutor.java | 3 -
.../java/org/apache/doris/alter/AlterTest.java | 9 +-
.../java/org/apache/doris/policy/PolicyTest.java | 4 +-
.../apache/doris/utframe/TestWithFeService.java | 7 +-
11 files changed, 31 insertions(+), 362 deletions(-)
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup
b/fe/fe-core/src/main/cup/sql_parser.cup
index 8abddccf7d3..e72a6d66d15 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -2051,22 +2051,6 @@ create_stmt ::=
{:
RESULT = new CreateSqlBlockRuleStmt(ifNotExists, ruleName, properties);
:}
- /* row policy */
- | KW_CREATE KW_ROW KW_POLICY opt_if_not_exists:ifNotExists
ident:policyName KW_ON table_name:tbl KW_AS ident:filterType KW_TO
user_identity:user
- KW_USING LPAREN expr:wherePredicate RPAREN
- {:
- RESULT = new CreatePolicyStmt(PolicyTypeEnum.ROW, ifNotExists,
policyName, tbl, filterType, user, null, wherePredicate);
- :}
- | KW_CREATE KW_ROW KW_POLICY opt_if_not_exists:ifNotExists
ident:policyName KW_ON table_name:tbl KW_AS ident:filterType KW_TO KW_ROLE
ident:role
- KW_USING LPAREN expr:wherePredicate RPAREN
- {:
- RESULT = new CreatePolicyStmt(PolicyTypeEnum.ROW, ifNotExists,
policyName, tbl, filterType, null, role, wherePredicate);
- :}
- /* storage policy */
- | KW_CREATE KW_STORAGE KW_POLICY opt_if_not_exists:ifNotExists
ident:policyName opt_properties:properties
- {:
- RESULT = new CreatePolicyStmt(PolicyTypeEnum.STORAGE, ifNotExists,
policyName, properties);
- :}
| KW_BUILD KW_INDEX ident:indexName KW_ON table_name:tableName
opt_partition_names:partitionNames
{:
RESULT = new AlterTableStmt(tableName, Lists.newArrayList(new
BuildIndexClause(tableName, indexName, partitionNames, false)));
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
deleted file mode 100644
index 9905fd03ee1..00000000000
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
+++ /dev/null
@@ -1,161 +0,0 @@
-// 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.
-
-package org.apache.doris.analysis;
-
-import org.apache.doris.catalog.Env;
-import org.apache.doris.common.Config;
-import org.apache.doris.common.ErrorCode;
-import org.apache.doris.common.ErrorReport;
-import org.apache.doris.common.UserException;
-import org.apache.doris.common.util.PrintableMap;
-import org.apache.doris.mysql.privilege.PrivPredicate;
-import org.apache.doris.policy.FilterType;
-import org.apache.doris.policy.PolicyTypeEnum;
-import org.apache.doris.qe.ConnectContext;
-
-import lombok.Getter;
-
-import java.util.Map;
-
-/**
- * Create policy statement.
- * syntax:
- * CREATE ROW POLICY [IF NOT EXISTS] test_row_policy ON test_table AS
{PERMISSIVE|RESTRICTIVE} TO user USING (a = ’xxx‘)
- */
-public class CreatePolicyStmt extends DdlStmt implements NotFallbackInParser {
-
- @Getter
- private final PolicyTypeEnum type;
-
- @Getter
- private final boolean ifNotExists;
-
- @Getter
- private final String policyName;
-
- @Getter
- private TableName tableName = null;
-
- @Getter
- private FilterType filterType = null;
-
- @Getter
- private UserIdentity user = null;
-
- @Getter
- private String roleName = null;
-
- @Getter
- private Expr wherePredicate;
-
- @Getter
- private Map<String, String> properties;
-
- /**
- * Use for cup.
- **/
- public CreatePolicyStmt(PolicyTypeEnum type, boolean ifNotExists, String
policyName, TableName tableName,
- String filterType, UserIdentity user, String roleName, Expr
wherePredicate) {
- this.type = type;
- this.ifNotExists = ifNotExists;
- this.policyName = policyName;
- this.tableName = tableName;
- this.filterType = FilterType.of(filterType);
- this.user = user;
- this.roleName = roleName;
- this.wherePredicate = wherePredicate;
- }
-
- /**
- * Use for cup.
- */
- public CreatePolicyStmt(PolicyTypeEnum type, boolean ifNotExists, String
policyName,
- Map<String, String> properties) {
- this.type = type;
- this.ifNotExists = ifNotExists;
- this.policyName = policyName;
- this.properties = properties;
- }
-
- @Override
- public void analyze(Analyzer analyzer) throws UserException {
- super.analyze(analyzer);
- switch (type) {
- case STORAGE:
- if (!Config.enable_storage_policy) {
- throw new UserException("storage policy feature is
disabled by default. "
- + "Enable it by setting
'enable_storage_policy=true' in fe.conf");
- }
- // check auth
- // check if can create policy and use storage_resource
- if (!Env.getCurrentEnv().getAccessManager()
- .checkGlobalPriv(ConnectContext.get(),
PrivPredicate.ADMIN)) {
-
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR,
- PrivPredicate.ADMIN.getPrivs().toString());
- }
- break;
- case ROW:
- default:
- tableName.analyze(analyzer);
- if (user != null) {
- user.analyze();
- if (user.isRootUser() || user.isAdminUser()) {
-
ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR,
"CreatePolicyStmt",
- user.getQualifiedUser(), user.getHost(),
tableName.getTbl());
- }
- }
- // check auth
- if (!Env.getCurrentEnv().getAccessManager()
- .checkGlobalPriv(ConnectContext.get(),
PrivPredicate.GRANT)) {
-
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR,
- PrivPredicate.GRANT.getPrivs().toString());
- }
- }
- }
-
- @Override
- public String toSql() {
- StringBuilder sb = new StringBuilder();
- sb.append("CREATE ").append(type).append(" POLICY ");
- if (ifNotExists) {
- sb.append("IF NOT EXISTS");
- }
- sb.append(policyName);
- switch (type) {
- case STORAGE:
- sb.append(" PROPERTIES(").append(new
PrintableMap<>(properties, " = ", true, false)).append(")");
- break;
- case ROW:
- default:
- sb.append(" ON ").append(tableName.toSql()).append(" AS
").append(filterType)
- .append(" TO ");
- if (user == null) {
- sb.append("ROLE ").append(roleName);
- } else {
- sb.append(user.getQualifiedUser());
- }
- sb.append(" USING ").append(wherePredicate.toSql());
- }
- return sb.toString();
- }
-
- @Override
- public StmtType stmtType() {
- return StmtType.CREATE;
- }
-}
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 8fcd54b4a1d..b363140df06 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
@@ -24,7 +24,6 @@ import org.apache.doris.catalog.AggStateType;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.DistributionInfo;
-import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.OlapTable;
@@ -34,7 +33,6 @@ import org.apache.doris.catalog.Type;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.TableAliasGenerator;
import org.apache.doris.common.UserException;
-import org.apache.doris.policy.RowPolicy;
import org.apache.doris.qe.ConnectContext;
import com.google.common.base.Preconditions;
@@ -1309,69 +1307,8 @@ public class StmtRewriter {
}
public static boolean rewriteByPolicy(StatementBase statementBase,
Analyzer analyzer) throws UserException {
- Env currentEnv = Env.getCurrentEnv();
- UserIdentity currentUserIdentity =
ConnectContext.get().getCurrentUserIdentity();
- if (currentUserIdentity.isRootUser() ||
currentUserIdentity.isAdminUser()) {
- return false;
- }
-
- if (!(statementBase instanceof SelectStmt)) {
- return false;
- }
- SelectStmt selectStmt = (SelectStmt) statementBase;
- boolean reAnalyze = false;
- for (int i = 0; i < selectStmt.fromClause.size(); i++) {
- TableRef tableRef = selectStmt.fromClause.get(i);
- // Recursively rewrite subquery
- if (tableRef instanceof InlineViewRef) {
- InlineViewRef viewRef = (InlineViewRef) tableRef;
- if (rewriteByPolicy(viewRef.getQueryStmt(), analyzer)) {
- reAnalyze = true;
- }
- continue;
- }
- if (!(tableRef instanceof BaseTableRef)) {
- continue;
- }
- String tableName = tableRef.getName().getTbl();
- String dbName = tableRef.getName().getDb();
- if (dbName == null) {
- dbName = analyzer.getDefaultDb();
- }
- String ctlName = tableRef.getName().getCtl();
- if (ctlName == null) {
- ctlName = analyzer.getDefaultCatalog();
- }
- RowPolicy matchPolicy = currentEnv.getPolicyMgr()
- .getMatchTablePolicy(ctlName, dbName, tableName,
currentUserIdentity);
- if (matchPolicy == null) {
- continue;
- }
- SelectList selectList = new SelectList();
-
selectList.addItem(SelectListItem.createStarItem(tableRef.getAliasAsName()));
-
- SelectStmt stmt = new SelectStmt(selectList,
- new FromClause(Lists.newArrayList(tableRef)),
- matchPolicy.getWherePredicate().clone(),
- null,
- null,
- null,
- LimitElement.NO_LIMIT);
- 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;
- }
- return reAnalyze;
+ // old planner no use
+ return false;
}
/**
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreatePolicyCommand.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreatePolicyCommand.java
index 4984855e0c5..22b511e6bf9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreatePolicyCommand.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreatePolicyCommand.java
@@ -152,7 +152,7 @@ public class CreatePolicyCommand extends Command implements
ForwardWithSync {
return new RowPolicy(policyId, policyName,
tableNameInfo.getCtl(),
tableNameInfo.getDb(), tableNameInfo.getTbl(), user,
roleName,
executor.getOriginStmt().originStmt,
executor.getOriginStmt().idx, filterType.get(),
- translateToLegacyExpr(wherePredicate.get(), ctx));
+ wherePredicate.get());
default:
throw new AnalysisException("Unknown policy type: " +
policyType);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java
b/fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java
index 01c5399d4ab..35057e0cd53 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java
@@ -17,9 +17,6 @@
package org.apache.doris.policy;
-import org.apache.doris.analysis.CreatePolicyStmt;
-import org.apache.doris.analysis.UserIdentity;
-import org.apache.doris.catalog.Env;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.io.Text;
@@ -99,31 +96,6 @@ public abstract class Policy implements Writable,
GsonPostProcessable {
this.version = 0;
}
- /**
- * Trans stmt to Policy.
- **/
- public static Policy fromCreateStmt(CreatePolicyStmt stmt) throws
AnalysisException {
- long policyId = Env.getCurrentEnv().getNextId();
- switch (stmt.getType()) {
- case STORAGE:
- StoragePolicy storagePolicy = new StoragePolicy(policyId,
stmt.getPolicyName());
- storagePolicy.init(stmt.getProperties(), stmt.isIfNotExists());
- return storagePolicy;
- case ROW:
- // stmt must be analyzed.
- UserIdentity userIdent = stmt.getUser();
- if (userIdent != null) {
- userIdent.analyze();
- }
- return new RowPolicy(policyId, stmt.getPolicyName(),
stmt.getTableName().getCtl(),
- stmt.getTableName().getDb(),
stmt.getTableName().getTbl(), userIdent, stmt.getRoleName(),
- stmt.getOrigStmt().originStmt, stmt.getOrigStmt().idx,
stmt.getFilterType(),
- stmt.getWherePredicate());
- default:
- throw new AnalysisException("Unknown policy type: " +
stmt.getType());
- }
- }
-
public void modifyProperties(Map<String, String> properties) throws
DdlException, AnalysisException {
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java
b/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java
index 2a2b1aabe0a..6c90ecd3b3c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java
@@ -18,8 +18,6 @@
package org.apache.doris.policy;
import org.apache.doris.analysis.AlterPolicyStmt;
-import org.apache.doris.analysis.CompoundPredicate;
-import org.apache.doris.analysis.CreatePolicyStmt;
import org.apache.doris.analysis.DropPolicyStmt;
import org.apache.doris.analysis.ShowPolicyStmt;
import org.apache.doris.analysis.ShowStoragePolicyUsingStmt;
@@ -47,7 +45,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.annotations.SerializedName;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -117,13 +114,6 @@ public class PolicyMgr implements Writable {
LOG.info("Create default storage success.");
}
- /**
- * Create policy through stmt.
- **/
- public void createPolicy(CreatePolicyStmt stmt) throws UserException {
- createPolicy(Policy.fromCreateStmt(stmt), stmt.isIfNotExists());
- }
-
public void createPolicy(Policy policy, boolean isIfNotExists) throws
UserException {
writeLock();
try {
@@ -376,17 +366,6 @@ public class PolicyMgr implements Writable {
typeToPolicyMap.put(log.getType(), policies);
}
- /**
- * Match row policy and return it.
- **/
- public RowPolicy getMatchTablePolicy(String ctlName, String dbName, String
tableName, UserIdentity user) {
- List<RowPolicy> res = getUserPolicies(ctlName, dbName, tableName,
user);
- if (CollectionUtils.isEmpty(res)) {
- return null;
- }
- return mergeRowPolicies(res);
- }
-
public List<RowPolicy> getUserPolicies(String ctlName, String dbName,
String tableName, UserIdentity user) {
List<RowPolicy> res = Lists.newArrayList();
// Make a judgment in advance to reduce the number of times to obtain
getRoles
@@ -418,40 +397,6 @@ public class PolicyMgr implements Writable {
}
}
- private RowPolicy mergeRowPolicies(List<RowPolicy> policys) {
- if (CollectionUtils.isEmpty(policys)) {
- return null;
- }
- RowPolicy andPolicy = null;
- RowPolicy orPolicy = null;
- for (RowPolicy rowPolicy : policys) {
- if
(CompoundPredicate.Operator.AND.equals(rowPolicy.getFilterType().getOp())) {
- if (andPolicy == null) {
- andPolicy = rowPolicy.clone();
- } else {
- andPolicy.setWherePredicate(new
CompoundPredicate(CompoundPredicate.Operator.AND,
- andPolicy.getWherePredicate(),
rowPolicy.getWherePredicate()));
- }
- } else {
- if (orPolicy == null) {
- orPolicy = rowPolicy;
- } else {
- orPolicy.setWherePredicate(new
CompoundPredicate(CompoundPredicate.Operator.OR,
- orPolicy.getWherePredicate(),
rowPolicy.getWherePredicate()));
- }
- }
- }
- if (andPolicy == null) {
- return orPolicy;
- }
- if (orPolicy == null) {
- return andPolicy;
- }
- andPolicy.setWherePredicate(new
CompoundPredicate(CompoundPredicate.Operator.AND, andPolicy.getWherePredicate(),
- orPolicy.getWherePredicate()));
- return andPolicy;
- }
-
private ShowResultSet getShowPolicy(Policy finalCheckedPolicy,
PolicyTypeEnum type) throws AnalysisException {
List<List<String>> rows = Lists.newArrayList();
readLock();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/policy/RowPolicy.java
b/fe/fe-core/src/main/java/org/apache/doris/policy/RowPolicy.java
index 2b8a492e82c..e83a1191c0b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/policy/RowPolicy.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/policy/RowPolicy.java
@@ -17,15 +17,10 @@
package org.apache.doris.policy;
-import org.apache.doris.analysis.CreatePolicyStmt;
-import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.SqlParser;
-import org.apache.doris.analysis.SqlScanner;
import org.apache.doris.analysis.UserIdentity;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.util.SqlParserUtils;
import org.apache.doris.mysql.privilege.RowFilterPolicy;
import org.apache.doris.nereids.parser.NereidsParser;
import org.apache.doris.nereids.trees.expressions.Expression;
@@ -40,7 +35,6 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
-import java.io.StringReader;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -105,7 +99,7 @@ public class RowPolicy extends Policy implements
RowFilterPolicy {
@SerializedName(value = "stmtIdx")
private int stmtIdx;
- private Expr wherePredicate = null;
+ private Expression wherePredicate = null;
public RowPolicy() {
super(PolicyTypeEnum.ROW);
@@ -126,7 +120,7 @@ public class RowPolicy extends Policy implements
RowFilterPolicy {
*/
public RowPolicy(long policyId, final String policyName, long dbId,
UserIdentity user, String roleName,
String originStmt, int stmtIdx,
- final long tableId, final FilterType filterType, final Expr
wherePredicate) {
+ final long tableId, final FilterType filterType, final Expression
wherePredicate) {
super(policyId, PolicyTypeEnum.ROW, policyName);
this.user = user;
this.roleName = roleName;
@@ -140,7 +134,7 @@ public class RowPolicy extends Policy implements
RowFilterPolicy {
public RowPolicy(long policyId, final String policyName, String ctlName,
String dbName, String tableName,
UserIdentity user, String roleName,
- String originStmt, int stmtIdx, final FilterType filterType, final
Expr wherePredicate) {
+ String originStmt, int stmtIdx, final FilterType filterType, final
Expression wherePredicate) {
super(policyId, PolicyTypeEnum.ROW, policyName);
this.user = user;
this.roleName = roleName;
@@ -164,14 +158,19 @@ public class RowPolicy extends Policy implements
RowFilterPolicy {
@Override
public void gsonPostProcess() throws IOException {
- if (wherePredicate != null) {
+ if (this.wherePredicate != null) {
return;
}
try {
- SqlScanner input = new SqlScanner(new StringReader(originStmt),
0L);
- SqlParser parser = new SqlParser(input);
- CreatePolicyStmt stmt = (CreatePolicyStmt)
SqlParserUtils.getStmt(parser, stmtIdx);
- wherePredicate = stmt.getWherePredicate();
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = getOriginStmt();
+ CreatePolicyCommand command = (CreatePolicyCommand)
nereidsParser.parseSingle(sql);
+ Optional<Expression> wherePredicate = command.getWherePredicate();
+ if (!wherePredicate.isPresent()) {
+ LOG.warn("Invalid row policy [" + getPolicyIdent() + "], " +
sql);
+ return;
+ }
+ this.wherePredicate = wherePredicate.get();
} catch (Exception e) {
String errorMsg = String.format("table policy parse originStmt
error, originStmt: %s, stmtIdx: %s.",
originStmt, stmtIdx);
@@ -224,18 +223,10 @@ public class RowPolicy extends Policy implements
RowFilterPolicy {
@Override
public Expression getFilterExpression() throws AnalysisException {
- NereidsParser nereidsParser = new NereidsParser();
- String sql = getOriginStmt();
- if (getStmtIdx() != 0) {
- // Under normal circumstances, the index will only be equal to 0
- throw new AnalysisException("Invalid row policy [" +
getPolicyIdent() + "], " + sql);
+ if (wherePredicate == null) {
+ throw new AnalysisException("Invalid row policy [" +
getPolicyIdent() + "], " + getOriginStmt());
}
- CreatePolicyCommand command = (CreatePolicyCommand)
nereidsParser.parseSingle(sql);
- Optional<Expression> wherePredicate = command.getWherePredicate();
- if (!wherePredicate.isPresent()) {
- throw new AnalysisException("Invalid row policy [" +
getPolicyIdent() + "], " + sql);
- }
- return wherePredicate.get();
+ return wherePredicate;
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
index 6d3475dbebe..a43e6949efb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
@@ -70,7 +70,6 @@ import org.apache.doris.analysis.CreateFileStmt;
import org.apache.doris.analysis.CreateFunctionStmt;
import org.apache.doris.analysis.CreateJobStmt;
import org.apache.doris.analysis.CreateMaterializedViewStmt;
-import org.apache.doris.analysis.CreatePolicyStmt;
import org.apache.doris.analysis.CreateRepositoryStmt;
import org.apache.doris.analysis.CreateResourceStmt;
import org.apache.doris.analysis.CreateRoleStmt;
@@ -372,8 +371,6 @@ public class DdlExecutor {
env.getColocateTableIndex().alterColocateGroup((AlterColocateGroupStmt)
ddlStmt);
} else if (ddlStmt instanceof AlterWorkloadGroupStmt) {
env.getWorkloadGroupMgr().alterWorkloadGroup((AlterWorkloadGroupStmt) ddlStmt);
- } else if (ddlStmt instanceof CreatePolicyStmt) {
- env.getPolicyMgr().createPolicy((CreatePolicyStmt) ddlStmt);
} else if (ddlStmt instanceof DropPolicyStmt) {
env.getPolicyMgr().dropPolicy((DropPolicyStmt) ddlStmt);
} else if (ddlStmt instanceof AlterPolicyStmt) {
diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
index 054c625e895..255ba0bdd37 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
@@ -21,7 +21,6 @@ import org.apache.doris.analysis.AlterColocateGroupStmt;
import org.apache.doris.analysis.AlterTableStmt;
import org.apache.doris.analysis.CreateDbStmt;
import org.apache.doris.analysis.CreateMaterializedViewStmt;
-import org.apache.doris.analysis.CreatePolicyStmt;
import org.apache.doris.analysis.CreateResourceStmt;
import org.apache.doris.analysis.CreateTableStmt;
import org.apache.doris.analysis.DateLiteral;
@@ -49,9 +48,12 @@ import org.apache.doris.common.DdlException;
import org.apache.doris.common.ExceptionChecker;
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.util.TimeUtils;
+import org.apache.doris.nereids.parser.NereidsParser;
+import org.apache.doris.nereids.trees.plans.commands.CreatePolicyCommand;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.DdlExecutor;
import org.apache.doris.qe.ShowExecutor;
+import org.apache.doris.qe.StmtExecutor;
import org.apache.doris.resource.Tag;
import org.apache.doris.system.Backend;
import org.apache.doris.thrift.TStorageMedium;
@@ -265,8 +267,9 @@ public class AlterTest {
}
private static void createRemoteStoragePolicy(String sql) throws Exception
{
- CreatePolicyStmt stmt = (CreatePolicyStmt)
UtFrameUtils.parseAndAnalyzeStmt(sql, connectContext);
- Env.getCurrentEnv().getPolicyMgr().createPolicy(stmt);
+ NereidsParser nereidsParser = new NereidsParser();
+ CreatePolicyCommand command = (CreatePolicyCommand)
nereidsParser.parseSingle(sql);
+ command.run(connectContext, new StmtExecutor(connectContext, sql));
}
private static void alterTable(String sql, boolean expectedException) {
diff --git a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
index 7d48be4da9e..dc51c7e871e 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java
@@ -20,7 +20,6 @@ package org.apache.doris.policy;
import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.CreateRoleStmt;
import org.apache.doris.analysis.CreateUserStmt;
-import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.GrantStmt;
import org.apache.doris.analysis.ShowPolicyStmt;
import org.apache.doris.analysis.TablePattern;
@@ -34,6 +33,7 @@ import org.apache.doris.common.Config;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.ExceptionChecker;
import org.apache.doris.common.FeConstants;
+import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.persist.gson.GsonUtils;
import org.apache.doris.utframe.TestWithFeService;
@@ -248,7 +248,7 @@ public class PolicyTest extends TestWithFeService {
+ " AS PERMISSIVE TO test_policy USING (k1 = 1)";
long tableId = 100;
FilterType filterType = FilterType.PERMISSIVE;
- Expr wherePredicate = null;
+ Expression wherePredicate = null;
Policy rowPolicy = new RowPolicy(10000, policyName, dbId, user, null,
originStmt, 0, tableId, filterType,
wherePredicate);
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
index 7c629e5ab91..81e4572b065 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
@@ -25,7 +25,6 @@ import org.apache.doris.analysis.CreateCatalogStmt;
import org.apache.doris.analysis.CreateDbStmt;
import org.apache.doris.analysis.CreateFunctionStmt;
import org.apache.doris.analysis.CreateMaterializedViewStmt;
-import org.apache.doris.analysis.CreatePolicyStmt;
import org.apache.doris.analysis.CreateSqlBlockRuleStmt;
import org.apache.doris.analysis.CreateTableAsSelectStmt;
import org.apache.doris.analysis.CreateTableStmt;
@@ -68,6 +67,7 @@ import
org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
import org.apache.doris.nereids.trees.plans.commands.AddConstraintCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.CreateMTMVCommand;
+import org.apache.doris.nereids.trees.plans.commands.CreatePolicyCommand;
import org.apache.doris.nereids.trees.plans.commands.CreateTableCommand;
import org.apache.doris.nereids.trees.plans.commands.DropConstraintCommand;
import org.apache.doris.nereids.trees.plans.commands.DropMTMVCommand;
@@ -762,8 +762,9 @@ public abstract class TestWithFeService {
}
protected void createPolicy(String sql) throws Exception {
- CreatePolicyStmt createPolicyStmt = (CreatePolicyStmt)
parseAndAnalyzeStmt(sql);
- Env.getCurrentEnv().getPolicyMgr().createPolicy(createPolicyStmt);
+ NereidsParser nereidsParser = new NereidsParser();
+ CreatePolicyCommand command = (CreatePolicyCommand)
nereidsParser.parseSingle(sql);
+ command.run(connectContext, new StmtExecutor(connectContext, sql));
}
public void createFunction(String sql) throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]