This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new 0802af811ec branch-4.0: [fix](nereids)StatementContext must be created
before creating stream load plan #58494 (#58629)
0802af811ec is described below
commit 0802af811ec89c83c57d493c15ca01523be03f5d
Author: starocean999 <[email protected]>
AuthorDate: Wed Dec 3 10:15:52 2025 +0800
branch-4.0: [fix](nereids)StatementContext must be created before creating
stream load plan #58494 (#58629)
…
pick https://github.com/apache/doris/pull/58494
### What problem does this PR solve?
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
### Release note
None
### Check List (For Author)
- Test <!-- At least one of them must be included. -->
- [ ] Regression test
- [ ] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason <!-- Add your reason? -->
- Behavior changed:
- [ ] No.
- [ ] Yes. <!-- Explain the behavior change -->
- Does this need documentation?
- [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
https://github.com/apache/doris-website/pull/1214 -->
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
---
.../org/apache/doris/nereids/load/NereidsLoadUtils.java | 5 ++---
.../doris/nereids/load/NereidsLoadingTaskPlanner.java | 9 +++++++++
.../apache/doris/nereids/load/NereidsStreamLoadPlanner.java | 11 +++++++++++
.../org/apache/doris/planner/StreamLoadPlannerTest.java | 13 +++++++++++++
4 files changed, 35 insertions(+), 3 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadUtils.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadUtils.java
index bb4a480af98..96a728ac1f8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadUtils.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadUtils.java
@@ -24,7 +24,6 @@ import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.Table;
import org.apache.doris.common.UserException;
import org.apache.doris.nereids.CascadesContext;
-import org.apache.doris.nereids.StatementContext;
import org.apache.doris.nereids.analyzer.UnboundAlias;
import org.apache.doris.nereids.analyzer.UnboundOneRowRelation;
import org.apache.doris.nereids.analyzer.UnboundSlot;
@@ -199,8 +198,8 @@ public class NereidsLoadUtils {
partitionNames != null ? partitionNames.getPartitionNames() :
ImmutableList.of(), isPartialUpdate,
partialUpdateNewKeyPolicy, DMLCommandType.LOAD,
currentRootPlan);
- CascadesContext cascadesContext = CascadesContext.initContext(new
StatementContext(), currentRootPlan,
- PhysicalProperties.ANY);
+ CascadesContext cascadesContext =
CascadesContext.initContext(ConnectContext.get().getStatementContext(),
+ currentRootPlan, PhysicalProperties.ANY);
ConnectContext ctx = cascadesContext.getConnectContext();
// we force convert nullable column to non-nullable column for load
// so set feDebug to false to avoid AdjustNullableRule report error
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadingTaskPlanner.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadingTaskPlanner.java
index 877f58f5ec3..4998e22ca0f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadingTaskPlanner.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadingTaskPlanner.java
@@ -28,6 +28,7 @@ import org.apache.doris.catalog.Partition;
import org.apache.doris.common.LoadException;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.DebugUtil;
+import org.apache.doris.nereids.StatementContext;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.planner.DataPartition;
import org.apache.doris.planner.FileLoadScanNode;
@@ -146,6 +147,14 @@ public class NereidsLoadingTaskPlanner {
Preconditions.checkState(!fileGroups.isEmpty() && fileGroups.size() ==
fileStatusesList.size());
+ // make sure StatementContext is set in ConnectContext
+ ConnectContext connectContext = ConnectContext.get();
+ if (connectContext != null && connectContext.getStatementContext() ==
null) {
+ StatementContext statementContext = new StatementContext();
+ connectContext.setStatementContext(statementContext);
+ statementContext.setConnectContext(connectContext);
+ }
+
PartitionNames partitionNames = getPartitionNames();
long txnTimeout = timeoutS == 0 ?
ConnectContext.get().getExecTimeoutS() : timeoutS;
if (txnTimeout > Integer.MAX_VALUE) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsStreamLoadPlanner.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsStreamLoadPlanner.java
index ce77cf3a7de..676bd26f039 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsStreamLoadPlanner.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsStreamLoadPlanner.java
@@ -31,6 +31,7 @@ import org.apache.doris.common.DdlException;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.TimeUtils;
import org.apache.doris.load.loadv2.LoadTask;
+import org.apache.doris.nereids.StatementContext;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.planner.DataPartition;
import org.apache.doris.planner.FileLoadScanNode;
@@ -38,6 +39,7 @@ import org.apache.doris.planner.PlanFragment;
import org.apache.doris.planner.PlanFragmentId;
import org.apache.doris.planner.PlanNodeId;
import org.apache.doris.planner.ScanNode;
+import org.apache.doris.qe.ConnectContext;
import org.apache.doris.service.FrontendOptions;
import org.apache.doris.thrift.PaloInternalServiceVersion;
import org.apache.doris.thrift.TBrokerFileStatus;
@@ -217,6 +219,15 @@ public class NereidsStreamLoadPlanner {
throw new DdlException("Column is not SUM AggregateType.
column:" + col.getName());
}
}
+
+ // make sure StatementContext is set in ConnectContext
+ ConnectContext connectContext = ConnectContext.get();
+ if (connectContext != null && connectContext.getStatementContext() ==
null) {
+ StatementContext statementContext = new StatementContext();
+ connectContext.setStatementContext(statementContext);
+ statementContext.setConnectContext(connectContext);
+ }
+
// 1. create file group
NereidsDataDescription dataDescription = new
NereidsDataDescription(destTable.getName(), taskInfo);
dataDescription.analyzeWithoutCheckPriv(db.getFullName());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/planner/StreamLoadPlannerTest.java
b/fe/fe-core/src/test/java/org/apache/doris/planner/StreamLoadPlannerTest.java
index 7097f37724c..098e79b3511 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/planner/StreamLoadPlannerTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/planner/StreamLoadPlannerTest.java
@@ -17,8 +17,12 @@
package org.apache.doris.planner;
+import org.apache.doris.common.IdGenerator;
+import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.load.NereidsLoadUtils;
+import org.apache.doris.nereids.trees.expressions.ExprId;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
import org.junit.Assert;
import org.junit.Test;
@@ -32,4 +36,13 @@ public class StreamLoadPlannerTest {
List<Expression> expressions =
NereidsLoadUtils.parseExpressionSeq(sql);
Assert.assertEquals(4, expressions.size());
}
+
+ @Test
+ public void testExprIdGenerator() {
+ IdGenerator<ExprId> exprIdGenerator1 =
StatementScopeIdGenerator.getExprIdGenerator();
+ CascadesContext context = CascadesContext.initTempContext();
+ IdGenerator<ExprId> exprIdGenerator2 =
context.getStatementContext().getExprIdGenerator();
+ // we get different IdGenerator instance
+ Assert.assertTrue(exprIdGenerator1 != exprIdGenerator2);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]