)]}'
{
  "commit": "b22387f36c562812f331d279cb57e2a867e85a26",
  "tree": "e2b91e0b462d1577c49811ecc19cc514406e3989",
  "parents": [
    "e12532132f3d8130e65f0b04df409029783ec32e"
  ],
  "author": {
    "name": "Tim Saucer",
    "email": "timsaucer@gmail.com",
    "time": "Wed Sep 16 08:57:25 2026 -0400"
  },
  "committer": {
    "name": "Tim Saucer",
    "email": "timsaucer@gmail.com",
    "time": "Wed Sep 16 13:54:24 2026 -0400"
  },
  "message": "docs: note that installing a rule drops prepared statements\n\nInstalling a physical optimizer rule rebuilds the session state, and\n`SessionStateBuilder::build` starts the new state with an empty\nprepared-plan map, so a session that has run PREPARE reports the\nstatement missing afterwards. It hits every handle sharing the session,\nnot just the one a call returned.\n\nThere is no fix in this repo. `SessionState` exposes `physical_optimizers`\nread-only and only the builder can append to it, so the rebuild is the\nonly public path, and `prepared_plans` has no builder setter.\n\nThe canonical home for the claim is a new `extension_rule_rebuild`\nsection in the extension guide. `add_physical_optimizer_rule` and\n`with_extensions` each state it in one sentence and link there. The\nenumeration already on `add_physical_optimizer_rule` -- \"tables, UDFs,\nand catalogs are preserved\" -- was incomplete and now names the\nexception.\n\nThree smaller corrections alongside it:\n\n`test_with_extensions_declaring_no_rules_leaves_the_session_id` claimed\nto pin the id surviving the rebuild, but it declares no rules, so the\nrebuild is skipped and the assertion cannot reach that guarantee. Its\ndocstring now says it is the no-op control and names the FFI test that\ndoes cover the rebuild.\n\n`test_declared_rules_run_in_declaration_order` asserted\n`run_order() \u003d\u003d [0, 1]`, which ties the ordering claim to the optimizer\nrunning exactly once per query -- a count its sibling FFI test\ndeliberately avoids asserting. It now checks the first pass only.\n\n`PyPhysicalOptimizerRules` is `frozen`. Nothing mutates it between the\nresolve and commit steps, so it has no reason to carry a borrow flag.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f23e77467769417a5bb452b1a0f1068cdbe3c838",
      "old_mode": 33188,
      "old_path": "crates/core/src/context.rs",
      "new_id": "7775a4a94673e6ae8c134590ae061e61ba0e6681",
      "new_mode": 33188,
      "new_path": "crates/core/src/context.rs"
    },
    {
      "type": "modify",
      "old_id": "83b770d56fcbc35ad3da8fe182a44fda17cdc184",
      "old_mode": 33188,
      "old_path": "docs/source/extension-guide/other-components.md",
      "new_id": "fe48682a6be3630e9e3d85ac5b13e8b95ae7bb67",
      "new_mode": 33188,
      "new_path": "docs/source/extension-guide/other-components.md"
    },
    {
      "type": "modify",
      "old_id": "57ef722daf852488a2afc42832505889a5002d80",
      "old_mode": 33188,
      "old_path": "examples/datafusion-ffi-example/python/tests/_test_session_extension.py",
      "new_id": "6d5a03bf00e79d576a3c699112ef5cdb03dc8d0e",
      "new_mode": 33188,
      "new_path": "examples/datafusion-ffi-example/python/tests/_test_session_extension.py"
    },
    {
      "type": "modify",
      "old_id": "683c86660e468ab71f5f8bbd3e61779faa1444c2",
      "old_mode": 33188,
      "old_path": "python/datafusion/context.py",
      "new_id": "b6f2d69b9ecc2297627a6d8eeb9559cce34e7bcb",
      "new_mode": 33188,
      "new_path": "python/datafusion/context.py"
    },
    {
      "type": "modify",
      "old_id": "96a71222a77de0f20b43a08b1269d9edd9289c02",
      "old_mode": 33188,
      "old_path": "python/tests/test_context.py",
      "new_id": "83fea70a05385c48794569ffea70b21b43406e3d",
      "new_mode": 33188,
      "new_path": "python/tests/test_context.py"
    }
  ]
}
