# step_walk_with_row

> **Function** in `langgraph.checkpoint.sqlite`

📖 [View in docs](https://reference.langchain.com/python/langgraph.checkpoint.sqlite/_delta/step_walk_with_row)

Process one streamed stage-1 row in the merged ancestor walk.

The cursor returns (cid, parent_cid, type, blob) rows in
`checkpoint_id` DESC order starting at target. The first row is
target itself; we read its parent_cid to seed the walk and otherwise
skip it (target's own writes/seed are not part of the contract).

For each subsequent row, if `cid` matches the walk's current
position, we deserialize the blob, append the cid to every
not-yet-seeded channel's chain, and check `channel_values` for
seeds. The deserialized checkpoint is dropped before advancing — no
cross-row cache, so peak in-flight is one deserialized checkpoint.

Off-path rows (different branch on the same thread) advance the
cursor without doing any work.

Returns True when every requested channel is seeded — the caller
can stop iterating and close the cursor.

## Signature

```python
step_walk_with_row(
    *,
    cid: str,
    parent_cid: str | None,
    type_tag: str,
    blob: bytes,
    target_id: str,
    serde: Any,
    chain_by_ch: dict[str, list[str]],
    seed_val_by_ch: dict[str, Any],
    walk_state: dict[str, Any],
    seeded: set[str],
    channels: Sequence[str],
) -> bool
```

---

[View source on GitHub](https://github.com/langchain-ai/langgraph/blob/97320843fe78b93bd5290ce366841ff9850bf379/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/_delta.py#L68)