Commit fafefd0
fix(udf): log Python __eq__ exceptions instead of silently mapping to unequal
`PartialEq` on `PythonFunctionScalarUDF` / `PythonFunctionAggregateUDF` /
`PythonFunctionWindowUDF` used `unwrap_or(false)` when the underlying
Python `__eq__` raised. Two same-callable UDFs whose `__eq__` happened
to throw — e.g. a deliberately strict `__eq__` that runs validation —
would compare unequal silently, breaking expression dedup and cache
lookups without leaving any trace for an operator to investigate.
Rust's `PartialEq` cannot return `Result`, so `false` remains the
conservative choice (better to over-distinguish than wrongly merge),
but the exception is now logged at `log::debug` with the UDF's
registered name and the exception text. Mark each call site with a
`FIXME` pointing at the upstream `*UDFImpl` traits — when those expose
a fallible `PartialEq` we can drop the fallback and surface the error.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent f432d6b commit fafefd0
3 files changed
Lines changed: 47 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
243 | 243 | | |
244 | 244 | | |
245 | 245 | | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
246 | 251 | | |
247 | 252 | | |
248 | 253 | | |
249 | | - | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
250 | 262 | | |
251 | 263 | | |
252 | 264 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
116 | 136 | | |
117 | 137 | | |
118 | 138 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
329 | 329 | | |
330 | 330 | | |
331 | 331 | | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
332 | 337 | | |
333 | 338 | | |
334 | 339 | | |
335 | | - | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
336 | 348 | | |
337 | 349 | | |
338 | 350 | | |
| |||
0 commit comments