Ajout d'une méthode addContainsText sur les dao
Salut, j'ai besoin pour FaxToMail de faire des recherches sur des champs d'une entité. L'utilisateur peut don chercher les emails dont l'objet contient "ouaf" ou "chaussette" (exemple au hasard). J'aurais trouvé ça utile d'avoir une méthode addContainsText(String property, String value) sur le dao. Vous trouvez ça pertinent ? Kevin
Le 27/02/2014 10:06, Kevin Morin a écrit :
Salut,
j'ai besoin pour FaxToMail de faire des recherches sur des champs d'une entité. L'utilisateur peut don chercher les emails dont l'objet contient "ouaf" ou "chaussette" (exemple au hasard). J'aurais trouvé ça utile d'avoir une méthode addContainsText(String property, String value) sur le dao.
Vous trouvez ça pertinent ? Ca depend quel est le besoin, si il est simple, ca peut coller, mais si ca devient complexe (chauss* pour "chaussette", "chaussure"), c'est plus compliqué et il faut des solutions plus... chiadée. Genre, hibernate-search, solr, lucene...
-- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
On 27/02/2014 10:11, Eric Chatellier wrote:
Le 27/02/2014 10:06, Kevin Morin a écrit :
Salut,
j'ai besoin pour FaxToMail de faire des recherches sur des champs d'une entité. L'utilisateur peut don chercher les emails dont l'objet contient "ouaf" ou "chaussette" (exemple au hasard). J'aurais trouvé ça utile d'avoir une méthode addContainsText(String property, String value) sur le dao.
Vous trouvez ça pertinent ? Ca depend quel est le besoin, si il est simple, ca peut coller, mais si ca devient complexe (chauss* pour "chaussette", "chaussure"), c'est plus compliqué et il faut des solutions plus... chiadée. Genre, hibernate-search, solr, lucene...
En gros, pour rentrer dans le détail du code, dans le HqlAndParametersBuilder, au lieu d'avoir String hqlParameterName = putHqlParameterWithAvailableName(property, value); whereClauses.add(alias + "." + property + " = :" + hqlParameterName); comme dans addEquals, on aurait String hqlParameterName = putHqlParameterWithAvailableName(property, "%" + value + "%"); whereClauses.add("lower(" + alias + "." + property + ") like lower(:" + hqlParameterName + ")");
Le 27/02/2014 10:28, Kevin Morin a écrit :
En gros, pour rentrer dans le détail du code, dans le HqlAndParametersBuilder, au lieu d'avoir
String hqlParameterName = putHqlParameterWithAvailableName(property, value); whereClauses.add(alias + "." + property + " = :" + hqlParameterName);
comme dans addEquals, on aurait
String hqlParameterName = putHqlParameterWithAvailableName(property, "%" + value + "%"); whereClauses.add("lower(" + alias + "." + property + ") like lower(:" + hqlParameterName + ")"); Si c'est ton cas d'utilisation, la demande ne me choque pas. Mais à part pour une application spécifique, ca ne me semble pas vraiment réutilisable.
-- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
Le 27/02/2014 10:28, Kevin Morin a écrit :
String hqlParameterName = putHqlParameterWithAvailableName(property, "%" + value + "%"); whereClauses.add("lower(" + alias + "." + property + ") like lower(:" + hqlParameterName + ")");
Pour l'ajouter sur HqlAndParametersBuilder, je vois pas de problème, on pourrait aussi avoir addTextStartsWith et addTextEndsWith qui peuvent servir. On peut aussi l'ajouter sur TopiaQueryBuilderAddCriteriaStep (pour exposer ça sur l'API publique des DAO). Donc, a priori, +1. Ce qui me paraissait plus discutable, c'est d'ajouter un addTextLike parce que c'est selon moi trop spécifique à SQL. Après ça pose la question de ce qu'est ToPIA, est-ce une solution de persistence offrant une interface POJO, indépendante de l'infra ou est-ce qu'on pense que ToPIA est une solution de persistence sur SGBD relationnel supportant SQL. En quel cas, on pourrait exposer plus de choses propres à SQL par contre, faudra pas espérer porter topia sur une autre infra de persistence. En gros, faut savoir ce qu'on souhaite que ToPIA soit, c'était la question philosophique du jour. -- Brendan Le Ny, Code Lutin bleny@codelutin.com (+33) 02 40 50 29 28
Le Fri, 28 Feb 2014 09:55:42 +0100, Brendan Le Ny <bleny@codelutin.com> a écrit :
Le 27/02/2014 10:28, Kevin Morin a écrit :
String hqlParameterName = putHqlParameterWithAvailableName(property, "%" + value + "%"); whereClauses.add("lower(" + alias + "." + property + ") like lower(:" + hqlParameterName + ")");
Pour l'ajouter sur HqlAndParametersBuilder, je vois pas de problème, on pourrait aussi avoir addTextStartsWith et addTextEndsWith qui peuvent servir.
On peut aussi l'ajouter sur TopiaQueryBuilderAddCriteriaStep (pour exposer ça sur l'API publique des DAO).
Donc, a priori, +1.
Ce qui me paraissait plus discutable, c'est d'ajouter un addTextLike parce que c'est selon moi trop spécifique à SQL.
Après ça pose la question de ce qu'est ToPIA, est-ce une solution de persistence offrant une interface POJO, indépendante de l'infra ou est-ce qu'on pense que ToPIA est une solution de persistence sur SGBD relationnel supportant SQL. En quel cas, on pourrait exposer plus de choses propres à SQL par contre, faudra pas espérer porter topia sur une autre infra de persistence. En gros, faut savoir ce qu'on souhaite que ToPIA soit, c'était la question philosophique du jour.
Je dirai oui et non. Certes, la notion LIKE provient du monde SQL, mais rien n'empeche d'en avoir un équivalent ailleurs. C'est courant je pense de voir des notions transposées ailleurs. Donc je pense qu'il est possible d'envisager une opération addTextLike(), avec un mécanisme similaire ou non à SQL, et qu'il conviendra d'implémenter différement en fonction de l'infra de persistance. Je pense qu'il est possible d'avoir aujourd'hui des requetes avec un mécanisme "like" sur tout systeme de persistance. Et j'ai aussi envie de dire que pour le moment, topia, ce n'est pas autre chose que du SQL, et que c'est rarement bon de partir sur du "oué mais peut etre que dans 2 ans, on aura..." My two dimes. -- Yannick Martel
Le 28/02/2014 10:58, Yannick Martel a écrit :
avec un mécanisme similaire ou non à SQL, et qu'il conviendra d'implémenter différement en fonction de l'infra de persistance.
Ouais mais ton addTextLike(), il prend un argument avec des jokers genre "TRUC%BIDULE" ce '%', c'est de la syntaxe SQL. Certes, cette notion de "like" pourrait reprise dans les solutions de persistence de l'avenir, mais rien ne dit que le joker sera le même donc le code écrit avec l'API de Topia ne sera pas portable si le joker n'est plus '%', ou alors faudra parser à la main et remplacer les % par le nouveau joker ou une bidouille de genre : c'est pas la mort non plus. -- Brendan Le Ny, Code Lutin bleny@codelutin.com (+33) 02 40 50 29 28
Le Fri, 28 Feb 2014 11:03:04 +0100, Brendan Le Ny <bleny@codelutin.com> a écrit :
Le 28/02/2014 10:58, Yannick Martel a écrit :
avec un mécanisme similaire ou non à SQL, et qu'il conviendra d'implémenter différement en fonction de l'infra de persistance.
Ouais mais ton addTextLike(), il prend un argument avec des jokers genre "TRUC%BIDULE" ce '%', c'est de la syntaxe SQL.
Certes, cette notion de "like" pourrait reprise dans les solutions de persistence de l'avenir, mais rien ne dit que le joker sera le même donc le code écrit avec l'API de Topia ne sera pas portable si le joker n'est plus '%', ou alors faudra parser à la main et remplacer les % par le nouveau joker ou une bidouille de genre : c'est pas la mort non plus.
Ouep, c'est que je voyais moi : tu fourni un joker à Topia, et Topia est capable de le transcrire dans la bonne formulation pour la persistance -- Yannick Martel
participants (4)
-
Brendan Le Ny -
Eric Chatellier -
Kevin Morin -
Yannick Martel