doc/book/fr/21-02-querier.fr.txt
brancholdstable
changeset 7074 e4580e5f0703
parent 6749 48f468f33704
parent 7073 4ce9e536dd66
child 7078 bad26a22fe29
child 7083 b8e35cde46e9
equal deleted inserted replaced
6749:48f468f33704 7074:e4580e5f0703
     1 .. -*- coding: utf-8 -*-
       
     2 
       
     3 Déroulement de l'éxecution d'une requête en multi-source avec insertion de sécurité
       
     4 ```````````````````````````````````````````````````````````````````````````````````
       
     5 
       
     6 * 3 sources (system, ldap (Euser) et rql (Card)
       
     7 * permission en lecture Card is elle appartient à l'utilisateur
       
     8 
       
     9 Soit la requête de départ: ::
       
    10 
       
    11   Any X,T WHERE X owned_by U, U login "syt", X title T
       
    12 
       
    13 1. récupération arbre de syntaxe et solution (+cache) ::
       
    14 
       
    15      -> {X: Card, U: Euser}, {X: Blog, U: Euser}, {X: Bookmark, U: Euser}
       
    16 
       
    17 2. insertion sécurité ::
       
    18 
       
    19      -> Any X,T WHERE X owned_by U, U login "syt", X title T, EXISTS(X owned_by UEID) / {X: Card, U: Euser}
       
    20         Any X,T WHERE X owned_by U, U login "syt", X title T / {X: Blog, U: Euser}, {X: Bookmark, U: Euser}
       
    21    
       
    22 3. construction plan
       
    23    0. preprocessing (annotation des arbres de syntaxe)
       
    24    
       
    25    1. Any U WHERE U login "syt" / {U: Euser}
       
    26       [system+ldap] => table1/varmap1{U:U2}
       
    27       
       
    28    2. Any X,T WHERE X owned_by U2, X title T / {X: Blog, U: Euser}, {X: Bookmark, U: Euser}
       
    29       [varmap1|system] => TABLE2
       
    30       
       
    31    3 Deux alernatives:
       
    32    
       
    33      1. Any X,T WHERE X is Card, X title T {X: Card} ::
       
    34 
       
    35           [system+rql] => table3/varmap3{X:X3, T:T3}
       
    36 	   
       
    37         Any X3,T3 WHERE X3 owned_by U2, X3 title T3, EXISTS(X owned_by UEID) / {X3: Card, U2: Euser} ::
       
    38 
       
    39           [(varmap1, varmap3)|system] => TABLE2
       
    40        
       
    41      2 Any X WHERE X is Card X owned_by U2, EXISTS(X owned_by UEID) / {X: Card, U2: Euser} ::
       
    42 
       
    43           [varmap1|system] => EIDS
       
    44 	   
       
    45        Any X,T WHERE X title T, X eid IN(EIDS) {X: Card} ::
       
    46 	 
       
    47           [system+rql] => TABLE2
       
    48    
       
    49    4. renvoie contenu TABLE2.
       
    50       Note : si aggrégat / tri / distinct TABLE2 est nécessairement une table temporaire et besoin d'une
       
    51       étape AggrStep supplémentaire
       
    52       
       
    53 4. éxécution du plan
       
    54 
       
    55 5. [construction description]
       
    56 
       
    57 6. renvoie ResultSet
       
    58 
       
    59 Notes sur UNION
       
    60 ```````````````
       
    61 
       
    62 * en multi-sources, les résultats des unions peuvent être mélangés