diff --git a/axiom/optimizer/tests/PlanMatcher.cpp b/axiom/optimizer/tests/PlanMatcher.cpp index 6dc18f95f..faede7e07 100644 --- a/axiom/optimizer/tests/PlanMatcher.cpp +++ b/axiom/optimizer/tests/PlanMatcher.cpp @@ -383,11 +383,13 @@ class FixedPointMatcher : public PlanMatcherImpl { } if (const auto& convergence = match_->convergencePlan()) { - EXPECT_NE(plan.convergenceConfig().plan, nullptr); + EXPECT_EQ(plan.convergenceConfig().plans.size(), 1); AXIOM_TEST_RETURN_IF_FAILURE if (!convergence ->match( - plan.convergenceConfig().plan, symbols, /*context=*/nullptr) + plan.convergenceConfig().plans.front(), + symbols, + /*context=*/nullptr) .match) { return MatchResult::failure(); } diff --git a/axiom/optimizer/v2/docs/FixedPoint.md b/axiom/optimizer/v2/docs/FixedPoint.md index cd76e1694..47fd40e79 100644 --- a/axiom/optimizer/v2/docs/FixedPoint.md +++ b/axiom/optimizer/v2/docs/FixedPoint.md @@ -140,7 +140,7 @@ iterations and is seeded from the anchor. | --- | --- | --- | | `RecursiveReferenceNode[counter]` | `WorkingTable[counter, latestDelta]` | `StateSourceNode(counter, delta=true)` | | anchor branch | anchor branch | `VectorStateDeclaration(counter, append=true)` | -| — (synthesized in Translate) | `convergence:` `Aggregate count()` -> `Project eq(count, 0)` | `ConvergenceConfig.plan`: `AggregationNode(count)` -> `ProjectNode(count == 0)` | +| — (synthesized in Translate) | `convergence:` `Aggregate count()` -> `Project eq(count, 0)` | `ConvergenceConfig.plans`: `AggregationNode(count)` -> `ProjectNode(count == 0)` | `WorkingTableReadMode` also has an `kAccumulated` mode, which emits `delta=false` — a read of the whole state rather than the last iteration's