35 lines
1.6 KiB
SQL
35 lines
1.6 KiB
SQL
-- ============================================================================
|
|||
|
|
-- Migration 005 — exposer le rowid dans la vue de consultation
|
||
|
|
--
|
||
|
|
-- L'index FTS5 est à contenu externe : il se joint à la table `textes` par
|
||
|
|
-- `rowid`. Or une vue SQLite n'a pas de rowid propre, et `v_textes.rowid`
|
||
|
|
-- échoue avec « no such column ».
|
||
|
|
--
|
||
|
|
-- Sans cette colonne, l'application ne peut pas à la fois filtrer sur les
|
||
|
|
-- champs dérivés de la vue (`devant_cc`) et joindre l'index plein texte — soit
|
||
|
|
-- exactement ce que demande la recherche à facettes.
|
||
|
|
-- ============================================================================
|
||
|
|
|
||
|
|
DROP VIEW v_textes;
|
||
|
|
|
||
|
|
CREATE VIEW v_textes AS
|
||
|
|
SELECT
|
||
|
|
t.rowid AS rowid,
|
||
|
|
t.*,
|
||
|
|
(SELECT COUNT(*) FROM sources s WHERE s.texte_id = t.id) AS nb_sources,
|
||
|
|
(SELECT COUNT(*) FROM evenements e WHERE e.texte_id = t.id) AS nb_evenements,
|
||
|
|
CASE
|
||
|
|
WHEN t.statut = 'saisie_cc' THEN 1
|
||
|
|
WHEN EXISTS (SELECT 1 FROM decisions_cc d
|
||
|
|
WHERE d.texte_id = t.id
|
||
|
|
AND d.date_decision IS NULL
|
||
|
|
AND COALESCE(d.resultat, 'en_instance') = 'en_instance') THEN 1
|
||
|
|
WHEN EXISTS (SELECT 1 FROM evenements e
|
||
|
|
WHERE e.texte_id = t.id AND e.type_etape = 'saisine_cc')
|
||
|
|
AND NOT EXISTS (SELECT 1 FROM evenements e
|
||
|
|
WHERE e.texte_id = t.id AND e.type_etape = 'decision_cc')
|
||
|
|
AND t.statut <> 'promulguee' THEN 1
|
||
|
|
ELSE 0
|
||
|
|
END AS devant_cc
|
||
|
|
FROM textes t;
|