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 |
|