Commit 9378de8
authored
fix(writer): align ducklake_column / ducklake_data_file schema with the DuckLake spec (#116)
* fix(writer): align ducklake_column / ducklake_data_file with the spec
`SqliteMetadataWriter` was producing a `ducklake_column` table that
lacked `parent_column`, `initial_default`, `default_value`,
`default_value_type`, and `default_value_dialect`. The reader's
SQL_GET_TABLE_COLUMNS query (added in PR #89) projects
`parent_column`, so any catalog written by `SqliteMetadataWriter` was
unreadable through the metadata provider, panicking with
"no such column: parent_column".
The bug shipped because CI ran `cargo test` without `write-sqlite`
features, and both `tests/sql_write_tests.rs` and
`tests/sqlite_metadata_provider_test.rs` are gated behind features
that CI didn't enable — so the broken-catalog path compiled to a
zero-test binary in CI and was invisible.
Three changes:
1. `metadata_writer_sqlite.rs::SQL_CREATE_SCHEMA` adds the five
missing `ducklake_column` columns, matching the upstream
`ducklake_metadata_manager.cpp` schema definition. We don't
populate the four `*_default*` columns today (we don't support
nested types or column defaults yet), but the columns must exist
so the reader query doesn't error.
2. `tests/sqlite_metadata_provider_test.rs::init_schema` is brought
in line with the same spec. It also gains `row_id_start`,
`record_count`, and `mapping_id` on `ducklake_data_file` — these
are projected by SQL_GET_DATA_FILES since the row-lineage work
landed in PR #115 and any sqlite-fixture test that exercises the
data-file read path would have hit "no such column" without them.
3. `.github/workflows/ci.yml` enables `write-sqlite` on the test
step so `sql_write_tests` and `sqlite_metadata_provider_test`
actually run. Without this, the next analogous schema drift will
ship invisibly again.
Verified by running `cargo test --features "skip-tests-with-docker
write-sqlite"` locally — 228 unit tests + every integration suite
green, including the 7 previously-broken `sql_write_tests` and 18
`sqlite_metadata_provider_test` cases.
Out of scope (separately broken with the same root cause, no CI
coverage today): the encryption, postgres, and mysql test fixtures
have analogous spec gaps. Worth a follow-up once CI for those
backends is set up.
* docs(ci): reword the write-sqlite comment so the intent isn't ambiguous
The earlier wording read like "enable write-sqlite so the file runs"
which could be parsed as either "we previously didn't run them and
now we are" (correct) or "we want to skip running them" (wrong).
Rephrased to make clear we're adding features so the tests become
visible to cargo, not the other way round.
* docs: trim the new comments to just the non-obvious WHY
Three comment blocks added earlier in this branch were verbose,
duplicated reasoning across files, or carried a PR reference that
will rot. Trimmed each to the smallest signal a future reader needs:
* CI: 6 lines → 3. Keep the "without this, cargo compiles to a
zero-test binary" hazard; drop the cfg-syntax tutorial.
* metadata_writer_sqlite.rs: 8 lines → 5. Spell out who reads each
group of columns (our reader vs DuckDB) without re-explaining the
same thing twice.
* sqlite_metadata_provider_test.rs: 7 lines across two blocks → 1.
Replace the duplicated "why columns exist" lecture with a single
pointer to the writer file. Also drops the "since PR #115"
reference per the don't-cite-PR-numbers convention — the linkage
is now in the writer file's comment.1 parent 83e3972 commit 9378de8
3 files changed
Lines changed: 24 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
86 | 89 | | |
87 | 90 | | |
88 | | - | |
| 91 | + | |
89 | 92 | | |
90 | | - | |
| 93 | + | |
91 | 94 | | |
92 | 95 | | |
93 | 96 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
53 | 63 | | |
54 | 64 | | |
55 | 65 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
| 71 | + | |
71 | 72 | | |
72 | 73 | | |
73 | 74 | | |
| |||
76 | 77 | | |
77 | 78 | | |
78 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
79 | 85 | | |
80 | 86 | | |
81 | 87 | | |
| |||
93 | 99 | | |
94 | 100 | | |
95 | 101 | | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
96 | 105 | | |
97 | 106 | | |
98 | 107 | | |
| |||
0 commit comments