Commit 9746f3f
committed
perf: clip the row-filter read plan to the retained cast target
`check_cast_struct_field_access` pushed the struct root into
`required_columns`, so a retained Struct cast decoded every leaf of that
root — even though `retain_field_path` had already pruned the cast target
down to the selected path, leaving a cast that consumes a single leaf.
Record a `CastColumnAccess` instead and route `build_parquet_read_plan`
through `build_read_plan_with_cast_clipping`, which the projection path
already uses for this expression shape. Clipping follows the *cast
target*, not the `get_field` key, so an explicit query cast — whose
target names every field the user asked to convert — keeps its siblings
in the read and still evaluates their conversions. A target that covers
every leaf, or that cannot be clipped safely, falls back to a full read
of that root inside the helper.
`build_read_plan_with_cast_clipping` now returns its leaf indices, sorted
and deduplicated, so `size_of_columns` cannot double-count a repeat.
Also adds SQL-level coverage for the all-null Struct decimal behavior,
and records the one shape the container-unwrapping carve-out leaves open.1 parent e79e912 commit 9746f3f
4 files changed
Lines changed: 180 additions & 31 deletions
File tree
- datafusion
- datasource-parquet/src
- physical-expr-adapter/src
- sqllogictest/test_files
Lines changed: 48 additions & 24 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
181 | | - | |
182 | | - | |
183 | | - | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
184 | 185 | | |
185 | 186 | | |
186 | 187 | | |
187 | 188 | | |
188 | | - | |
189 | | - | |
| 189 | + | |
| 190 | + | |
190 | 191 | | |
191 | 192 | | |
192 | 193 | | |
| |||
258 | 259 | | |
259 | 260 | | |
260 | 261 | | |
261 | | - | |
262 | | - | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
263 | 273 | | |
264 | 274 | | |
265 | 275 | | |
| |||
304 | 314 | | |
305 | 315 | | |
306 | 316 | | |
307 | | - | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
308 | 321 | | |
309 | 322 | | |
310 | 323 | | |
| |||
607 | 620 | | |
608 | 621 | | |
609 | 622 | | |
610 | | - | |
| 623 | + | |
611 | 624 | | |
612 | 625 | | |
613 | 626 | | |
614 | 627 | | |
615 | 628 | | |
616 | 629 | | |
| 630 | + | |
617 | 631 | | |
618 | 632 | | |
619 | 633 | | |
| |||
657 | 671 | | |
658 | 672 | | |
659 | 673 | | |
660 | | - | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
661 | 678 | | |
662 | 679 | | |
663 | 680 | | |
664 | 681 | | |
665 | 682 | | |
666 | | - | |
| 683 | + | |
667 | 684 | | |
668 | 685 | | |
669 | 686 | | |
| |||
767 | 784 | | |
768 | 785 | | |
769 | 786 | | |
770 | | - | |
771 | | - | |
772 | | - | |
773 | | - | |
774 | | - | |
775 | | - | |
776 | | - | |
777 | | - | |
778 | | - | |
779 | | - | |
780 | | - | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
781 | 805 | | |
782 | 806 | | |
783 | 807 | | |
| |||
1757 | 1781 | | |
1758 | 1782 | | |
1759 | 1783 | | |
1760 | | - | |
| 1784 | + | |
1761 | 1785 | | |
1762 | 1786 | | |
1763 | 1787 | | |
| |||
1927 | 1951 | | |
1928 | 1952 | | |
1929 | 1953 | | |
1930 | | - | |
| 1954 | + | |
1931 | 1955 | | |
1932 | 1956 | | |
1933 | 1957 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
| 90 | + | |
90 | 91 | | |
91 | 92 | | |
92 | 93 | | |
| |||
281 | 282 | | |
282 | 283 | | |
283 | 284 | | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
290 | 305 | | |
291 | 306 | | |
292 | 307 | | |
| |||
1362 | 1377 | | |
1363 | 1378 | | |
1364 | 1379 | | |
| 1380 | + | |
| 1381 | + | |
| 1382 | + | |
| 1383 | + | |
| 1384 | + | |
| 1385 | + | |
| 1386 | + | |
| 1387 | + | |
| 1388 | + | |
| 1389 | + | |
| 1390 | + | |
| 1391 | + | |
| 1392 | + | |
| 1393 | + | |
| 1394 | + | |
| 1395 | + | |
| 1396 | + | |
| 1397 | + | |
| 1398 | + | |
| 1399 | + | |
| 1400 | + | |
| 1401 | + | |
| 1402 | + | |
| 1403 | + | |
| 1404 | + | |
| 1405 | + | |
| 1406 | + | |
| 1407 | + | |
| 1408 | + | |
| 1409 | + | |
| 1410 | + | |
| 1411 | + | |
| 1412 | + | |
| 1413 | + | |
| 1414 | + | |
| 1415 | + | |
| 1416 | + | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
| 1421 | + | |
| 1422 | + | |
| 1423 | + | |
| 1424 | + | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
1365 | 1428 | | |
1366 | 1429 | | |
1367 | 1430 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
530 | 530 | | |
531 | 531 | | |
532 | 532 | | |
533 | | - | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
534 | 541 | | |
535 | 542 | | |
536 | 543 | | |
| |||
Lines changed: 55 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
0 commit comments