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