- `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.
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).