fix(tableau): vues sauvegardées en AST canonique, cache du comptage, synchro visibilité colonnes (#41)

This commit is contained in:
Colin Maudry
2026-07-10 14:44:14 +02:00
parent 0bfac680a5
commit 4f36022443
6 changed files with 389 additions and 19 deletions
+14 -1
View File
@@ -4,10 +4,23 @@ import polars as pl
from src.db import count_marches, query_marches, schema
from src.figures import DATA_SCHEMA
from src.utils.cache import cache
from src.utils.query_ast import ast_to_sql, filtermodel_to_ast, sort_model_to_sql
from src.utils.table import postprocess_page
@cache.memoize()
def _cached_count(where_sql: str, params: tuple) -> int:
"""Cache le COUNT(*) sur (where_sql, params).
AG Grid envoie une requête par bloc de défilement infini ; pour un même
filtre, tous les blocs partagent le même (where_sql, params) et donc le
même total — inutile de recompter un COUNT(*) sur ~1,5M lignes à chaque
bloc chargé (cf. `src.utils.table._fetch_page_sql`, même schéma).
"""
return count_marches(where_sql, params)
def fetch_grid_page(
filter_model,
sort_model,
@@ -23,7 +36,7 @@ def fetch_grid_page(
params = [*base_params, *filter_params]
order_by = sort_model_to_sql(sort_model, schema) or None
total = count_marches(where_sql, params)
total = _cached_count(where_sql, tuple(params))
limit = max(0, end_row - start_row)
page = query_marches(