englefly commented on code in PR #27378:
URL: https://github.com/apache/doris/pull/27378#discussion_r1406971747


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/EliminateLogicalSelectHint.java:
##########
@@ -15,61 +15,65 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.nereids.processor.pre;
+package org.apache.doris.nereids.rules.analysis;
 
 import org.apache.doris.analysis.SetVar;
 import org.apache.doris.analysis.StringLiteral;
+import org.apache.doris.common.DdlException;
+import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.StatementContext;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.hint.Hint;
 import org.apache.doris.nereids.hint.LeadingHint;
-import org.apache.doris.nereids.jobs.JobContext;
+import org.apache.doris.nereids.hint.OrderedHint;
 import org.apache.doris.nereids.properties.SelectHint;
 import org.apache.doris.nereids.properties.SelectHintLeading;
 import org.apache.doris.nereids.properties.SelectHintSetVar;
+import org.apache.doris.nereids.rules.Rule;
+import org.apache.doris.nereids.rules.RuleType;
+import org.apache.doris.nereids.rules.rewrite.OneRewriteRuleFactory;
 import org.apache.doris.nereids.trees.plans.Plan;
-import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalSelectHint;
-import org.apache.doris.nereids.trees.plans.visitor.CustomRewriter;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.SessionVariable;
 import org.apache.doris.qe.VariableMgr;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
- * eliminate set var hint, and set var to session variables.
+ * eliminate logical select hint and set then to cascade context

Review Comment:
   "then"->"them"



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/EliminateLogicalSelectHint.java:
##########
@@ -15,61 +15,65 @@
 // specific language governing permissions and limitations
 // under the License.
 
-package org.apache.doris.nereids.processor.pre;
+package org.apache.doris.nereids.rules.analysis;
 
 import org.apache.doris.analysis.SetVar;
 import org.apache.doris.analysis.StringLiteral;
+import org.apache.doris.common.DdlException;
+import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.StatementContext;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.hint.Hint;
 import org.apache.doris.nereids.hint.LeadingHint;
-import org.apache.doris.nereids.jobs.JobContext;
+import org.apache.doris.nereids.hint.OrderedHint;
 import org.apache.doris.nereids.properties.SelectHint;
 import org.apache.doris.nereids.properties.SelectHintLeading;
 import org.apache.doris.nereids.properties.SelectHintSetVar;
+import org.apache.doris.nereids.rules.Rule;
+import org.apache.doris.nereids.rules.RuleType;
+import org.apache.doris.nereids.rules.rewrite.OneRewriteRuleFactory;
 import org.apache.doris.nereids.trees.plans.Plan;
-import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalSelectHint;
-import org.apache.doris.nereids.trees.plans.visitor.CustomRewriter;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.SessionVariable;
 import org.apache.doris.qe.VariableMgr;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
- * eliminate set var hint, and set var to session variables.
+ * eliminate logical select hint and set then to cascade context
  */
-public class EliminateLogicalSelectHint extends PlanPreprocessor implements 
CustomRewriter {
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Override
-    public Plan rewriteRoot(Plan plan, JobContext jobContext) {
-        return plan.accept(this, 
jobContext.getCascadesContext().getStatementContext());
-    }
-
+public class EliminateLogicalSelectHint extends OneRewriteRuleFactory {
     @Override
-    public LogicalPlan visitLogicalSelectHint(
-            LogicalSelectHint<? extends Plan> selectHintPlan,
-            StatementContext context) {
-        for (Entry<String, SelectHint> hint : 
selectHintPlan.getHints().entrySet()) {
-            String hintName = hint.getKey();
-            if (hintName.equalsIgnoreCase("SET_VAR")) {
-                setVar((SelectHintSetVar) hint.getValue(), context);
-            } else if (hintName.equalsIgnoreCase("ORDERED")) {
-                
ConnectContext.get().getSessionVariable().setDisableJoinReorder(true);
-            } else if (hintName.equalsIgnoreCase("LEADING")) {
-                extractLeading((SelectHintLeading) hint.getValue(), context);
-            } else {
-                logger.warn("Can not process select hint '{}' and skip it", 
hint.getKey());
+    public Rule build() {
+        return logicalSelectHint().thenApply(ctx -> {
+            LogicalSelectHint<Plan> selectHintPlan = ctx.root;
+            for (Entry<String, SelectHint> hint : 
selectHintPlan.getHints().entrySet()) {
+                String hintName = hint.getKey();
+                if (hintName.equalsIgnoreCase("SET_VAR")) {
+                    setVar((SelectHintSetVar) hint.getValue(), 
ctx.statementContext);
+                } else if (hintName.equalsIgnoreCase("ORDERED")) {
+                    try {
+                        
ctx.cascadesContext.getConnectContext().getSessionVariable()
+                                .disableNereidsJoinReorderOnce();
+                    } catch (DdlException e) {
+                        throw new RuntimeException(e);
+                    }
+                    OrderedHint ordered = new OrderedHint("Ordered");
+                    ordered.setStatus(Hint.HintStatus.SUCCESS);
+                    ctx.cascadesContext.getHintMap().put("Ordered", ordered);
+                    ctx.statementContext.addHint(ordered);
+                } else if (hintName.equalsIgnoreCase("LEADING")) {
+                    extractLeading((SelectHintLeading) hint.getValue(), 
ctx.cascadesContext,
+                            ctx.statementContext, selectHintPlan.getHints());
+                } else {
+                    // logger.warn("Can not process select hint '{}' and skip 
it", hint.getKey());

Review Comment:
   it is better to  open this comments



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to