Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

total_filtered non cohérente #40

Closed
lpofredc opened this issue Aug 29, 2023 · 4 comments
Closed

total_filtered non cohérente #40

lpofredc opened this issue Aug 29, 2023 · 4 comments

Comments

@lpofredc
Copy link
Contributor

Sur une instance GeoNature 2.12.3 avec le module d'export 1.5.3 et Utils-Flask-SQLAlchemy 0.3.5, la valeur total_filtered d'un export correspond à la valeur du limit et non au nombre total de données filtrées. cf. la capture suivante ou l'on devrait avoir plus de 500000 données dans le total_filtered:

Screenshot 2023-08-29 at 17-07-28 https __geonature lpo-aura org

En effet, pour exemple, si l'on fait un count sur une sous-requête contenant un limit, bien on obtient le nombre de résultat 'limité':

WITH t1 AS (SELECT * FROM gn_synthese.synthese LIMIT 1000 OFFSET 0)
SELECT count(*)
FROM t1;

Cela vient a priori de l'éclatement de la fonction query de la classe GenericQuery en deux fonctions query et raw_query.

raw_query, on applique le limit :

if self.limit != -1:
q = q.limit(self.limit).offset(self.offset * self.limit)

query on compte le nombre de données AVEC le limit :

q = self.raw_query()
nb_results = q.count() if self.filters else nb_result_without_filter

En tentant de reproduire sur l'instance de démo, le pb est autre, la valeur limit n'est pas utilisée... le bloc items renvoie TOUS les résultats de la synthese. Il serait intéressant de vérifier la version de Utils-Flask-SQLAlchemy sur l'instance de démo. j'ai pu constater que la montée en version de Utils-Flask-SQLAlchemy ne s'est pas faite lors de la montée en version du module d'export.

@camillemonchicourt
Copy link
Member

Sur le serveur de DEMO, le module Exports est actuellement en 1.5.0.

lpofredc pushed a commit to lpofredc/Utils-Flask-SQLAlchemy that referenced this issue Aug 30, 2023
TheoLechemia pushed a commit that referenced this issue Sep 12, 2023
TheoLechemia pushed a commit that referenced this issue Sep 12, 2023
@cen-cgeier
Copy link

cen-cgeier commented Nov 28, 2023

Bonjour à tous,
Je me permets ce post car j'ai un questionnement à propos des dernières modifications apportées.

Le LIMIT est ajouté à q if self.limit != -1 dans la fonction raw_query.
Il est en revanche systématiquement envoyé à la requête q à la ligne 273.

q = self.raw_query(process_filter=True, with_limit=False)
total_filtered = q.count() if self.filters else nb_result_without_filter
data = self.set_limit(q).all()

N'est-ce pas redondant ou ne doit-il pas y avoir if self.limit != -1 en amont de la ligne ligne 273?
Il semble que l'envoie systématique du LIMIT à la ligne 273 soit problématique lorsque limit=-1 (PnX-SI/gn_module_ZH#42)

Cette proposition semble résoudre le problème évoqué dans PnX-SI/gn_module_ZH#42

        data = self.set_limit(q).all() if self.limit != -1 else q.all()

Mais je ne sais pas si ceci correspond à ce que vos orientations de développement

@TheoLechemia
Copy link
Member

TheoLechemia commented Nov 28, 2023

Salut,
Je pense qu'il faut bannir l'utilisation du -1 qui est potentiellement dangereuse et peut faire tomber un serveur.
Est-ce qu'il y a vraiment des cas d'usage ?

@cen-cgeier
Copy link

cen-cgeier commented Nov 28, 2023

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

No branches or pull requests

4 participants