What's Changed
- feat(c/sedona-gdal): add crate with dynamically loaded GDAL bindings by @Kontinuation in #681
- fix(python/sedonadb): support DuckDB 1.5 spatial tests by @Kontinuation in #700
- feat(rust/sedona-raster-functions): add RS_Contains, RS_Intersects, RS_Within UDFs by @Kontinuation in #615
- chore: Bump versions for 0.4.0dev by @paleolimbot in #694
- chore(deps): bump geos from 11.0.1 to 11.1.1 by @dependabot[bot] in #692
- refactor(c/sedona-s2geography): Move s2geography UDFs to extension ABI by @paleolimbot in #683
- chore(deps): bump quinn-proto from 0.11.13 to 0.11.14 by @dependabot[bot] in #706
- refactor(rust/sedona-schema): centralize SedonaType CRS helpers by @Kontinuation in #705
- feat(sedona-gdal): add foundational wrapper utilities by @Kontinuation in #696
- fix(rust-docs): remove norun/ignore markers by @Mayankaggarwal8055 in #710
- feat(rust/sedona-spatial-join) Making SpatialIndex a trait by @pwrliang in #645
- chore(deps): bump clap from 4.5.54 to 4.5.60 by @dependabot[bot] in #711
- feat(sedona-gdal): add geometry and spatial ref primitives by @Kontinuation in #695
- docs: Add PyPI download statistics badges to README and docs homepage by @jiayuasu in #723
- docs: Remove badges from docs homepage due to Apache CSP restrictions by @jiayuasu in #724
- feat(c/libgpuspatial): Upgrade RAPIDS RMM to 25.12 by @pwrliang in #718
- chore(deps): bump lz4_flex from 0.12.0 to 0.12.1 by @dependabot[bot] in #713
- chore(ci): Add round-robin reviewer auto-assignment by @jiayuasu in #720
- feat(c/libgpuspatial): Fix synchronization bugs and improve logging by @pwrliang in #721
- feat(c/sedona-libgpuspatial): Improve building robustness by @pwrliang in #719
- feat(c/libgpuspatial): Change the interface of SpatialRefiner by @pwrliang in #717
- Add ST_Relate implementation using GEOS by @Mehak3010 in #691
- perf(rust/sedona-spatial-join): Use row count first to decide join order by @2010YOUY01 in #725
- chore(deps): bump tar from 0.4.44 to 0.4.45 by @dependabot[bot] in #726
- chore(deps): bump rustls-webpki from 0.103.8 to 0.103.10 by @dependabot[bot] in #727
- chore(deps): bump actions/github-script from 7 to 8 by @dependabot[bot] in #728
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #729
- chore(deps): bump actions/checkout from 4 to 6 by @dependabot[bot] in #730
- chore(deps): bump clap from 4.5.60 to 4.6.0 by @dependabot[bot] in #731
- feat(sedona-gdal): add dataset and vector/raster wrappers by @Kontinuation in #699
- feat(rust/sedona-spatial-join): Add config to disable spatial join reordering by @2010YOUY01 in #733
- fix: Ensure GPKG metadata consistency in test for GDAL 3.10+ by @Kontinuation in #740
- feat(sedona-gdal): add raster operations and vrt support by @Kontinuation in #698
- refactor(rust/sedona-spatial-join): Allow SpatialIndexBuilder and EvaluatedGeometryArray to be configurable by @paleolimbot in #737
- test(rust/sedona-raster-functions): Add multi-band regression tests for RS_* raster functions by @james-willis in #747
- chore(deps): bump fastrand from 2.3.0 to 2.4.0 by @dependabot[bot] in #755
- chore(deps): bump tokio from 1.49.0 to 1.51.0 by @dependabot[bot] in #754
- chore(deps): bump serde_with from 1.14.0 to 3.18.0 by @dependabot[bot] in #712
- refactor(rust/sedona-query-planner): Move query planner and utilities to dedicated crate by @paleolimbot in #735
- feat: add ST_Relate(geometry, geometry, text) boolean variant by @Mehak3010 in #741
- feat(sedona-gdal): add convenience facade and mem builder by @Kontinuation in #697
- chore(deps): bump actions/github-script from 8 to 9 by @dependabot[bot] in #757
- chore(deps): bump the savvy group with 2 updates by @dependabot[bot] in #758
- fix(docs): Fix formatting issues in geopandas-interop.md by @tlblessing in #760
- chore(deps): bump rand from 0.10.0 to 0.10.1 by @dependabot[bot] in #761
- Refine documentation on array methods and views by @tlblessing in #762
- chore(deps): bump geojson from 0.24.2 to 1.0.0 by @dependabot[bot] in #732
- feat(rust/sedona-spatial-join): Integrate libgpuspatial into sedona-spatial-join by @pwrliang in #722
- chore(r/sedonadb): Ignore gpu crate when building R tarball by @paleolimbot in #764
- feat(sedona-spatial-join): Fix for the customized join provider that may not take effective by @pwrliang in #766
- feat(c/sedona-libgpuspatial): Upgrade RMM to 26.04.00 by @pwrliang in #767
- chore(python/sedonadb): Add geography integration test framework by @paleolimbot in #756
- fix(ci): Fix libgpuspatial version spec for wheels workflow by @paleolimbot in #769
- chore(ci): Provide valid location for bigquery cache for wheel tests by @paleolimbot in #770
- feat(python/sedonadb): Enable GPU feature in python package and add spatial join tests by @pwrliang in #768
- feat(python/sedonadb): add Python GDAL configuration API by @Kontinuation in #689
- docs: Add release notes for SedonaDB 0.1.0, 0.2.0, and 0.3.0 by @jiayuasu in #771
- docs: add new GPU acceleration guide for spatial joins by @pwrliang in #774
- chore(c/sedona-s2geography): Update s2geography submodule by @paleolimbot in #708
- feat(python/sedonadb): Support specifying layer name and accessing sub-paths inside archives when working with pyogrio sources. by @pratheekrebala in #778
- fix(rust/sedona-spatial-join): Implement EvaluatedGeometryArray::concat by @pwrliang in #784
- chore(deps): bump rustls-webpki from 0.103.10 to 0.103.13 by @dependabot[bot] in #785
- feat(rust/sedona-spatial-join-geography): Implement spatial join for geography type by @paleolimbot in #775
- chore(deps): bump lru from 0.16.3 to 0.17.0 by @dependabot[bot] in #794
- chore(deps): bump tokio from 1.51.1 to 1.52.1 by @dependabot[bot] in #795
- chore(deps): bump rayon from 1.11.0 to 1.12.0 by @dependabot[bot] in #796
- fix(ci): Fix Windows build path limits and unify rust-cache configuration by @pwrliang in #788
- docs: Add
condainstallation method to docs by @p-vdp in #786 - chore(deps): bump the adbc group with 2 updates by @dependabot[bot] in #793
- feat(r/sedonadb): Add join expression evaluation by @paleolimbot in #781
- chore(deps): bump i_overlay from 4.0.6 to 6.0.0 by @dependabot[bot] in #808
- chore(deps): bump lru from 0.17.0 to 0.18.0 by @dependabot[bot] in #809
- chore(deps): bump serde_with from 3.18.0 to 3.19.0 by @dependabot[bot] in #810
- feat(sedona-raster-gdal) add GDAL foundation library for supporting GDAL-based RS functions by @Kontinuation in #787
- feat(c/sedona-geos): Adds ST_Normalize(geometry) in c/sedona-geos using GEOS by @oglego in #802
- chore(deps): bump the datafusion-arrow-parquet group across 1 directory with 22 updates by @dependabot[bot] in #797
- feat(raster-gdal): add parse_outdb_source helper for the GDAL format driver by @james-willis in #812
- refactor(rust/sedona-spatial-join): Support wraparound rectangles in EvaluatedGeometryArray by @paleolimbot in #799
- feat(rust/sedona-raster-gdal,c/sedona-gdal): Add in-db GDAL raster loading functions by @Kontinuation in #811
- feat(python/sedonadb): add Expr foundation by @jiayuasu in #807
- feat(r/sedonadb): Add spatial join syntax and join type helpers by @paleolimbot in #814
- feat(rust/sedona-geoparquet): Add GeoParquet 2.0/Parquet-native geometry and geography support to Parquet writer by @paleolimbot in #805
- feat(python/sedonadb): add Expr operator overloads by @jiayuasu in #823
- chore(deps): bump sysinfo from 0.38.3 to 0.39.0 by @dependabot[bot] in #830
- chore(deps): bump serde_with from 3.19.0 to 3.20.0 by @dependabot[bot] in #828
- fix(rust/sedona-pointcloud): projection regression by @b4l in #825
- feat(rust/sedona-expr): Add pruning capability for geography type by @paleolimbot in #806
- feat(python/sedonadb): add DataFrame.select by @jiayuasu in #832
- chore(ci): Port distance and predicate geography tests from s2geography and run them against BigQuery and PostGIS where possible by @paleolimbot in #816
- ci(r): pre-install nightly Rust + rust-src on macos to defuse #837 by @james-willis in #838
- fix(ci): Update Python integration tests to pass on all platforms by @paleolimbot in #839
- fix(rust/sedona): clippy lint for no default features by @b4l in #840
- feat: N-dimensional raster type extension (Phase 1) by @james-willis in #749
- fix(sedona-geoparquet): cache metadata in inner ParquetOpener by @prantogg in #843
- feat(python/sedonadb): add DataFrame.filter / DataFrame.where by @jiayuasu in #835
- ci: disable rust-cache cache-bin on macOS, add rustup-init guard (#837) by @james-willis in #841
- feat(python/sedonadb): add DataFrame getitem by @jiayuasu in #846
- feat(rust/sedona-functions): Add geography and CRS propagation to ST_Dump by @paleolimbot in #847
- feat(python/sedonadb): restrict DataFrame getitem to single-column lookup by @jiayuasu in #852
- docs: update PyPI download badge in README by @jiayuasu in #857
- feat(rust/sedona-functions,c/sedona-geos): Implement geography kernels for structural transformations and accessors by @paleolimbot in #844
- feat(c/sedona-s2geography): Add ST_(X|Y)(Min|Max), ST_Envelope, ST_Envelope_Agg, and ST_Analyze_Agg implementations for geography by @paleolimbot in #850
- feat(rust/sedona-functions,c/sedona-proj): Support geography in CRS/SRID functions by @paleolimbot in #848
- Document ST_AsBinary storage simplification by @camden-lowrance in #868
- feat(raster-zarr): sedona-raster-zarr crate + sedona-zarr plugin by @james-willis in #858
- feat(python/sedonadb): add DataFrame.sort with composable SortExpr by @jiayuasu in #859
- feat(r/sedonafns): Add generated Sedona documentation as an R package by @paleolimbot in #851
- chore(deps): bump rstar from 0.12.2 to 0.13.0 by @dependabot[bot] in #877
- chore(deps): bump glam from 0.32.0 to 0.33.0 by @dependabot[bot] in #876
- feat(python/sedonadb): add DataFrame.drop by @jiayuasu in #871
- Expose simplified Arrow stream export by @camden-lowrance in #873
- chore(rust): Update pretty_env_logger to 0.5 by @paleolimbot in #880
- fix(rust/sedona-geo): support array distances in ST_Buffer by @camden-lowrance in #881
- fix(rust/sedona-spatial-join): Improve spatial join evaluated batch memory accounting by @camden-lowrance in #884
- feat(rust/sedona-functions): Aded ST_LineSubstring function by @sapienza88 in #777
- feat(docs): Add scalar function style guide by @camden-lowrance in #883
- feat(python/sedonadb): Expose scalar and aggregate udfs from context registry by @paleolimbot in #885
- chore(deps): bump tar from 0.4.45 to 0.4.46 by @dependabot[bot] in #889
- feat(c/sedona-s2geography,rust/sedona-functions): Add ST_Segmentize, ST_TessellateGeom, ST_TessellateGeog by @paleolimbot in #867
- chore(docker): Add Dockerfile for building GPU-enabled sedonadb image by @pwrliang in #872
- feat(python/sedonadb): add DataFrame.agg for global aggregation by @jiayuasu in #887
- feat(python/sedonadb): add DataFrame.group_by + GroupedDataFrame.agg by @jiayuasu in #893
- feat(rust/sedona-raster-gdal): add RS_FromPath by @Kontinuation in #831
- feat(docs/reference/sql): Ensure geography functions are documented by @paleolimbot in #895
- feat(sedonadb/python): Add informative error for len() of a DataFrame by @paleolimbot in #902
- feat(docs): Add Postgres shell instructions to contributors guide by @paleolimbot in #905
- chore(r/sedonafns): Install build requirements when building source tarball on r-universe by @paleolimbot in #907
- fix(c/sedona-proj): Allow bound parameter for CRS argument of ST_Transform by @paleolimbot in #904
- feat(rust/sedona-raster-zarr): cloud storage backends (s3, gcs, azure, http) via object_store by @james-willis in #888
- feat(raster): accept lat/lon and latitude/longitude spatial dim names by @james-willis in #910
- feat(python/sedonadb): Make expressions context-aware for piped functions by @paleolimbot in #901
- fix(c/sedona-gdal): replace gpkg temporary datasets with flatgeobuf in sedona-gdal tests by @Kontinuation in #911
- fix(rust/sedona-raster-functions): Update creation of a repeated string view with more efficient method by @paleolimbot in #903
- perf(rust/sedona-functions): Improve performance of ST_Reverse() by @paleolimbot in #912
- feat(rust): Lazy Raster Loading Support for Zarr and GDAL by @james-willis in #886
- chore(docker): support multi-arch builds for the GPU image and add a publish script by @jiayuasu in #909
- feat(rust/sedona-geoparquet,rust/sedona-datasource)!: Add support for partition columns and discovery by @paleolimbot in #906
- chore(deps): bump serde_with from 3.20.0 to 3.21.0 by @dependabot[bot] in #922
- chore(deps): bump i_overlay from 6.0.0 to 7.0.0 by @dependabot[bot] in #923
- feat(python/sedonadb): add DataFrame.join by @jiayuasu in #908
- refactor(raster): drop data()/contiguous_data() from Raster interface by @james-willis in #915
- feat(rust/sedona-raster,rust/sedona-raster-functions): zero-copy band-data in RS_EnsureLoaded by @james-willis in #917
- fix(rust/sedona-raster): classify 0-element bands as InDb; make is_indb required by @james-willis in #929
- feat(rust/sedona-raster-gdal): pass N-D rasters through the GDAL bridge via plane stacking by @james-willis in #928
- refactor(rust/sedona-raster,rust/sedona-schema): source_shape i64 end-to-end (in-memory + Arrow column) by @james-willis in #927
- feat(python/sedonadb): add DataFrame.cross_join by @jiayuasu in #925
- refactor(rust/sedona-raster-functions): width/height and RS_Width/RS_Height return i64 by @james-willis in #932
- feat(rust/sedona-raster): add ViewEntries view-spec module by @james-willis in #934
- chore(ci): build, test, and publish sedonadb-zarr wheels by @james-willis in #936
- feat(python/sedonadb): add Python aggregate UDF decorator by @jiayuasu in #937
- feat(sedonadb/raster): Add zero-copy raster access from pyarrow arrays by @paleolimbot in #942
- feat(rust/sedona-raster-functions): add RS_IsEmpty by @james-willis in #944
- fix(rust/sedona-raster-zarr): discover child arrays via consolidated metadata by @james-willis in #943
- refactor(python/sedonadb)!: Refactor registration of extension components by @paleolimbot in #940
- chore: add raster label to GitHub repository topics by @james-willis in #948
- refactor(r/sedonafns): Ensure generated function names are snake case by @paleolimbot in #933
- feat(r/sdplyr): Add sdplyr package (dplyr method implementations) by @paleolimbot in #931
- chore(examples): pin transitive deps via committed Cargo.lock by @james-willis in #951
- fix(rust/sedona-raster-zarr): parse spatial:transform as affine order, add proj:code and spatial:dimensions by @james-willis in #950
- chore(deps): bump rustyline from 15.0.0 to 18.0.0 by @dependabot[bot] in #959
- feat(python/sedonadb-expr): Add Python documentation sources based on SQL documentation by @paleolimbot in #862
- feat(python/sedonadb): add DataFrame.distinct and distinct_on by @jiayuasu in #961
- feat(rust/sedona-raster-zarr): derive georeferencing from coordinate arrays by @james-willis in #954
- feat(rust/sedona-testing): add ergonomic raster function test harness by @james-willis in #945
- chore(rust/sedona-raster): Ensure creating a RasterStructArray does not panic by @paleolimbot in #967
- feat(sedonadb/python): Add lazy raster creator for testing by @paleolimbot in #966
- fix(rust): clean up CRS string handling (preserve definitions, consolidate equality/SRID) by @james-willis in #962
- refactor(python/sedonadb): Extract common read functionality into read accessor by @paleolimbot in #968
- feat(rust/sedona-raster-gdal): add RS_MetaData by @Kontinuation in #833
- chore(rust/sedona-raster-gdal): Fix outdated RasterStructArray::new() call by @paleolimbot in #971
- fix(rust/sedona-query-planner): Ensure user provided RS_EnsureLoaded call preserves metadata by @paleolimbot in #969
- fix(rust/sedona-query-planner): recognize wrapped RS_EnsureLoaded in idempotency guard by @james-willis in #976
- feat(rust/sedona,python/sedonadb): Support nested expressions in Python and SQL by @paleolimbot in #973
- feat(rust/sedona-query-planner): skip RS_EnsureLoaded on args returning loaded bytes by @james-willis in #979
- fix(rust/sedona-query-planner): preserve column name when wrapping raster args by @james-willis in #978
- feat: add N-D raster dimension query and manipulation functions by @james-willis in #750
- feat(r/sdplyr): Add filter translation by @paleolimbot in #972
- feat(rust/sedona-schema): support WKT1/WKT2 CRS strings in deserialize_crs by @james-willis in #953
- fix(python/sedonadb): Ensure PROJ and GDAL are detected on Windows + Conda by @paleolimbot in #980
- feat(python/sedonadb): Enable zarr read via sedonadb-zarr by @paleolimbot in #916
- chore(python/sedonadb): Fix WKT string for older proj versions by @paleolimbot in #982
- fix(c/sedona-gdal): resolve MEMDataset::Create on GDAL 3.13 + use MEMCreate C-API when available by @james-willis in #963
- chore(python/sedona-expr): Ensure sedonadb-expr is packaged by @paleolimbot in #970
- feat(rust/sedona-raster-zarr): resolve CRS from CF/rioxarray conventions by @james-willis in #985
- feat(rust/sedona-raster-zarr): enable the zlib codec by @james-willis in #987
- chore: Ensure workspace can be built + verified under GDAL 3.13 by @paleolimbot in #984
- docs(examples): add 'Working with Zarr and NDArray data in SedonaDB' tutorial by @james-willis in #938
New Contributors
- @tlblessing made their first contribution in #760
- @pratheekrebala made their first contribution in #778
- @oglego made their first contribution in #802
- @camden-lowrance made their first contribution in #868
- @sapienza88 made their first contribution in #777
Full Changelog: apache-sedona-db-0.4.0.dev...apache-sedona-db-0.4.0