What's Changed
- fix: make git run watch optional in release_rc.sh by @wgtmac in #720
- feat(auth): implement SigV4 authentication for REST catalog by @plusplusjiajia in #616
- Revert "chore: remove spdlog dependency (#459)" by @kamcheungting-db in #718
- chore: bump version to 0.4.0-SNAPSHOT by @zhjwpku in #733
- chore(deps): bump actions/checkout from 6.0.2 to 6.0.3 by @dependabot[bot] in #734
- chore(deps): bump actions/cache from 4.3.0 to 5.0.5 by @dependabot[bot] in #735
- chore(deps): bump github/codeql-action from 4.36.0 to 4.36.2 by @dependabot[bot] in #736
- feat(arrow): resolve S3-compatible schemes in ArrowFileSystemFileIO by @plusplusjiajia in #703
- fix: fix URL encoding for non-ASCII bytes by @fallintoplace in #738
- fix: allow avro date reads from plain int by @zhjwpku in #728
- doc: add release history for release v0.3.0 by @zhjwpku in #743
- feat(inspect): add base metadata table interface by @All-less in #607
- refactor: harden FileCleanupStrategy with retry and parallel deletes by @shangxinli in #649
- feat(logging): add LogLevel severity enum (1/6) by @kamcheungting-db in #722
- feat: Collect Parquet NaN metrics during writes by @WZhuo in #727
- fix: align rest table update serde with java/spec by @wgtmac in #716
- fix: Handle unknown record_count better by @goel-skd in #747
- fix: reject tag refs for main snapshot ref by @zhjwpku in #745
- feat: implement RenameTable in InMemoryCatalog by @WZhuo in #742
- feat(hive): vendor Hive Metastore IDL and generated bindings by @MisterRaindrop in #749
- feat(rest): add session-aware REST catalog by @wgtmac in #750
- fix(rest): reject empty namespace separators by @fallintoplace in #740
- fix: validate truncate widths in utility entrypoints by @fallintoplace in #739
- fix: cast to unsigned char in ASCII case conversion (1/2) by @goel-skd in #748
- feat: implement purge support in DropTable for InMemoryCatalog and SqlCatalog by @WZhuo in #744
- fix: fast append should not contain deleted file during retry process by @HuaHuaY in #706
- fix: skip only null partition value rows in ParseDataFile by @WZhuo in #756
- feat: add uniqueValue optimization for notEq/notIn in InclusiveMetricsEvaluator by @WZhuo in #754
- fix: MergingSnapshotUpdate should not contain deleted file during retry by @HuaHuaY in #707
- chore(ci): enable sccache for Meson Windows builds by @zhjwpku in #761
- feat: add merge append by @zhjwpku in #699
- fix(rest): avoid default catalog reference cycle by @lishuxu in #764
- feat: add DeleteFiles update API by @manuzhang in #709
- chore: make pre-commit and ci clang-format version consistent by @HuaHuaY in #769
- feat: parallelize reading manifests by @HuaHuaY in #697
- feat(logging): add Logger interface and default logger (2/6) by @kamcheungting-db in #723
- ci: cache vcpkg packages on Windows builds by @abnobdoss in #766
- ci: cancel superseded runs in remaining workflows by @abnobdoss in #767
- CI: Check ASF action allowlist on every PR by @ebyhr in #772
- fix(rest): align error handlers with Java implementation by @zhjwpku in #763
- ci: cache the sccache directory across C++ test builds by @abnobdoss in #765
- feat: add Iceberg v3 type definitions by @zhjwpku in #752
- fix: allow historical sort orders with dropped fields by @zhjwpku in #762
- feat: add StoredLength method to PositionOutputStream by @HuaHuaY in #773
- ci: upgrade to ubuntu-26.04 image by @HuaHuaY in #771
- feat: add row delta update by @manuzhang in #721
- feat(update): add OverwriteFiles for overwrite snapshot commits by @lishuxu in #741
- feat: parallelize update and scan processing by @HuaHuaY in #770
- fix(update): clean up delete files from expired manifests by @wgtmac in #779
- feat(logging): add CerrLogger std::cerr backend (3/6) by @kamcheungting-db in #724
- feat(hive): add iceberg_hive library with bundled/system thrift dependency by @MisterRaindrop in #753
- ci: cache cpp-linter build by @zhjwpku in #782
- build: add Makefile clean target by @manuzhang in #784
- chore: align table metadata JSON fixtures with Java by @zhjwpku in #781
- refactor(serde): return Result from ToJson schema/type/metadata serializers by @huan233usc in #785
- feat(rest): parse storage-credentials and bind a per-table FileIO from vended credentials by @plusplusjiajia in #719
- fix: invalidate table scan schema cache by @fallintoplace in #758
- chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 by @dependabot[bot] in #789
- build: silence benign MSVC C4251/C4275 dll-interface warnings by @abnobdoss in #768
- ci: key Windows sccache cache on MSVC version by @abnobdoss in #787
- chore(deps): bump zizmorcore/zizmor-action from 0.5.6 to 0.5.7 by @dependabot[bot] in #788
- feat(schema): represent, serialize and validate v3 column default values (1/4) by @huan233usc in #746
- feat: parallelize writing manifests by @HuaHuaY in #778
- fix(scan): reject missing column stats fields by @fallintoplace in #759
- feat: write snapshot v3 row lineage fields at top level by @wgtmac in #791
- feat: implement RewriteFiles operation by @WZhuo in #751
- feat: Support UUID values across row and file IO by @zhjwpku in #790
- feat: add ArrowRowBuilder for materializing Arrow batches by @WZhuo in #780
- feat: retry stale v3 snapshot row-lineage validation by @wgtmac in #794
- fix: use correct API in merge append test by @zhjwpku in #797
- test: refactor minimal metadata selection in update tests by @zhjwpku in #798
- feat(parquet): apply column default values when reading missing fields (2/4) by @huan233usc in #792
- ci: scope push trigger to main to drop redundant PR runs by @abnobdoss in #802
- chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 by @dependabot[bot] in #813
- chore(deps): bump actions/cache from 5.0.5 to 6.1.0 by @dependabot[bot] in #814
- chore(deps): bump actions/cache/restore from 5.0.5 to 6.1.0 by @dependabot[bot] in #815
- chore(deps): bump actions/cache/save from 5.0.5 to 6.1.0 by @dependabot[bot] in #816
- refactor: move typed arrow Append helpers to ArrowRowBuilder by @WZhuo in #821
- build: scope warnings-as-error to project targets, not FetchContent subprojects by @yadavay-amzn in #819
- Infra: Group github/codeql-action bumps into a single dependabot PR by @ebyhr in #826
- feat: make ToLower Unicode-aware via utf8proc by @goel-skd in #760
- fix: generate public API docs correctly by @zhjwpku in #804
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #827
- fix: return error for reserved property keys in UpdateProperties::Set() by @WZhuo in #817
- feat: support v3 column default values in UpdateSchema (3/4) by @huan233usc in #793
- ci: add RelWithDebInfo build and fix free-nonheap-object error by @zhjwpku in #812
- refactor: use decimal high and low for Arrow scalar by @zhjwpku in #803
- build: add benchmark build scaffolding by @timothyw553 in #825
- build: enable clang-tidy misc-include-cleaner for include hygiene by @yadavay-amzn in #820
- ci: retry build dir cleanup on Windows by @abnobdoss in #807
- ci: build Windows test leg in Debug by @abnobdoss in #806
- feat(puffin): support deletion-vector-v1 blob read/write by @zhaoxuan1994 in #777
- fix: use kLegacyPartitionDataIdStart as partition field ID baseline by @WZhuo in #832
- feat: MergingSnapshotUpdate merges multiple DVs by @HuaHuaY in #708
- chore: update ASF GitHub collaborators by @wgtmac in #830
- feat: read v3 row lineage metadata columns by @wgtmac in #822
- ci: enable ASF Copilot code review by @wgtmac in #833
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #835
- build: move GTest and Google Benchmark setup into IcebergThirdpartyToolchain by @LuciferYang in #836
- fix: reject non-finite floating-point default values by @huan233usc in #810
- feat(logging): add logging macros (4/6) by @kamcheungting-db in #725
- fix: validate transform parameters in metadata by @fallintoplace in #757
- ci: check for duplicate pull requests by @manuzhang in #837
- ci: replace cpp-linter-action with cpp-linter CLI by @LuciferYang in #838
- ci: share sccache setup across workflows by @abnobdoss in #811
- fix: compare transform function parameters by @WZhuo in #840
- ci: scope pull request checks to relevant paths by @manuzhang in #839
- feat(hive): add HmsClient connection lifecycle and URI parsing by @MisterRaindrop in #796
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #848
- chore(deps): bump zizmorcore/zizmor-action from 0.5.7 to 0.6.0 by @dependabot[bot] in #849
- chore(deps): bump actions/cache/restore from 5.0.5 to 6.1.0 by @dependabot[bot] in #850
- chore(deps): bump actions/cache/save from 5.0.5 to 6.1.0 by @dependabot[bot] in #851
- chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 by @dependabot[bot] in #852
- fix: detect system Thrift in CONFIG mode by @abnobdoss in #855
- fix: validate decimal default fits the field precision by @huan233usc in #809
- chore: upgrade arrow to 25.0.0 by @HuaHuaY in #858
- fix: guard equality delete bounds against missing fields by @LuciferYang in #857
- feat: add ReplacePartitions core class (PR1 of 2 for #637) by @shangxinli in #776
- feat: metrics integration for commit and scan by @evindj in #701
- chore(ci): Update ASF allowlist check action dependency to track versioned releases by @kevinjqliu in #863
- fix: order -NaN below +NaN in Literal comparison by @LuciferYang in #861
- feat(avro): apply column default values when reading missing fields by @huan233usc in #800
- fix: reject malformed commit property integers by @fallintoplace in #843
- chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #866
- chore(deps): bump zizmorcore/zizmor-action from 0.6.0 to 0.6.1 by @dependabot[bot] in #865
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #864
- fix(arrow): release schema after conversion failure by @WZhuo in #862
- test: complete v3 row lineage test coverage by @wgtmac in #869
- INFRA: Use PR titles for squash commits by @kevinjqliu in #870
- feat(expression): cast numeric literals to decimal type by @huan233usc in #805
- chore: upgrade nanoarrow from 0.8.0 to 0.9.0 by @HuaHuaY in #871
- ci: enable Copilot draft reviews and skip unrelated checks by @manuzhang in #886
- test: verify MergingSnapshotUpdate commit reports by @manuzhang in #884
- chore(deps): bump mozilla-actions/sccache-action from 0.0.10 to 0.0.11 by @dependabot[bot] in #883
- chore(deps): bump zizmorcore/zizmor-action from 0.6.1 to 0.6.2 by @dependabot[bot] in #882
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #881
- test: cover write, evolve and read back of a defaulted column end to end by @huan233usc in #874
- feat(logging): add spdlog backend behind ICEBERG_SPDLOG (5/6) by @kamcheungting-db in #726
- fix: reject out-of-range integers when parsing JSON literals by @LuciferYang in #878
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #888
- feat(io): add ResolvingFileIO to resolve FileIO by location scheme and forward vended credentials by @plusplusjiajia in #828
- feat: add v3 geometry and geography support by @wgtmac in #880
- refactor(io): make FileIO resolution registry-driven by @wgtmac in #889
- refactor: protect merging snapshot update hooks by @manuzhang in #885
- fix: parse boolean properties case-insensitively by @fallintoplace in #847
- feat: add lru cache by @HuaHuaY in #891
- feat(logging): add Loggers registry (6/6) by @kamcheungting-db in #737
- fix: reject malformed metadata file versions by @fallintoplace in #846
- feat(rest): support OAuth2 token exchange sessions by @lishuxu in #867
- test(io): stop probing the EC2 metadata service in S3 tests by @plusplusjiajia in #897
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #895
- feat(io): restore the oss scheme with a round trip test and docs by @plusplusjiajia in #893
- refactor: move Puffin & DV support into core iceberg library by @wgtmac in #900
- chore: add support for stale PR workflow by @HuaHuaY in #901
- fix: reject malformed Arrow field IDs by @fallintoplace in #845
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #903
- fix(cmake): generate version.h under PROJECT_BINARY_DIR to support add_subdirectory() builds by @Angelia-Wang in #906
- chore(deps): bump mkdocs-material from 9.6.22 to 9.7.7 by @dependabot[bot] in #908
- feat: add fallible iterator utility by @manuzhang in #905
- fix: correct mismatched class and struct declarations by @zhjwpku in #911
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #922
- chore(deps): bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 by @dependabot[bot] in #923
- chore(deps): bump apache/skywalking-eyes from 0.8.0 to 0.9.0 by @dependabot[bot] in #924
- feat: expose ReplacePartitions on Table and Transaction by @shangxinli in #925
- build: install the public headers under iceberg/catalog by @plusplusjiajia in #927
- feat(parquet): support reading list columns as Arrow large_list by @rahulsmahadev in #714
- chore(test): run REST fixture's SQLite backend in WAL mode by @kevinjqliu in #931
- ci: use Quay and GitHub releases for MinIO by @smaheshwar-pltr in #933
- refactor: expose snapshot utilities in a public header by @zhjwpku in #932
- fix: track batch position delete references by @u70b3 in #842
- fix(manifest): write null instead of empty list/map for unset optional DataFile fields by @Angelia-Wang in #934
- feat(inspect): implement streaming SnapshotsTable scans by @WZhuo in #801
- feat: add lazy scan planning streams by @manuzhang in #873
- build: remove Meson build support by @zhjwpku in #935
- fix: make table updates retryable and cleanup-safe by @zhjwpku in #868
- feat(logging): add transaction commit lifecycle logging by @kamcheungting-db in #890
- docs: clarify contribution conventions for agents by @zhjwpku in #910
- refactor: rename SnapshotCache to SnapshotReader by @zhjwpku in #945
- chore(deps): bump the codeql-action group with 2 updates by @dependabot[bot] in #949
- chore(deps): bump zizmorcore/zizmor-action from 0.6.3 to 0.6.4 by @dependabot[bot] in #950
- fix(manifest): preserve snapshot ID inheritance semantics by @wgtmac in #947
- fix: align boolean parsing with Iceberg Java by @manuzhang in #951
- chore: prepare 0.4.0 release version by @manuzhang in #953
- chore: bump avro to 209a373 to preserve adjust-to-utc on primitives by @manuzhang in #954
New Contributors
- @kamcheungting-db made their first contribution in #718
- @All-less made their first contribution in #607
- @goel-skd made their first contribution in #747
- @abnobdoss made their first contribution in #766
- @ebyhr made their first contribution in #772
- @huan233usc made their first contribution in #785
- @yadavay-amzn made their first contribution in #819
- @timothyw553 made their first contribution in #825
- @LuciferYang made their first contribution in #836
- @Angelia-Wang made their first contribution in #906
- @rahulsmahadev made their first contribution in #714
- @u70b3 made their first contribution in #842
Full Changelog: v0.3.0...v0.4.0