Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
5ad1483
Implement DuckDB Support
nicoloesch Oct 13, 2026
061bbe5
Batched loading, UPDATE-in-place in merge replace instead of delete a…
nicoloesch Oct 14, 2026
0dcfe31
Pagination centralised, core functionalities replace raw text
nicoloesch Oct 15, 2026
58004a6
Clearer docstrings on why some dialects commit during pagination
nicoloesch Oct 15, 2026
f4114be
Samll fixes, correct dialects, updated tests
nicoloesch Oct 16, 2026
ce5edac
Proper cyclic table load commits
nicoloesch Oct 16, 2026
d7cffa2
Rectify replacement feasible for DuckDB, accurately revert on failed …
nicoloesch Oct 16, 2026
17b2252
Resolve schema_claims-only tags in create_tables()'s FK span check
nicoloesch Oct 26, 2026
109a2a8
Update oa-configurator to 2.1.0 to receive DuckDB changes
nicoloesch Oct 26, 2026
258f387
Classify cross-schema and cyclic FKs via oa-configurator, validate be…
nicoloesch Oct 27, 2026
bcb7ead
Load self-referential FKs in dependency order, validate cross-databas…
nicoloesch Oct 27, 2026
36200a0
Load merge_replace's self-referential updates and inserts together, i…
nicoloesch Oct 27, 2026
b99acd0
Trim yapping in merge_replace's self-referential docstring and comment
nicoloesch Oct 27, 2026
bc90301
Share engine-dispose helper between bootstrap and cross-database FK v…
nicoloesch Oct 27, 2026
3f3ae05
Replace dependency-wave merge scheduling with batch-ordered pagination
nicoloesch Oct 28, 2026
bf14559
Guard cross-database FK validation against an ephemeral remote connec…
nicoloesch Oct 28, 2026
ad02326
Pull shared pagination-index logic up into DatabaseBackend
nicoloesch Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ jobs:
uses: AustralianCancerDataNetwork/cava-devops/.github/workflows/label-gate.yml@main
build-test-sqlite:
uses: AustralianCancerDataNetwork/cava-devops/.github/workflows/build-test.yml@main
build-test-duckdb:
uses: AustralianCancerDataNetwork/cava-devops/.github/workflows/build-test-duckdb.yml@main
build-test-postgres:
uses: AustralianCancerDataNetwork/cava-devops/.github/workflows/build-test-postgres-v2.yml@main
with:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ The library focuses on:
* loader and validation infrastructure
* operational helpers that work across supported backends

At the moment, the built-in backends are SQLite and PostgreSQL.
The built-in backends are SQLite, PostgreSQL, and DuckDB. See [oa-configurator's supported dialects](https://AustralianCancerDataNetwork.github.io/oa-configurator/config-reference/#supported-dialects) for the dialect list this is built against.


### What this library provides
Expand Down
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ It focuses on:
- model-agnostic validation scaffolding
- operational helpers for supported backends

It currently ships with backend implementations for SQLite and PostgreSQL.
It ships with backend implementations for SQLite, PostgreSQL, and DuckDB. See [oa-configurator's supported dialects](https://AustralianCancerDataNetwork.github.io/oa-configurator/config-reference/#supported-dialects) for the dialect list this is built against.

---

Expand Down
7 changes: 5 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ license = { text = "Apache-2.0" }
requires-python = ">=3.12"
dependencies = [
"chardet>=5.2.0",
"oa-configurator>=2.0.0,<3",
"oa-configurator>=2.1.0,<3",
"pandas>=2.3.3",
"pyarrow>=23.0.1",
"sqlalchemy>=2.0.45",
Expand Down Expand Up @@ -49,8 +49,11 @@ packages = ["src/orm_loader"]
postgres = [
"psycopg[binary]>=3.2",
]
duckdb = [
"duckdb-sqlalchemy>=1.5",
]
dev = [
"oa-configurator[postgres]>=2.0.0,<3",
"oa-configurator[postgres,duckdb]>=2.0.0,<3",
"pytest>=9.0.3",
"ty>=0.0.59",
"ruff>=0.14.11",
Expand Down
2 changes: 2 additions & 0 deletions src/orm_loader/backends/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .duckdb import DuckDBBackend
from .postgres import PostgresBackend
from .resolve import resolve_backend
from .sqlite import SQLiteBackend
Expand All @@ -20,6 +21,7 @@
"ConcurrentRefreshNotEligibleError",
"DatabaseBackend",
"Dialect",
"DuckDBBackend",
"MaterializationError",
"MaterializationFailure",
"MaterializationOperation",
Expand Down
Loading
Loading