Author: bpoussin Date: 2012-01-07 14:48:37 +0100 (Sat, 07 Jan 2012) New Revision: 1297 Url: http://nuiton.org/repositories/revision/wikitty/1297 Log: Evolution #1883: Change Query API to permit use of Select as Value of Terminal condition maj de la doc Modified: trunk/src/site/rst/user/query.rst Modified: trunk/src/site/rst/user/query.rst =================================================================== --- trunk/src/site/rst/user/query.rst 2012-01-07 12:23:36 UTC (rev 1296) +++ trunk/src/site/rst/user/query.rst 2012-01-07 13:48:37 UTC (rev 1297) @@ -67,12 +67,15 @@ De nombreuses contraintes sont disponibles pour créer vos recherches : -* Egalité : eq - Vérifie si un champ est égal a une valeur, si le champs est un - champs texte, il est possible d'ajouter des "*" en début et en fin de la - chaîne de recherche pour faire l'équivalent d'un startsWith ou endsWith. Si - vous utilisez WikittyQueryMaker les méthodes sw (startsWith) et ew (endsWith) - font ce travail pour vous.:: +Egalité : eq +++++++++++++ +Vérifie si un champ est égal a une valeur, si le champs est un +champs texte, il est possible d'ajouter des "*" en début et en fin de la +chaîne de recherche pour faire l'équivalent d'un startsWith ou endsWith. Si +vous utilisez WikittyQueryMaker les méthodes sw (startsWith) et ew (endsWith) +font ce travail pour vous.:: + WikittyQuery q = new WikittyQueryMaker().eq(User.ELEMENT_FIELD_USER_LASTNAME, "poussin").end(); WikittyQuery q = new WikittyQueryMaker().eq(User.ELEMENT_FIELD_USER_LASTNAME, "*ssin").end(); WikittyQuery q = new WikittyQueryMaker().ew(User.ELEMENT_FIELD_USER_LASTNAME, "ssin").end(); @@ -81,10 +84,13 @@ WikittyQuery q = WikittyQueryParser.parse("User.lastname=*ssin"); WikittyQuery q = WikittyQueryParser.parse("User.lastname=*ssin"); -* Non égalité : neq - Vérifie si un champ n'est pas égal a une valeur. De la - même façon que le eq, il est possible d'ajouter des '*'. Ou d'utiliser les - méthode notsw et notew.:: +Non égalité : neq ++++++++++++++++++ +Vérifie si un champ n'est pas égal a une valeur. De la +même façon que le eq, il est possible d'ajouter des '*'. Ou d'utiliser les +méthode notsw et notew.:: + WikittyQuery q = new WikittyQueryMaker().ne(User.ELEMENT_FIELD_USER_LASTNAME, "poussin").end(); WikittyQuery q = new WikittyQueryMaker().ne(User.ELEMENT_FIELD_USER_LASTNAME, "*ssin").end(); WikittyQuery q = new WikittyQueryMaker().notew(User.ELEMENT_FIELD_USER_LASTNAME, "ssin").end(); @@ -93,56 +99,74 @@ WikittyQuery q = WikittyQueryParser.parse("User.lastname!=*ssin"); WikittyQuery q = WikittyQueryParser.parse("User.lastname!=*ssin"); -* Contient tous : containsAll - Vérifie si un champ multivalué contient au moins - une valeur de la liste des valeurs passées en argument:: +Contient tous : containsAll ++++++++++++++++++++++++++++ +Vérifie si un champ multivalué contient au moins une valeur de la liste des +valeurs passées en argument:: + WikittyQuery q = new WikittyQueryMaker() .containsOne(User.ELEMENT_FIELD_USER_LASTNAME, "poussin", "couteau").end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname={poussin, couteau}"); -* Egalité d'extension : exteq - Vérifie si un Wikitty possède une extension:: +Egalité d'extension : exteq ++++++++++++++++++++++++++++ +Vérifie si un Wikitty possède une extension:: + WikittyQuery q = new WikittyQueryMaker() .exteq(User.EXT_USER).end(); WikittyQuery q = WikittyQueryParser.parse("extension=User"); -* Non égalité d'extension : extne - Vérifie qu'un Wikitty ne porte pas une -extension.:: +Non égalité d'extension : extne ++++++++++++++++++++++++++++++++ +Vérifie qu'un Wikitty ne porte pas une extension.:: + WikittyQuery q = new WikittyQueryMaker() .extne(User.EXT_USER).end(); WikittyQuery q = WikittyQueryParser.parse("extension!=User"); -* ContainsAll d'extension : extContainsAll - Vérifie si un Wikitty possède toutes - les extensions:: +ContainsAll d'extension : extContainsAll +++++++++++++++++++++++++++++++++++++++++ +Vérifie si un Wikitty possède toutes les extensions:: + WikittyQuery q = new WikittyQueryMaker() .extContainsAll(User.EXT_USER, Employee.EXT_EMPLOYEE).end(); WikittyQuery q = WikittyQueryParser.parse("extension=[User, Employee]"); -* Égalité d'identifiant : ideq - Vérifie qu'un Wikitty porte l'identifiant:: +Égalité d'identifiant : ideq +++++++++++++++++++++++++++++ +Vérifie qu'un Wikitty porte l'identifiant:: + WikittyQuery q = new WikittyQueryMaker() .ideq(User.EXT_USER).end(); WikittyQuery q = WikittyQueryParser.parse("id=1234567-1234-1234567"); -* Non égalité d'identifiant : idneq - Vérifie qu'un Wikitty ne porte pas -l'identifiant.:: +Non égalité d'identifiant : idneq ++++++++++++++++++++++++++++++++++ +Vérifie qu'un Wikitty ne porte pas l'identifiant.:: + WikittyQuery q = new WikittyQueryMaker() .idne(User.EXT_USER).end(); WikittyQuery q = WikittyQueryParser.parse("id!=1234567-1234-1234567"); -* Similitude : like - Vérifie qu'une chaîne de caractère est égale à une autre - sans tenir compte de la casse ni des accents. Cette opérateur ne recherche que - de façon textuelle, vous pouvez ajouter des '*' en début et fin de d'expression:: +Similitude : like ++++++++++++++++++ +Vérifie qu'une chaîne de caractère est égale à une autre +sans tenir compte de la casse ni des accents. Cette opérateur ne recherche que +de façon textuelle, vous pouvez ajouter des '*' en début et fin de d'expression:: + WikittyQuery q = new WikittyQueryMaker() .like(User.ELEMENT_FIELD_USER_FIRSTNAME, "helene").end(); WikittyQuery q = new WikittyQueryMaker() @@ -151,10 +175,13 @@ WikittyQuery q = WikittyQueryParser.parse("User.fistname LIKE helene"); WikittyQuery q = WikittyQueryParser.parse("User.fistname LIKE *lene"); -* Non similitude : unlike - Vérifie qu'une chaîne de caractère n'est pas égale à une autre - sans tenir compte de la casse ni des accents. Cette opérateur ne recherche que - de façon textuelle, vous pouvez ajouter des '*' en début et fin de d'expression:: +Non similitude : unlike ++++++++++++++++++++++++ +Vérifie qu'une chaîne de caractère n'est pas égale à une autre +sans tenir compte de la casse ni des accents. Cette opérateur ne recherche que +de façon textuelle, vous pouvez ajouter des '*' en début et fin de d'expression:: + WikittyQuery q = new WikittyQueryMaker() .unlike(User.ELEMENT_FIELD_USER_FIRSTNAME, "helene").end(); WikittyQuery q = new WikittyQueryMaker() @@ -163,108 +190,144 @@ WikittyQuery q = WikittyQueryParser.parse("User.fistname UNLIKE helene"); WikittyQuery q = WikittyQueryParser.parse("User.fistname UNLIKE *lene"); -* Supérieur strictement : gt - Vérifie qu'un champ est strictement supérieur à - une valeur. Cette condition s'applique surtout sur les champs de type Date et - Number:: +Supérieur strictement : gt +++++++++++++++++++++++++++ +Vérifie qu'un champ est strictement supérieur à +une valeur. Cette condition s'applique surtout sur les champs de type Date et +Number:: + WikittyQuery q = new WikittyQueryMaker() .gt(User.ELEMENT_FIELD_USER_AGE, 18).end(); WikittyQuery q = WikittyQueryParser.parse("User.age > 18"); -* Supérieur ou égal : ge - Vérifie si un champ est supérieur ou égal à une -valeur.:: +Supérieur ou égal : ge +++++++++++++++++++++++ +Vérifie si un champ est supérieur ou égal à une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .ge(User.ELEMENT_FIELD_USER_AGE, 18).end(); WikittyQuery q = WikittyQueryParser.parse("User.age >= 18"); -* Inférieur strictement : lt - Vérifie si un champ est strictement inférieur à -une valeur.:: +Inférieur strictement : lt +++++++++++++++++++++++++++ +Vérifie si un champ est strictement inférieur à une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .lt(User.ELEMENT_FIELD_USER_AGE, 18).end(); WikittyQuery q = WikittyQueryParser.parse("User.age < 18"); -* Inférieur ou égal : le - Vérifie si un champ est inférieur ou égal à une -valeur.:: +Inférieur ou égal : le +++++++++++++++++++++++ +Vérifie si un champ est inférieur ou égal à une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .le(User.ELEMENT_FIELD_USER_AGE, 18).end(); WikittyQuery q = WikittyQueryParser.parse("User.age <= 18"); -* Entre : bw - Vérifie si un champ est compris entre deux valeurs.:: +Entre : bw +++++++++++ +Vérifie si un champ est compris entre deux valeurs.:: + WikittyQuery q = new WikittyQueryMaker() .bw(Product.ELEMENT_FIELD_PRODUCT_PRICE, 2, 2.50).end(); WikittyQuery q = WikittyQueryParser.parse("Product.price=[2 TO 2.5]"); -* Commence par : sw - Vérifie si un champ de type chaîne commence par une valeur.:: +Commence par : sw ++++++++++++++++++ +Vérifie si un champ de type chaîne commence par une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .sw(User.ELEMENT_FIELD_USER_LASTNAME, "pous").end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname=pous*"); -* Ne commence pas par : notsw - Vérifie si un champ de type chaîne ne commence pas -par une valeur.:: +Ne commence pas par : notsw ++++++++++++++++++++++++++++ +Vérifie si un champ de type chaîne ne commence pas par une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .notsw(User.ELEMENT_FIELD_USER_LASTNAME, "pous").end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname!=pous*"); -* Termine par : ew - Vérifie si un champ de type chaîne termine par une valeur.:: +Termine par : ew +++++++++++++++++ +Vérifie si un champ de type chaîne termine par une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .ew(User.ELEMENT_FIELD_USER_LASTNAME, "sin").end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname=sin*"); -* Ne termine pas par : notew - Vérifie si un champs de type chaîne ne termine -pas par une valeur.:: +Ne termine pas par : notew +++++++++++++++++++++++++++ +Vérifie si un champs de type chaîne ne termine pas par une valeur.:: + WikittyQuery q = new WikittyQueryMaker() .notew(User.ELEMENT_FIELD_USER_LASTNAME, "pous").end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname!=pous*"); -* Mot-clé : keyword - Vérifie si la valeur est présente dans n'importe quel - champ de n'importe quelle extension en fulltext (pas de prise en compte de la - casse ou des accents).:: +Mot-clé : keyword ++++++++++++++++++ +Vérifie si la valeur est présente dans n'importe quel +champ de n'importe quelle extension en fulltext (pas de prise en compte de la +casse ou des accents).:: + WikittyQuery q = new WikittyQueryMaker() .keyword("partout").end(); WikittyQuery q = WikittyQueryParser.parse("partout"); -* Nul : isNull - Vérifie si la valeur d'un champ est nulle:: +Nul : isNull +++++++++++++ +Vérifie si la valeur d'un champ est nulle:: + WikittyQuery q = new WikittyQueryMaker() .isNull(User.ELEMENT_FIELD_USER_LASTNAME).end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname=NULL"); -* Non nul : isNotNull - Vérifie si la valeur d'un champ n'est pas nulle. +Non nul : isNotNull ++++++++++++++++++++ +Vérifie si la valeur d'un champ n'est pas nulle. + WikittyQuery q = new WikittyQueryMaker() .isNotNull(User.ELEMENT_FIELD_USER_LASTNAME).end(); WikittyQuery q = WikittyQueryParser.parse("User.lastname!=NULL"); -* False : rFalse - retourne toujours faux:: +False : rFalse +++++++++++++++ +retourne toujours faux:: + WikittyQuery q = new WikittyQueryMaker() .rFalse().end(); WikittyQuery q = WikittyQueryParser.parse("FALSE"); -* True : rTrue - retourne toujours vrai:: +True : rTrue +++++++++++++ +retourne toujours vrai:: WikittyQuery q = new WikittyQueryMaker() .rTrue().end(); @@ -274,13 +337,16 @@ Les noeuds à sous-requête ------------------------- -* Les noeuds à sous requêtes permettent de faire des requêtes complexes. +Les noeuds à sous requêtes permettent de faire des requêtes complexes. -* Non : not - Résultat inverse de la sous-requête. Permet de faire la négation - d'une condition. On ne peut ajouter qu'une condition dans un not, il faut - donc ajouter en premier soit un or, soit un and pour mettre plusieurs - conditions:: +Non : not ++++++++++ +Résultat inverse de la sous-requête. Permet de faire la négation +d'une condition. On ne peut ajouter qu'une condition dans un not, il faut +donc ajouter en premier soit un or, soit un and pour mettre plusieurs +conditions:: + WikittyQuery q = new WikittyQueryMaker() .not().rFalse().end(); // condition toujours vraie @@ -291,43 +357,45 @@ WikittyQuery q = WikittyQueryParser.parse("NOT(FALSE OR FALSE OR TRUE)"); -* Ou : or - Ou entre les différentes sous-requêtes. On peut ajouter autant - d'élément dans le or que l'on souhaite, en fait les éléments lui sont ajouté - tant qu'il n'est pas fermé (close). +Ou : or ++++++++ +Ou entre les différentes sous-requêtes. On peut ajouter autant +d'élément dans le or que l'on souhaite, en fait les éléments lui sont ajouté +tant qu'il n'est pas fermé (close). + WikittyQuery q = new WikittyQueryMaker() .or().rFalse().rTrue().rFalse().end(); // condition toujours vrai WikittyQuery q = WikittyQueryParser.parse("FALSE OR TRUE OR FALSE"); -* Et : and - Et entre les différentes sous-requêtes. On peut ajouter autant - d'élément dans le and que l'on souhaite, en fait les éléments lui sont ajouté - tant qu'il n'est pas fermé (close). +Et : and +++++++++ +Et entre les différentes sous-requêtes. On peut ajouter autant +d'élément dans le and que l'on souhaite, en fait les éléments lui sont ajouté +tant qu'il n'est pas fermé (close). + WikittyQuery q = new WikittyQueryMaker() .and().rFalse().rTrue().rTrue().end(); // condition toujours fausse WikittyQuery q = WikittyQueryParser.parse("FALSE AND TRUE AND TRUE"); WikittyQuery q = WikittyQueryParser.parse("FALSE TRUE TRUE"); -* Requête associée : in - Permet d'effectuer des jointures. Cette opérateur lie - deux requêtes entres elle. Le résultat d'un requête est utilisé comme un - containsOne dans l'autre. La requête suivante recherche tous les employés - en CDI, mais seulement ceux dont le nom de leur entreprise contient 'lutin'.:: +Selection : select +++++++++++++++++++ - WikittyQuery q = new WikittyQueryMaker() - and() - .eq("Employee.contract", "CDI") - .in("Employee.company").like("Company.name", "*Lutin*").end(); +Ajout d'un select pour définir le champs à retourner au +lieu de l'id. Le select doit toujours être le premier élément de la condition +ou utilisé à la place d'une valeur. - WikittyQuery q = WikittyQueryParser.parse( - "Employee.contract=CDI AND Employee.company in (Company.name LIKE *Lutin*)"); +Attention le select provoque la génération d'une deuxième requête, donc plus il +y a de select dans une requête plus elle demandera de ressource au serveur et +donc des temps de réponse plus long. -* Selection : select - Ajout d'un select pour définir le champs à retourner au - lieu de l'id. Le select doit toujours être le premier élément de la condition - ou du in. Dans l'exemple suivant au lieu de retourner l'id des employés - en CDI, on retourne leur nom. Si deux personnes avait le même nom, ce nom - ne serait retourné qu'une seule fois.:: +Dans l'exemple suivant au lieu de retourner +l'id des employés en CDI, on retourne leur nom. Si deux personnes avait le même +nom, ce nom ne serai retourné qu'une seule fois.:: WikittyQuery q = new WikittyQueryMaker() select("Employee.name").eq("Employee.contract", "CDI").end(); @@ -335,40 +403,50 @@ WikittyQuery q = WikittyQueryParser.parse( "SELECT Employee.name WHERE Employee.contract=CDI"); - Il est possible de coupler le select et le in, par exemple pour recherche - toutes les personnes nés le même jour qu'un évênement qui a eu lieu en france:: +Il est possible de coupler le select et toutes les conditions terminales, par +exemple pour recherche toutes les personnes nés le même jour qu'un évênement +qui a eu lieu en france:: WikittyQuery q = new WikittyQueryMaker() - .in("Person.birthday") + .containsOne("Person.birthday") .select("Event.date").like("Event.country", "france").end(); WikittyQuery q = WikittyQueryParser.parse( - "Person.birthday IN (SELECT Event.date WHERE Event.country LIKE france)"); + "Person.birthday={SELECT Event.date WHERE (Event.country LIKE france)}"); Il est possible d'ajouter des fonctions d'aggrégats dans le Select. Dans ce cas -le résultat retourné ne contient qu'un seul élément. L'aggrégat est fait les élements -retournés (de first à first+Limit) +le résultat retourné ne contient qu'un seul élément. L'aggrégat est fait sur les +élements retournés (de first à first+Limit) -* AVG fait la moyenne des valeurs, il faut donc que le champs sélectionnés soit - un Numeric:: +AVG +~~~ +Fait la moyenne des valeurs, il faut donc que le champs sélectionnés soit +un Numeric:: + WikittyQuery q = new WikittyQueryMaker() .select("Person.age", Aggregate.AVG).eq("Person.firstname", "Jean").end(); - + WikittyQuery q = WikittyQueryParser.parse( "SELECT AVG Person.age WHERE Person.firstname=Jean"); -* COUNT retourne le nombre d'élément retourné:: +COUNT +~~~~~ +Retourne le nombre d'élément retourné:: + WikittyQuery q = new WikittyQueryMaker() .select("Person.age", Aggregate.COUNT).eq("Person.firstname", "Jean").end(); WikittyQuery q = WikittyQueryParser.parse( "SELECT COUNT Person.age WHERE Person.firstname=Jean"); -* MAX retourne la plus grande valeur. MAX peut-etre utilisé sur tout type de champs - mais il est plus pertinant sur les champs: Numeric, Date, String:: +MAX +~~~ +Retourne la plus grande valeur. MAX peut-etre utilisé sur tout type de champs +mais il est plus pertinant sur les champs: Numeric, Date, String:: + // on recherche le plus jeune (plus grande date) des personnes s'appelant Jean WikittyQuery q = new WikittyQueryMaker() .select("Person.birthday", Aggregate.MAX).eq("Person.firstname", "Jean").end(); @@ -376,9 +454,12 @@ WikittyQuery q = WikittyQueryParser.parse( "SELECT MAX Person.birthday WHERE Person.firstname=Jean"); -* MIN retourne la plus petite valeur. MIN peut-etre utilisé sur tout type de champs - mais il est plus pertinant sur les champs: Numeric, Date, String:: +MIN +~~~ +Retourne la plus petite valeur. MIN peut-etre utilisé sur tout type de champs +mais il est plus pertinant sur les champs: Numeric, Date, String:: + // on recherche le plus agé (plus petite date) des personnes s'appelant Jean WikittyQuery q = new WikittyQueryMaker() .select("Person.birthday", Aggregate.MIN).eq("Person.firstname", "Jean").end(); @@ -386,9 +467,12 @@ WikittyQuery q = WikittyQueryParser.parse( "SELECT MIN Person.birthday WHERE Person.firstname=Jean"); -* SUM retourne la somme de tous les nombres. Il faut donc que le champs sélectionné - soit un Numeric:: +SUM +~~~ +Retourne la somme de tous les nombres. Il faut donc que le champs sélectionné +soit un Numeric:: + // fait la somme des facture depuis le début d'année WikittyQuery q = new WikittyQueryMaker() .select("Invoice.amount", Aggregate.SUM).ge("Invoice.date", "01/01/2012").end(); @@ -405,8 +489,11 @@ - pathNode: champs contenant tous les id de noeuds pour atteindre un noeud (du root au noeud lui même inclus) - depthNode: entier indiquant la profondeur d'un noeud (root=1) -* Pour avoir tous les attachments de tous les noeuds de tous les arbres:: +Quelques exemples ++++++++++++++++++ +Pour avoir tous les attachments de tous les noeuds de tous les arbres:: + WikittyQuery q = new WikittyQueryMaker() .in(Element.ID) .select(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT).end(); @@ -414,7 +501,7 @@ WikittyQuery q = WikittyQueryParser.parse( "id IN (SELECT WikittyTreeNode.attachment)"); -* Pour avoir tous les attachments de tous les noeuds d'un arbre ayant le nom 'MyTree':: +Pour avoir tous les attachments de tous les noeuds d'un arbre ayant le nom 'MyTree':: WikittyQuery q = new WikittyQueryMaker() .in(Element.ID) @@ -425,8 +512,8 @@ WikittyQuery q = WikittyQueryParser.parse( "id IN (SELECT WikittyTreeNode.attachment WHERE rootNode IN (WikittyTreeNode.name=MyTree))"); -* Pour avoir tous les attachments d'un sous arbre commencant à un noeud ayant - le nom "MyBranch" d'un arbre ayant le nom 'MyTree':: +Pour avoir tous les attachments d'un sous arbre commencant à un noeud ayant +le nom "MyBranch" d'un arbre ayant le nom 'MyTree':: WikittyQuery q = new WikittyQueryMaker() .in(Element.ID) @@ -441,8 +528,8 @@ WikittyQuery q = WikittyQueryParser.parse("id IN (SELECT WikittyTreeNode.attachment WHERE + " rootNode IN (WikittyTreeNode.name=MyTree) AND pathNode IN (WikittyTreeNode.name=MyBranch))"); -* Pour avoir tous les attachments d'un arbre ayant le nom 'MyTree' jusqu'à une - profondeur de 3 (root, fils, sous fils):: +Pour avoir tous les attachments d'un arbre ayant le nom 'MyTree' jusqu'à une +profondeur de 3 (root, fils, sous fils):: WikittyQuery q = new WikittyQueryMaker() .in(Element.ID) @@ -459,36 +546,48 @@ Spécificité de WikittyQueryMaker -------------------------------- -* Fermeture d'un noeud: close. Lorsqu'on ouvre un element a sous noeud comme - or, and, not, in, select, il faut pouvoir le fermer pour continuer la - construction de la condition. Pour cela on utilise close(), qui ferme la - dernière condition non terminale.:: +conversion de type +++++++++++++++++++ +Il est possible de passer en argument des méthodes des +objets qui seront directement converti en leur representation String. Les +types supportés sont BusinessEntity, Wikitty, Date, Calendar, Number, Boolean. +Pour un objet Wikitty ou un BusinessEntity on utilise l'id. + +Fermeture d'un noeud: close ++++++++++++++++++++++++++++ + +Lorsqu'on ouvre un element a sous noeud comme +or, and, il faut pouvoir le fermer pour continuer la +construction de la condition. Pour cela on utilise close(), qui ferme la +dernière condition non terminale.:: + WikittyQuery q = new WikittyQueryMaker() .and().or()....close(/*fermeture du or*/).close(/*fermeture du and*/) - .not().and().....end(/*fermeture de tous les elements non ferme (and, not)*/); + .not().and().....end(/*fermeture de tous les elements non ferme (and)*/); -* conversion de type: Il est possible de passer en argument des méthodes des - objets qui seront directement converti en leur representation String. Les - types supportés sont BusinessEntity, Wikitty, Date, Calendar, Number, Boolean. - Pour un objet Wikitty ou un BusinessEntity on utilise l'id. +wikitty ++++++++ -* wikitty: Normalement si l'on passe un wikitty en parametre de méthode - de WikittyQueryMaker, la condition se fait sur l'id, mais on peut vouloir - que le Wikitty soit pris comme exemple de condition (query by exemple) - Dans ce cas, on peut utiliser:: +Normalement si l'on passe un wikitty en parametre de méthode +de WikittyQueryMaker, la condition se fait sur l'id (voir conversion de type), +mais on peut vouloir que le Wikitty soit pris comme exemple de +condition (query by exemple), dans ce cas, on peut utiliser:: WikittyQuery q = new WikittyQueryMaker() .wikitty(monWikitty).end(); -* Condition: Il est aussi possible d'ajouter toute une condition déjà - construite pour l'intégrer à une nouvelle. Dans ce cas cette condition est - prise comme une boîte noire, c'est à dire comme une condition terminale.:: +Condition ++++++++++ +Il est aussi possible d'ajouter toute une condition déjà +construite pour l'intégrer à une nouvelle. Dans ce cas cette condition est +prise comme une boîte noire, c'est à dire comme une condition terminale.:: + WikittyQuery qold = ... WikittyQuery q = new WikittyQueryMaker() - .and().condition(qold).eq(...).end(); + .and().condition(qold.getCondition()).eq(...).end(); Spécificité de WikittyQueryParser --------------------------------- @@ -498,16 +597,16 @@ Par exemple si vous utilisez souvent une longue requête comme:: WikittyQuery q = WikittyQueryParser.parse( - "id IN (SELECT WikittyTreeNode.attachment WHERE" - + " rootNode IN (WikittyTreeNode.name=MyTree)" - + " AND pathNode IN (WikittyTreeNode.name=MyBranch))"); + "id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=MyTree)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=MyBranch)})}"); Vous pouvez faire:: WikittyQueryParser parser = new WikittyQueryParser(); - parser.addAlias("MyAlias", "id IN (SELECT WikittyTreeNode.attachment WHERE" - + " rootNode IN (WikittyTreeNode.name=MyTree) AND" - + " pathNode IN (WikittyTreeNode.name=MyBranch))"); + parser.addAlias("MyAlias", "id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=MyTree)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=MyBranch)})}"); Si maintenant votre requête est:: @@ -517,17 +616,17 @@ Elle sera transformée avant d'être parsée en:: WikittyQuery q = parser.parseQuery( - "MyExt.field=toto AND id IN (SELECT WikittyTreeNode.attachment" - + " WHERE rootNode IN (WikittyTreeNode.name=MyTree)" - + " AND pathNode IN (WikittyTreeNode.name=MyBranch))"); + "MyExt.field=toto AND id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=MyTree)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=MyBranch)})}"); Vous pouvez aussi paramètrer vos alias, par exemple si le nom de l'arbre et de la branche doivent varier vous pouvez faire:: WikittyQueryParser parser = new WikittyQueryParser(); - parser.addAlias("MyAlias\(.*, .*\)", "id IN (SELECT WikittyTreeNode.attachment" - + " WHERE rootNode IN (WikittyTreeNode.name=$1)" - + " AND pathNode IN (WikittyTreeNode.name=$2))"); + parser.addAlias("MyAlias\(.*, .*\)", "id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=$1)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=$2)})}"); Vous pourrez donc ensuite écrire:: @@ -537,9 +636,9 @@ Elle sera transformée avant d'être parsée en:: WikittyQuery q = parser.parseQuery( - "MyExt.field=toto AND id IN (SELECT WikittyTreeNode.attachment" - + " WHERE rootNode IN (WikittyTreeNode.name=OtherTree)" - + " AND pathNode IN (WikittyTreeNode.name=OtherBranch))"); + "MyExt.field=toto AND id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)})}"); Recherche avancée ----------------- @@ -558,7 +657,7 @@ WikittyQuery q = WikittyQueryParser.parse("*.name==poussin"); Dans ce cas la recherche est une recherche fulltext qui peut-être utilisée -quel que soit le type du champs. Mais si vous souhaitez restraindre la recherche +quelque soit le type du champs. Mais si vous souhaitez restraindre la recherche aux champs d'un certain type vous pouvez ajouter le type à la fin.:: Date _1950 = new Date(...);