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 <zhangd...@selectdb.com>
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: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to