Packages

DuckDB-native dataframe library for Elixir

Current section

Files

Jump to
dux CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
All notable changes to Dux are documented here.
## [Unreleased]
### Bug Fixes
- SQL injection hardening — escape identifiers and options
- Eliminate temp table GC race via process dictionary
- Livebook setup cells — Mix.install alone in setup block
- Unused variable warning in distributed test
- Quote identifiers in Merger and Broadcast SQL
- V0.1.0 release readiness fixes
- GC race in Worker.register_table + distributed PageRank
- Distributed parquet partitioning — Merger re-aggregation + compute idempotency
- Make rustler dep unconditionally optional for Hex
- Credo issues — reduce arity, replace length > 0
### Documentation
- Document non-deterministic ordering of distinct/1
- README, guides, cheatsheet, changelog for 0.1.0
- Convert guides to .livemd with atom keys
- Remove commented output from livebooks, fix examples
- Proper Livebook format — setup cell, self-contained examples
- Remove spark-killer language
- Add RELEASING.md with rustler_precompiled release flow
- Comprehensive docs pass — Graph options, README verbs, cheatsheet
- Update distributed guide — auto join routing, remove Broadcast ref
### Features
- Initial Dux project scaffolding
- DuckDB NIF layer with connection management
- Start Connection in supervisor, add property tests
- Verb API with lazy pipelines and CTE compilation
- Query macro compiling Elixir expressions to DuckDB SQL
- IO via DuckDB — CSV, Parquet, NDJSON read/write
- Dux.Graph — graph analytics as verb compositions
- GC sentinel NIF + upgrade to Rustler 0.37
- Distributed resource tracking (Remote GC)
- Remote Worker — DuckDB per BEAM node with :pg discovery
- Coordinator — distributed query fan-out and merge
- Broadcast joins for star-schema distributed queries
- Nx zero-copy interop — LazyContainer + to_tensor
- Benchmark suite with Benchee
- Atom_keys option for collect/1 and to_columns/1
- Pretty-printed SQL preview
- Display — Inspect protocol, Table.Reader, peek
- Graph inspect with summary stats
- Distributed shuffle join for large-large joins
- Pivot_wider and pivot_longer verbs
- Distributed correctness — pipeline splitter, aggregate fixes
- Distributed PageRank via broadcast pattern
- Distributed connected components via broadcast-iterate pattern
- Distributed shortest_paths and triangle_count
- Distributed STDDEV/VARIANCE decomposition + shared SQL helpers
- Distributed join routing — auto-broadcast local right sides
- Shuffle join routing for large right sides in distributed joins
- Multi-column join support for Shuffle + peer tests for join routing
- Show distribution info in Inspect display
- Embedded test datasets + data-driven E2E tests
- Color-coded Inspect display using Inspect.Algebra
- Head/1 defaults to 10 rows
### Miscellaneous
- Add dependency lockfiles
- Add credo linting, mise config, format code
- CI workflows, rustler_precompiled, Hex packaging
- Cargo fmt
- Fix all credo issues — alias, nesting, TODO tag
- Clean up distributed graph — keep distributed PageRank, defer CC
- Bump version
- Mix format
- Add git-cliff for automated changelog generation
### Refactoring
- Macros on Dux, verb/verb_with split, remove Dux.Q
- Atom keys in from_list, cleaner docs
- Distribution as a struct property
- Rename API — distributed→distribute, collect→to_rows, new collect semantics
- Consolidate escape_ident/esc/qi to shared Dux.SQL.Helpers.qi/1
### Testing
- Comprehensive NIF and connection tests
- Comprehensive verb API tests
- SQL injection security tests + fix from_list identifier escaping
- End-to-end integration tests + fix join ON clause aliasing
- Distributed :peer integration tests
- Full distributed workflow — create, distribute, aggregate, collect
- :peer distributed correctness tests on real BEAM nodes
- Distribute API verification tests + update distributed_test to new API
- Peer-node integration test for auto-broadcast join routing