6 Commits

Author SHA1 Message Date
Colin Maudry 117ce9a4ab fix(tableau): filtres à conditions multiples ignorés + tri non réinitialisé (#41)
Deux bugs découverts en usage réel sur /tableau :

1. filtermodel_to_ast lisait condition1/condition2 pour un filtre à
   deux conditions (ET/OU) sur une colonne — mais AG Grid >=29.2 (la
   version 35.2.0 utilisée ici) encode ça via une liste `conditions`,
   confirmé par la doc Dash AG Grid "Filter Model & Dash Callbacks" >
   "Filter Model Multiple Conditions". Le filtre était donc
   silencieusement ignoré (colonne exclue du AST, comme si aucun
   filtre n'était posé), d'où des résultats sans rapport avec les
   valeurs saisies. Corrigé : filtermodel_to_ast lit désormais
   `conditions` (N éléments) en priorité, avec repli sur
   condition1/condition2 (forme dépréciée mais "still accepted" selon
   AG Grid). L'inverse (ast_to_filtermodel, utilisé au rappel d'une
   vue sauvegardée) produit aussi la forme `conditions`.

2. Le bouton "Réinitialiser" ("Supprime tous les filtres et les tris")
   ne réinitialisait que filterModel, jamais le tri. Corrigé via
   resetColumnState (remet les colonnes à l'état de columnDefs, qui
   reflète déjà la visibilité choisie via le sélecteur de colonnes —
   seul le tri est donc affecté).

Reproduit et corrigé en TDD (tests/test_query_ast.py,
tests/test_grid.py), vérifié manuellement en navigateur par l'auteur
du rapport de bug.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 20:21:53 +02:00
Colin Maudry 4f36022443 fix(tableau): vues sauvegardées en AST canonique, cache du comptage, synchro visibilité colonnes (#41) 2026-07-10 14:44:14 +02:00
Colin Maudry a7662a8561 feat(query): sort_model_to_sql + sérialisation AST (#41)
Ajoute sort_model_to_sql (adapte le sortModel AG Grid vers sort_by_to_sql
existant) et ast_to_dict/ast_from_dict pour le round-trip JSON de l'AST,
nécessaire aux vues sauvegardées.
2026-07-10 07:57:41 +02:00
Colin Maudry 33ea1205cf feat(query): filtermodel_to_ast (filterModel AG Grid -> AST) (#41) 2026-07-10 07:53:46 +02:00
Colin Maudry 979874760d fix(query): range sur colonnes non-numériques + blank/notBlank sur numérique/date (#41)
- `range` était ignoré silencieusement (TRUE, pas de filtre) sur les
  colonnes texte/date car seul `_numeric_to_sql` le gérait. Ajout du
  cas `range` dans la branche texte/date (BETWEEN, CAST VARCHAR pour
  les dates, comme les autres opérateurs de comparaison).
- `blank`/`notBlank` comparaient toujours à `''`, ce qui fait planter
  DuckDB (Conversion Error) sur les colonnes numériques/date. Le
  check est déplacé après le calcul de is_numeric/col_is_date : ces
  types utilisent IS [NOT] NULL sans comparaison à chaîne vide.
2026-07-10 07:49:43 +02:00
Colin Maudry 68f615370f feat(query): AST de filtre + compilateur ast_to_sql (#41)
Ajoute une représentation canonique du filtre sous forme d'AST booléen
(Condition/And/Or/Not) et son compilateur vers SQL DuckDB paramétré
(ast_to_sql). Réutilise tokenize_text_filter pour les feuilles texte.

Fondation pour la migration /tableau vers dash-ag-grid : cet AST sera
alimenté par le filterModel d'AG Grid (tâche suivante) et, plus tard,
par un champ de requête booléenne libre (#97).
2026-07-10 07:44:30 +02:00