Skip to content

fix(iolib): JSON1SQLiteStore generierte Spalten konsistent (Single Source of Truth)#12

Merged
lepy merged 1 commit into
masterfrom
fix/json1sqlitestore-generated-columns
Jun 24, 2026
Merged

fix(iolib): JSON1SQLiteStore generierte Spalten konsistent (Single Source of Truth)#12
lepy merged 1 commit into
masterfrom
fix/json1sqlitestore-generated-columns

Conversation

@lepy

@lepy lepy commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Problem

JSON1SQLiteStore war nicht instanziierbar — bereits der Konstruktor warf
sqlite3.OperationalError: no such column: _sdata_project_sname. Die komplette
Testsuite tests/iolib/test_json1sqlitestore.py (32 Tests) scheiterte.

Ursache (drei verschränkte Defekte)

  1. Falsche Heuristik (8 Stellen): key.startswith('_sdata_') nahm an, jeder
    _sdata_*-Key sei eine generierte Spalte — das Schema materialisiert aber nur
    eine Teilmenge.
  2. Inkonsistente Spaltennamen: Spalten _sdata_parent/_sdata_project vs.
    Keys _sdata_parent_sname/_sdata_project_sname.
  3. Fehlende Spalte _sdata_suuid (von test_init und get_id_by_key/
    update_by_suuid benötigt).

Lösung

  • GENERATED_COLUMNS als Single Source of Truth (Konvention: Spaltenname ==
    JSON-Key == Index-Key).
  • _ensure_table erzeugt das Schema daraus; _sdata_suuid ergänzt (+ unique Index).
  • startswith-Heuristik → Mengen-Mitgliedschaft (key in GENERATED_COLUMNS);
    unbekannte _sdata_*-Keys fallen sauber auf json_extract zurück statt zu crashen.
  • Vollständige Design-Begründung inkl. verworfener Alternativen:
    docs/rfc/0001-json1sqlitestore-index-naming.md.

Tests

tests/iolib/test_json1sqlitestore.py: 32/32 grün (lokal via
./ci/local-ci.sh tests/iolib/test_json1sqlitestore.py).

…urce of Truth)

JSON1SQLiteStore war nicht instanziierbar (OperationalError: no such column).
Ursachen: (1) Heuristik key.startswith('_sdata_') nahm an, jeder _sdata_*-Key sei
eine generierte Spalte; (2) Spaltennamen _sdata_parent/_sdata_project vs. Keys
_sdata_parent_sname/_sdata_project_sname; (3) fehlende Spalte _sdata_suuid.

- GENERATED_COLUMNS als Single Source of Truth (Spaltenname == JSON-Key)
- _ensure_table erzeugt das Schema daraus; _sdata_suuid ergaenzt (+ unique Index)
- startswith-Heuristik -> Mengen-Mitgliedschaft (8 Stellen)
- Design-Begruendung: docs/rfc/0001-json1sqlitestore-index-naming.md

tests/iolib/test_json1sqlitestore.py: 32/32 gruen.
@lepy lepy merged commit 75f901f into master Jun 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant