Repository navigation
v1.2.1
v1.2.1
This release ships the SQLite-based Liberty LUT persistence pipeline (parse --db) and fixes a critical silent dedup data-loss bug in the UNIQUE constraint.
Feature: SQLite parse support (f10ad71d)
LibDatabase class with prepared INSERT, float32 BLOB conversion, and WAL journal mode. LibFile::writeToDB() iterates cells → output_pins → timing_arcs → arc_types and writes each LUT as a row in lut_entries with full hierarchy context (cell, pin, related_pin, timing_sense/type, PVT, index arrays, values). CLI flags --db, --pvt, --aged-year added to the parse subcommand. 8 GoogleTest cases.
Fix: when column added to UNIQUE constraint (v1.2.0)
The when attribute (boolean condition distinguishing timing arcs sharing the same related_pin) was not extracted, not stored, and not part of the UNIQUE constraint. On a production PDK with 531 cells / 6943 when conditions, this caused INSERT OR IGNORE to silently discard 77.7% of entries (counter: 35560, DB: 7936). After the fix, 35536 entries are preserved with full when fidelity — 27,772 conditional arcs, 717 distinct when expressions, zero data loss.
Key design decision: empty when is bound as "" (empty string) rather than SQL NULL, because SQLite's UNIQUE constraint treats multiple NULLs as non-conflicting, which would break idempotent re-writes for unconditional arcs.
TDD-driven: 3 new regression tests covering UNIQUE-level when dedup, integration-level distinct-when count, and multi-when survival.
Fix: CLI help text synced with README (v1.2.1)
The parse subcommand description in main.cpp now mentions the --db SQLite mode. README help section updated to match actual ./zlibvalidation -h output.
Files changed
10 files, 407 insertions, 42 deletions (cumulative v1.2.0 + v1.2.1)