py-1.42.0
pola-rs/polarspy-1.42.0Jun 24, 2026by github-actions[bot]
AI Summary
Adds support for SQL's implicit `JOIN` syntax, introduces naive out-of-core spilling, and implements experimental strict mode. Includes significant performance optimizations for cloud IO and parquet scanning.
Key Highlights
- SQL's implicit `JOIN` syntax support
- Naive out-of-core spilling to Polars
- Experimental strict mode
- Bytes-based concurrency control for cloud IO
New Features
- SQL's implicit JOIN syntax
- Experimental strict mode
- Expr.is_sorted
- DataFrame.is_sorted()
- Suggestions in wrong API usage
Full Release Notes
## ⚠️ Deprecations - Deprecate casts from string to temporal dtypes (#28056) ## 🚀 Performance improvements - Add bytes-based concurrency control for cloud IO (#27924) - Stop flushing multiplexer on phase change (#28013) - Prevent empty chunks from triggering copy in rechunk (#27953) - Improve performance of struct unnest inside list eval on streaming (#27905) - Eliminate filters with contradictory predicates (#27775) ## ✨ Enhancements - Deprecate casts from string to temporal dtypes (#28056) - Add naive out-of-core spilling to Polars (#27998) - Add experimental strict mode (#28023) - Optimize non-negative len and null\_count comparisons (#28002) - Optimize len and null\_count comparisons (#27727) - Support SQL's implicit `JOIN` syntax (#27890) - Add `Expr.is_sorted` (#26708) - Add suggestions in wrong api usage or mismatched column names (#27954) - Add external object\_store support for non-native schemes (#27871) - Skip Delta files and parquet row groups using per-field struct statistics (#27887) - Improve IR sortedness detection for with\_row\_index and explode (#27875) - Add `DataFrame.is_sorted()` (#27870) - Expose fixed-size rolling window expressions in Python visitor (#27108) - Fix SchemaError using lazy HConcat->Sink (#27770) - Add tiered multi-file parquet metadata resolver (#27720) - Cache and shuffle DNS for cloud object\_store (#27659) ## 🐞 Bug fixes - Add a deprecation warning for `.explode()` without `empty_as_null` argument (#28040) - Fix `select(len())` incorrectly returned 0 when using `scan_iceberg` with `pyiceberg` as reader override (#28044) - Ensure slice expr always observes input order (#28041) - Fix projection pushdown with row index out of order (#28043) - Fix cross-join predicates not applied when using `sink_*` functions (#28042) - Grammar corrections (recommend to → recommend, allows to → allows using) (#28038) - Ensure optimisations aren't omitted by cached IR nodes (#28004) - Computed GROUP keys in SQL projections (#27989) - Handle empty DataFrames in `dt.truncate` and `dt.round` (#26120) - Address join alias state leakage in SQL CTEs (#27985) - Support scanning `file://` URIs with percent-encoded paths (#27876) - Lower SQL `[NOT] IN (subquery)` to semi/anti join (#27888) - Check for continuity across morsels in AsOf join node (#27461) - Add test for projection pushdown with hconcat regression (#27937) - Traverse caches only once in explain (#27939) - Preserve null placement when collapsing `sort.reverse()` into single sort (#27918) - Incorrect schema order for hstack in projection pushdown optimizer (#27920) - Fix duplicated map\_elements warning on streaming engine (#27919) - Use block\_in\_place\_on for calls which can come from executor thread (#27855) - Mismatch in max\_threads -> pipeline configuration (#27854) - Keep maintain\_order on sliced unique (#27852) - Fix SchemaError using lazy HConcat->Sink (#27770) - Fix incorrect projection height when selecting only literals (#27825) - Select with expr slice and len gave incorrect len (#27824) - Prevent import panic when environment variable set to unexpected value (#27831) ## 📖 Documentation - New On-Prem release (#27979) - Add note on OOM behavior on Kubernetes (#27972) - Properly render backslashes in CSV `eol_char` docstrings (#27962) - Add entry for `DataFrame.is_sorted()` (#27913) - Clarify compat\_level export docs (#27715) - Add robots.txt disallowing stale docs and added sitemap for better SEO (#27901) - Update Polars \<> Spark comparison (#27873) - Bump to patched version (#27851) - Replace Typeform sign-up URL with new enterprise link (#27838) - Correct wrong head call (#27848) - Add Polars On-Prem 0.5.0 release (#27849) - Correct onprem license helm values (#27847) - Update connecting Polars Cloud to AWS documentation (#27823) - Correct cost/connectivity sections (#27813) - Add sections about egress (#27805) - Tragic typo in On-Prem docs (#27804) ## 🛠️ Other improvements - Add AI agent disclsoure (#28064) - Bump memmap2 version (#28050) - Update `sqlparser` dependency (#28021) - Update `pyo3` and `rust-numpy` to `0.29.0` (#27970) - Add `2.0` branch as primary branch (#27978) - Patch jemalloc-sys for Makefile bug (#27945) - Restore Cargo.lock (#27964) - Add test for projection pushdown with hconcat regression (#27937) - Update `deny.toml` configuration (#27949) - Doctest skip refactor and add hugging face rate limited tests (#27885) - Run Pyrefly type-checker on source code (#27722) - Bump Rust dependencies (#27874) - Changes needed for Rust 0.54.x (#27853) - Use `Vec` instead of `PlHashMap` for `ProjectionInfo.map` (#27856) - Reduce `codegen-units` (#27835) - Refactor to avoid `unbound-name` Pyright/Pyrefly errors (#27827) Thank you to all our contributors for making this release possible! @0guban0v, @April-Sonnet, @BitWeaverDev, @EndPositive, @JakubValtar, @Kevin-Patyk, @Liyixin95, @MarcoGorelli, @Matt711, @TNieuwdorp, @alexander-beedie, @ankane, @azimafroozeh, @cBournhonesque, @carnarez, @dsprenkels, @gautamvarmadatla, @kdn36, @nameexhaustion, @orlp, @ritchie46, @tolleybot, @toreerdmann, @uurl and @xixixao