Commit 2f241be
perf(udf): pointer-identity fast path in PartialEq for Python UDFs
`PartialEq` was acquiring the GIL on every comparison via
`Python::attach`, just to call `__eq__` on the stored callable. Most
equality checks compare `Arc`-shared clones of the same UDF
(expression rewriting, plan diffing), where pointer identity already
settles the question — no Python call needed.
Add `Py::as_ptr` pointer comparison before the `Python::attach` branch
on all three impls (scalar / aggregate / window). Falls through to the
GIL-bound `__eq__` only when the two callables are distinct objects.
No behavior change for unequal-pointer cases; the equal-pointer case
now skips the GIL roundtrip entirely.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent cea9254 commit 2f241be
3 files changed
Lines changed: 28 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | | - | |
242 | | - | |
243 | | - | |
244 | | - | |
245 | | - | |
246 | | - | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
247 | 251 | | |
248 | 252 | | |
249 | 253 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
106 | 106 | | |
107 | 107 | | |
108 | 108 | | |
109 | | - | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
110 | 117 | | |
111 | 118 | | |
112 | 119 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
319 | 319 | | |
320 | 320 | | |
321 | 321 | | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
328 | 332 | | |
329 | 333 | | |
330 | 334 | | |
| |||
0 commit comments