server/test/unittest_rql2sql.py
branchstable
changeset 3762 e416186fb91c
parent 3752 4c77a1653374
child 3777 3ef8cdb5fb1c
child 3815 50b87f759b5d
equal deleted inserted replaced
3761:2c3b72faf05d 3762:e416186fb91c
    36 schema['in_state'].inlined = True
    36 schema['in_state'].inlined = True
    37 schema['comments'].inlined = False
    37 schema['comments'].inlined = False
    38 
    38 
    39 PARSER = [
    39 PARSER = [
    40     (r"Personne P WHERE P nom 'Zig\'oto';",
    40     (r"Personne P WHERE P nom 'Zig\'oto';",
    41      '''SELECT P.cw_eid
    41      '''SELECT _P.cw_eid
    42 FROM cw_Personne AS P
    42 FROM cw_Personne AS _P
    43 WHERE P.cw_nom=Zig\'oto'''),
    43 WHERE _P.cw_nom=Zig\'oto'''),
    44 
    44 
    45     (r'Personne P WHERE P nom ~= "Zig\"oto%";',
    45     (r'Personne P WHERE P nom ~= "Zig\"oto%";',
    46      '''SELECT P.cw_eid
    46      '''SELECT _P.cw_eid
    47 FROM cw_Personne AS P
    47 FROM cw_Personne AS _P
    48 WHERE P.cw_nom ILIKE Zig"oto%'''),
    48 WHERE _P.cw_nom ILIKE Zig"oto%'''),
    49     ]
    49     ]
    50 
    50 
    51 BASIC = [
    51 BASIC = [
    52 
    52 
       
    53     ("Any AS WHERE AS is Affaire",
       
    54      '''SELECT _AS.cw_eid
       
    55 FROM cw_Affaire AS _AS'''),
       
    56 
    53     ("Any X WHERE X is Affaire",
    57     ("Any X WHERE X is Affaire",
    54      '''SELECT X.cw_eid
    58      '''SELECT _X.cw_eid
    55 FROM cw_Affaire AS X'''),
    59 FROM cw_Affaire AS _X'''),
    56 
    60 
    57     ("Any X WHERE X eid 0",
    61     ("Any X WHERE X eid 0",
    58      '''SELECT 0'''),
    62      '''SELECT 0'''),
    59 
    63 
    60     ("Personne P",
    64     ("Personne P",
    61      '''SELECT P.cw_eid
    65      '''SELECT _P.cw_eid
    62 FROM cw_Personne AS P'''),
    66 FROM cw_Personne AS _P'''),
    63 
    67 
    64     ("Personne P WHERE P test TRUE",
    68     ("Personne P WHERE P test TRUE",
    65      '''SELECT P.cw_eid
    69      '''SELECT _P.cw_eid
    66 FROM cw_Personne AS P
    70 FROM cw_Personne AS _P
    67 WHERE P.cw_test=TRUE'''),
    71 WHERE _P.cw_test=TRUE'''),
    68 
    72 
    69     ("Personne P WHERE P test false",
    73     ("Personne P WHERE P test false",
    70      '''SELECT P.cw_eid
    74      '''SELECT _P.cw_eid
    71 FROM cw_Personne AS P
    75 FROM cw_Personne AS _P
    72 WHERE P.cw_test=FALSE'''),
    76 WHERE _P.cw_test=FALSE'''),
    73 
    77 
    74     ("Personne P WHERE P eid -1",
    78     ("Personne P WHERE P eid -1",
    75      '''SELECT -1'''),
    79      '''SELECT -1'''),
    76 
    80 
    77     ("Personne P LIMIT 20 OFFSET 10",
    81     ("Personne P LIMIT 20 OFFSET 10",
    78      '''SELECT P.cw_eid
    82      '''SELECT _P.cw_eid
    79 FROM cw_Personne AS P
    83 FROM cw_Personne AS _P
    80 LIMIT 20
    84 LIMIT 20
    81 OFFSET 10'''),
    85 OFFSET 10'''),
    82 
    86 
    83     ("Personne P WHERE S is Societe, P travaille S, S nom 'Logilab';",
    87     ("Personne P WHERE S is Societe, P travaille S, S nom 'Logilab';",
    84      '''SELECT rel_travaille0.eid_from
    88      '''SELECT rel_travaille0.eid_from
    85 FROM cw_Societe AS S, travaille_relation AS rel_travaille0
    89 FROM cw_Societe AS _S, travaille_relation AS rel_travaille0
    86 WHERE rel_travaille0.eid_to=S.cw_eid AND S.cw_nom=Logilab'''),
    90 WHERE rel_travaille0.eid_to=_S.cw_eid AND _S.cw_nom=Logilab'''),
    87 
    91 
    88     ("Personne P WHERE P concerne A, A concerne S, S nom 'Logilab', S is Societe;",
    92     ("Personne P WHERE P concerne A, A concerne S, S nom 'Logilab', S is Societe;",
    89      '''SELECT rel_concerne0.eid_from
    93      '''SELECT rel_concerne0.eid_from
    90 FROM concerne_relation AS rel_concerne0, concerne_relation AS rel_concerne1, cw_Societe AS S
    94 FROM concerne_relation AS rel_concerne0, concerne_relation AS rel_concerne1, cw_Societe AS _S
    91 WHERE rel_concerne0.eid_to=rel_concerne1.eid_from AND rel_concerne1.eid_to=S.cw_eid AND S.cw_nom=Logilab'''),
    95 WHERE rel_concerne0.eid_to=rel_concerne1.eid_from AND rel_concerne1.eid_to=_S.cw_eid AND _S.cw_nom=Logilab'''),
    92 
    96 
    93     ("Note N WHERE X evaluee N, X nom 'Logilab';",
    97     ("Note N WHERE X evaluee N, X nom 'Logilab';",
    94      '''SELECT rel_evaluee0.eid_to
    98      '''SELECT rel_evaluee0.eid_to
    95 FROM cw_Division AS X, evaluee_relation AS rel_evaluee0
    99 FROM cw_Division AS _X, evaluee_relation AS rel_evaluee0
    96 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom=Logilab
   100 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom=Logilab
    97 UNION ALL
   101 UNION ALL
    98 SELECT rel_evaluee0.eid_to
   102 SELECT rel_evaluee0.eid_to
    99 FROM cw_Personne AS X, evaluee_relation AS rel_evaluee0
   103 FROM cw_Personne AS _X, evaluee_relation AS rel_evaluee0
   100 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom=Logilab
   104 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom=Logilab
   101 UNION ALL
   105 UNION ALL
   102 SELECT rel_evaluee0.eid_to
   106 SELECT rel_evaluee0.eid_to
   103 FROM cw_Societe AS X, evaluee_relation AS rel_evaluee0
   107 FROM cw_Societe AS _X, evaluee_relation AS rel_evaluee0
   104 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom=Logilab
   108 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom=Logilab
   105 UNION ALL
   109 UNION ALL
   106 SELECT rel_evaluee0.eid_to
   110 SELECT rel_evaluee0.eid_to
   107 FROM cw_SubDivision AS X, evaluee_relation AS rel_evaluee0
   111 FROM cw_SubDivision AS _X, evaluee_relation AS rel_evaluee0
   108 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom=Logilab'''),
   112 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom=Logilab'''),
   109 
   113 
   110     ("Note N WHERE X evaluee N, X nom in ('Logilab', 'Caesium');",
   114     ("Note N WHERE X evaluee N, X nom in ('Logilab', 'Caesium');",
   111      '''SELECT rel_evaluee0.eid_to
   115      '''SELECT rel_evaluee0.eid_to
   112 FROM cw_Division AS X, evaluee_relation AS rel_evaluee0
   116 FROM cw_Division AS _X, evaluee_relation AS rel_evaluee0
   113 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom IN(Logilab, Caesium)
   117 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom IN(Logilab, Caesium)
   114 UNION ALL
   118 UNION ALL
   115 SELECT rel_evaluee0.eid_to
   119 SELECT rel_evaluee0.eid_to
   116 FROM cw_Personne AS X, evaluee_relation AS rel_evaluee0
   120 FROM cw_Personne AS _X, evaluee_relation AS rel_evaluee0
   117 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom IN(Logilab, Caesium)
   121 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom IN(Logilab, Caesium)
   118 UNION ALL
   122 UNION ALL
   119 SELECT rel_evaluee0.eid_to
   123 SELECT rel_evaluee0.eid_to
   120 FROM cw_Societe AS X, evaluee_relation AS rel_evaluee0
   124 FROM cw_Societe AS _X, evaluee_relation AS rel_evaluee0
   121 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom IN(Logilab, Caesium)
   125 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom IN(Logilab, Caesium)
   122 UNION ALL
   126 UNION ALL
   123 SELECT rel_evaluee0.eid_to
   127 SELECT rel_evaluee0.eid_to
   124 FROM cw_SubDivision AS X, evaluee_relation AS rel_evaluee0
   128 FROM cw_SubDivision AS _X, evaluee_relation AS rel_evaluee0
   125 WHERE rel_evaluee0.eid_from=X.cw_eid AND X.cw_nom IN(Logilab, Caesium)'''),
   129 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom IN(Logilab, Caesium)'''),
   126 
   130 
   127     ("Any X WHERE X creation_date TODAY, X is Affaire",
   131     ("Any X WHERE X creation_date TODAY, X is Affaire",
   128      '''SELECT X.cw_eid
   132      '''SELECT _X.cw_eid
   129 FROM cw_Affaire AS X
   133 FROM cw_Affaire AS _X
   130 WHERE DATE(X.cw_creation_date)=CURRENT_DATE'''),
   134 WHERE DATE(_X.cw_creation_date)=CURRENT_DATE'''),
   131 
   135 
   132     ("Any N WHERE G is CWGroup, G name N, E eid 12, E read_permission G",
   136     ("Any N WHERE G is CWGroup, G name N, E eid 12, E read_permission G",
   133      '''SELECT G.cw_name
   137      '''SELECT _G.cw_name
   134 FROM cw_CWGroup AS G, read_permission_relation AS rel_read_permission0
   138 FROM cw_CWGroup AS _G, read_permission_relation AS rel_read_permission0
   135 WHERE rel_read_permission0.eid_from=12 AND rel_read_permission0.eid_to=G.cw_eid'''),
   139 WHERE rel_read_permission0.eid_from=12 AND rel_read_permission0.eid_to=_G.cw_eid'''),
   136 
   140 
   137     ('Any Y WHERE U login "admin", U login Y', # stupid but valid...
   141     ('Any Y WHERE U login "admin", U login Y', # stupid but valid...
   138      """SELECT U.cw_login
   142      """SELECT _U.cw_login
   139 FROM cw_CWUser AS U
   143 FROM cw_CWUser AS _U
   140 WHERE U.cw_login=admin"""),
   144 WHERE _U.cw_login=admin"""),
   141 
   145 
   142     ('Any T WHERE T tags X, X is State',
   146     ('Any T WHERE T tags X, X is State',
   143      '''SELECT rel_tags0.eid_from
   147      '''SELECT rel_tags0.eid_from
   144 FROM cw_State AS X, tags_relation AS rel_tags0
   148 FROM cw_State AS _X, tags_relation AS rel_tags0
   145 WHERE rel_tags0.eid_to=X.cw_eid'''),
   149 WHERE rel_tags0.eid_to=_X.cw_eid'''),
   146 
   150 
   147     ('Any X,Y WHERE X eid 0, Y eid 1, X concerne Y',
   151     ('Any X,Y WHERE X eid 0, Y eid 1, X concerne Y',
   148      '''SELECT 0, 1
   152      '''SELECT 0, 1
   149 FROM concerne_relation AS rel_concerne0
   153 FROM concerne_relation AS rel_concerne0
   150 WHERE rel_concerne0.eid_from=0 AND rel_concerne0.eid_to=1'''),
   154 WHERE rel_concerne0.eid_from=0 AND rel_concerne0.eid_to=1'''),
   151 
   155 
   152     ("Any X WHERE X prenom 'lulu',"
   156     ("Any X WHERE X prenom 'lulu',"
   153      "EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   157      "EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   154      '''SELECT X.cw_eid
   158      '''SELECT _X.cw_eid
   155 FROM cw_Personne AS X
   159 FROM cw_Personne AS _X
   156 WHERE X.cw_prenom=lulu AND EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS G WHERE rel_owned_by0.eid_from=X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=G.cw_eid AND ((G.cw_name=lulufanclub) OR (G.cw_name=managers)))'''),
   160 WHERE _X.cw_prenom=lulu AND EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS _G WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=_G.cw_eid AND ((_G.cw_name=lulufanclub) OR (_G.cw_name=managers)))'''),
   157 
   161 
   158     ("Any X WHERE X prenom 'lulu',"
   162     ("Any X WHERE X prenom 'lulu',"
   159      "NOT EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   163      "NOT EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   160      '''SELECT X.cw_eid
   164      '''SELECT _X.cw_eid
   161 FROM cw_Personne AS X
   165 FROM cw_Personne AS _X
   162 WHERE X.cw_prenom=lulu AND NOT EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS G WHERE rel_owned_by0.eid_from=X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=G.cw_eid AND ((G.cw_name=lulufanclub) OR (G.cw_name=managers)))'''),
   166 WHERE _X.cw_prenom=lulu AND NOT EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS _G WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=_G.cw_eid AND ((_G.cw_name=lulufanclub) OR (_G.cw_name=managers)))'''),
   163 ]
   167 ]
   164 
   168 
   165 ADVANCED= [
   169 ADVANCED= [
   166     ("Societe S WHERE S nom 'Logilab' OR S nom 'Caesium'",
   170     ("Societe S WHERE S nom 'Logilab' OR S nom 'Caesium'",
   167      '''SELECT S.cw_eid
   171      '''SELECT _S.cw_eid
   168 FROM cw_Societe AS S
   172 FROM cw_Societe AS _S
   169 WHERE ((S.cw_nom=Logilab) OR (S.cw_nom=Caesium))'''),
   173 WHERE ((_S.cw_nom=Logilab) OR (_S.cw_nom=Caesium))'''),
   170 
   174 
   171     ('Any X WHERE X nom "toto", X eid IN (9700, 9710, 1045, 674)',
   175     ('Any X WHERE X nom "toto", X eid IN (9700, 9710, 1045, 674)',
   172     '''SELECT X.cw_eid
   176     '''SELECT _X.cw_eid
   173 FROM cw_Division AS X
   177 FROM cw_Division AS _X
   174 WHERE X.cw_nom=toto AND X.cw_eid IN(9700, 9710, 1045, 674)
   178 WHERE _X.cw_nom=toto AND _X.cw_eid IN(9700, 9710, 1045, 674)
   175 UNION ALL
   179 UNION ALL
   176 SELECT X.cw_eid
   180 SELECT _X.cw_eid
   177 FROM cw_Personne AS X
   181 FROM cw_Personne AS _X
   178 WHERE X.cw_nom=toto AND X.cw_eid IN(9700, 9710, 1045, 674)
   182 WHERE _X.cw_nom=toto AND _X.cw_eid IN(9700, 9710, 1045, 674)
   179 UNION ALL
   183 UNION ALL
   180 SELECT X.cw_eid
   184 SELECT _X.cw_eid
   181 FROM cw_Societe AS X
   185 FROM cw_Societe AS _X
   182 WHERE X.cw_nom=toto AND X.cw_eid IN(9700, 9710, 1045, 674)
   186 WHERE _X.cw_nom=toto AND _X.cw_eid IN(9700, 9710, 1045, 674)
   183 UNION ALL
   187 UNION ALL
   184 SELECT X.cw_eid
   188 SELECT _X.cw_eid
   185 FROM cw_SubDivision AS X
   189 FROM cw_SubDivision AS _X
   186 WHERE X.cw_nom=toto AND X.cw_eid IN(9700, 9710, 1045, 674)'''),
   190 WHERE _X.cw_nom=toto AND _X.cw_eid IN(9700, 9710, 1045, 674)'''),
   187 
   191 
   188     ('Any Y, COUNT(N) GROUPBY Y WHERE Y evaluee N;',
   192     ('Any Y, COUNT(N) GROUPBY Y WHERE Y evaluee N;',
   189      '''SELECT rel_evaluee0.eid_from, COUNT(rel_evaluee0.eid_to)
   193      '''SELECT rel_evaluee0.eid_from, COUNT(rel_evaluee0.eid_to)
   190 FROM evaluee_relation AS rel_evaluee0
   194 FROM evaluee_relation AS rel_evaluee0
   191 GROUP BY rel_evaluee0.eid_from'''),
   195 GROUP BY rel_evaluee0.eid_from'''),
   192 
   196 
   193     ("Any X WHERE X concerne B or C concerne X",
   197     ("Any X WHERE X concerne B or C concerne X",
   194      '''SELECT X.cw_eid
   198      '''SELECT _X.cw_eid
   195 FROM concerne_relation AS rel_concerne0, concerne_relation AS rel_concerne1, cw_Affaire AS X
   199 FROM concerne_relation AS rel_concerne0, concerne_relation AS rel_concerne1, cw_Affaire AS _X
   196 WHERE ((rel_concerne0.eid_from=X.cw_eid) OR (rel_concerne1.eid_to=X.cw_eid))'''),
   200 WHERE ((rel_concerne0.eid_from=_X.cw_eid) OR (rel_concerne1.eid_to=_X.cw_eid))'''),
   197 
   201 
   198     ("Any X WHERE X travaille S or X concerne A",
   202     ("Any X WHERE X travaille S or X concerne A",
   199      '''SELECT X.cw_eid
   203      '''SELECT _X.cw_eid
   200 FROM concerne_relation AS rel_concerne1, cw_Personne AS X, travaille_relation AS rel_travaille0
   204 FROM concerne_relation AS rel_concerne1, cw_Personne AS _X, travaille_relation AS rel_travaille0
   201 WHERE ((rel_travaille0.eid_from=X.cw_eid) OR (rel_concerne1.eid_from=X.cw_eid))'''),
   205 WHERE ((rel_travaille0.eid_from=_X.cw_eid) OR (rel_concerne1.eid_from=_X.cw_eid))'''),
   202 
   206 
   203     ("Any N WHERE A evaluee N or N ecrit_par P",
   207     ("Any N WHERE A evaluee N or N ecrit_par P",
   204      '''SELECT N.cw_eid
   208      '''SELECT _N.cw_eid
   205 FROM cw_Note AS N, evaluee_relation AS rel_evaluee0
   209 FROM cw_Note AS _N, evaluee_relation AS rel_evaluee0
   206 WHERE ((rel_evaluee0.eid_to=N.cw_eid) OR (N.cw_ecrit_par IS NOT NULL))'''),
   210 WHERE ((rel_evaluee0.eid_to=_N.cw_eid) OR (_N.cw_ecrit_par IS NOT NULL))'''),
   207 
   211 
   208     ("Any N WHERE A evaluee N or EXISTS(N todo_by U)",
   212     ("Any N WHERE A evaluee N or EXISTS(N todo_by U)",
   209      '''SELECT N.cw_eid
   213      '''SELECT _N.cw_eid
   210 FROM cw_Note AS N, evaluee_relation AS rel_evaluee0
   214 FROM cw_Note AS _N, evaluee_relation AS rel_evaluee0
   211 WHERE ((rel_evaluee0.eid_to=N.cw_eid) OR (EXISTS(SELECT 1 FROM todo_by_relation AS rel_todo_by1 WHERE rel_todo_by1.eid_from=N.cw_eid)))'''),
   215 WHERE ((rel_evaluee0.eid_to=_N.cw_eid) OR (EXISTS(SELECT 1 FROM todo_by_relation AS rel_todo_by1 WHERE rel_todo_by1.eid_from=_N.cw_eid)))'''),
   212 
   216 
   213     ("Any N WHERE A evaluee N or N todo_by U",
   217     ("Any N WHERE A evaluee N or N todo_by U",
   214      '''SELECT N.cw_eid
   218      '''SELECT _N.cw_eid
   215 FROM cw_Note AS N, evaluee_relation AS rel_evaluee0, todo_by_relation AS rel_todo_by1
   219 FROM cw_Note AS _N, evaluee_relation AS rel_evaluee0, todo_by_relation AS rel_todo_by1
   216 WHERE ((rel_evaluee0.eid_to=N.cw_eid) OR (rel_todo_by1.eid_from=N.cw_eid))'''),
   220 WHERE ((rel_evaluee0.eid_to=_N.cw_eid) OR (rel_todo_by1.eid_from=_N.cw_eid))'''),
   217 
   221 
   218     ("Any X WHERE X concerne B or C concerne X, B eid 12, C eid 13",
   222     ("Any X WHERE X concerne B or C concerne X, B eid 12, C eid 13",
   219      '''SELECT X.cw_eid
   223      '''SELECT _X.cw_eid
   220 FROM concerne_relation AS rel_concerne0, concerne_relation AS rel_concerne1, cw_Affaire AS X
   224 FROM concerne_relation AS rel_concerne0, concerne_relation AS rel_concerne1, cw_Affaire AS _X
   221 WHERE ((rel_concerne0.eid_from=X.cw_eid AND rel_concerne0.eid_to=12) OR (rel_concerne1.eid_from=13 AND rel_concerne1.eid_to=X.cw_eid))'''),
   225 WHERE ((rel_concerne0.eid_from=_X.cw_eid AND rel_concerne0.eid_to=12) OR (rel_concerne1.eid_from=13 AND rel_concerne1.eid_to=_X.cw_eid))'''),
   222 
   226 
   223     ('Any X WHERE X created_by U, X concerne B OR C concerne X, B eid 12, C eid 13',
   227     ('Any X WHERE X created_by U, X concerne B OR C concerne X, B eid 12, C eid 13',
   224      '''SELECT rel_created_by0.eid_from
   228      '''SELECT rel_created_by0.eid_from
   225 FROM concerne_relation AS rel_concerne1, concerne_relation AS rel_concerne2, created_by_relation AS rel_created_by0
   229 FROM concerne_relation AS rel_concerne1, concerne_relation AS rel_concerne2, created_by_relation AS rel_created_by0
   226 WHERE ((rel_concerne1.eid_from=rel_created_by0.eid_from AND rel_concerne1.eid_to=12) OR (rel_concerne2.eid_from=13 AND rel_concerne2.eid_to=rel_created_by0.eid_from))'''),
   230 WHERE ((rel_concerne1.eid_from=rel_created_by0.eid_from AND rel_concerne1.eid_to=12) OR (rel_concerne2.eid_from=13 AND rel_concerne2.eid_to=rel_created_by0.eid_from))'''),
   227 
   231 
   228     ('Any P WHERE P travaille_subdivision S1 OR P travaille_subdivision S2, S1 nom "logilab", S2 nom "caesium"',
   232     ('Any P WHERE P travaille_subdivision S1 OR P travaille_subdivision S2, S1 nom "logilab", S2 nom "caesium"',
   229      '''SELECT P.cw_eid
   233      '''SELECT _P.cw_eid
   230 FROM cw_Personne AS P, cw_SubDivision AS S1, cw_SubDivision AS S2, travaille_subdivision_relation AS rel_travaille_subdivision0, travaille_subdivision_relation AS rel_travaille_subdivision1
   234 FROM cw_Personne AS _P, cw_SubDivision AS _S1, cw_SubDivision AS _S2, travaille_subdivision_relation AS rel_travaille_subdivision0, travaille_subdivision_relation AS rel_travaille_subdivision1
   231 WHERE ((rel_travaille_subdivision0.eid_from=P.cw_eid AND rel_travaille_subdivision0.eid_to=S1.cw_eid) OR (rel_travaille_subdivision1.eid_from=P.cw_eid AND rel_travaille_subdivision1.eid_to=S2.cw_eid)) AND S1.cw_nom=logilab AND S2.cw_nom=caesium'''),
   235 WHERE ((rel_travaille_subdivision0.eid_from=_P.cw_eid AND rel_travaille_subdivision0.eid_to=_S1.cw_eid) OR (rel_travaille_subdivision1.eid_from=_P.cw_eid AND rel_travaille_subdivision1.eid_to=_S2.cw_eid)) AND _S1.cw_nom=logilab AND _S2.cw_nom=caesium'''),
   232 
   236 
   233     ('Any X WHERE T tags X',
   237     ('Any X WHERE T tags X',
   234      '''SELECT rel_tags0.eid_to
   238      '''SELECT rel_tags0.eid_to
   235 FROM tags_relation AS rel_tags0'''),
   239 FROM tags_relation AS rel_tags0'''),
   236 
   240 
   238      '''SELECT rel_in_basket0.eid_from
   242      '''SELECT rel_in_basket0.eid_from
   239 FROM in_basket_relation AS rel_in_basket0
   243 FROM in_basket_relation AS rel_in_basket0
   240 WHERE rel_in_basket0.eid_to=12'''),
   244 WHERE rel_in_basket0.eid_to=12'''),
   241 
   245 
   242     ('Any SEN,RN,OEN WHERE X from_entity SE, SE eid 44, X relation_type R, R eid 139, X to_entity OE, OE eid 42, R name RN, SE name SEN, OE name OEN',
   246     ('Any SEN,RN,OEN WHERE X from_entity SE, SE eid 44, X relation_type R, R eid 139, X to_entity OE, OE eid 42, R name RN, SE name SEN, OE name OEN',
   243      '''SELECT SE.cw_name, R.cw_name, OE.cw_name
   247      '''SELECT _SE.cw_name, _R.cw_name, _OE.cw_name
   244 FROM cw_CWAttribute AS X, cw_CWEType AS OE, cw_CWEType AS SE, cw_CWRType AS R
   248 FROM cw_CWAttribute AS _X, cw_CWEType AS _OE, cw_CWEType AS _SE, cw_CWRType AS _R
   245 WHERE X.cw_from_entity=44 AND SE.cw_eid=44 AND X.cw_relation_type=139 AND R.cw_eid=139 AND X.cw_to_entity=42 AND OE.cw_eid=42
   249 WHERE _X.cw_from_entity=44 AND _SE.cw_eid=44 AND _X.cw_relation_type=139 AND _R.cw_eid=139 AND _X.cw_to_entity=42 AND _OE.cw_eid=42
   246 UNION ALL
   250 UNION ALL
   247 SELECT SE.cw_name, R.cw_name, OE.cw_name
   251 SELECT _SE.cw_name, _R.cw_name, _OE.cw_name
   248 FROM cw_CWEType AS OE, cw_CWEType AS SE, cw_CWRType AS R, cw_CWRelation AS X
   252 FROM cw_CWEType AS _OE, cw_CWEType AS _SE, cw_CWRType AS _R, cw_CWRelation AS _X
   249 WHERE X.cw_from_entity=44 AND SE.cw_eid=44 AND X.cw_relation_type=139 AND R.cw_eid=139 AND X.cw_to_entity=42 AND OE.cw_eid=42'''),
   253 WHERE _X.cw_from_entity=44 AND _SE.cw_eid=44 AND _X.cw_relation_type=139 AND _R.cw_eid=139 AND _X.cw_to_entity=42 AND _OE.cw_eid=42'''),
   250 
   254 
   251     # Any O WHERE NOT S corrected_in O, S eid %(x)s, S concerns P, O version_of P, O in_state ST, NOT ST name "published", O modification_date MTIME ORDERBY MTIME DESC LIMIT 9
   255     # Any O WHERE NOT S corrected_in O, S eid %(x)s, S concerns P, O version_of P, O in_state ST, NOT ST name "published", O modification_date MTIME ORDERBY MTIME DESC LIMIT 9
   252     ('Any O WHERE NOT S ecrit_par O, S eid 1, S inline1 P, O inline2 P',
   256     ('Any O WHERE NOT S ecrit_par O, S eid 1, S inline1 P, O inline2 P',
   253      '''SELECT O.cw_eid
   257      '''SELECT _O.cw_eid
   254 FROM cw_Note AS S, cw_Personne AS O
   258 FROM cw_Note AS _S, cw_Personne AS _O
   255 WHERE NOT EXISTS(SELECT 1 WHERE S.cw_ecrit_par=O.cw_eid) AND S.cw_eid=1 AND O.cw_inline2=S.cw_inline1'''),
   259 WHERE NOT EXISTS(SELECT 1 WHERE _S.cw_ecrit_par=_O.cw_eid) AND _S.cw_eid=1 AND _O.cw_inline2=_S.cw_inline1'''),
   256 
   260 
   257     ('DISTINCT Any S ORDERBY stockproc(SI) WHERE NOT S ecrit_par O, S para SI',
   261     ('DISTINCT Any S ORDERBY stockproc(SI) WHERE NOT S ecrit_par O, S para SI',
   258      '''SELECT T1.C0 FROM (SELECT DISTINCT S.cw_eid AS C0, STOCKPROC(S.cw_para) AS C1
   262      '''SELECT T1.C0 FROM (SELECT DISTINCT _S.cw_eid AS C0, STOCKPROC(_S.cw_para) AS C1
   259 FROM cw_Note AS S
   263 FROM cw_Note AS _S
   260 WHERE S.cw_ecrit_par IS NULL
   264 WHERE _S.cw_ecrit_par IS NULL
   261 ORDER BY 2) AS T1'''),
   265 ORDER BY 2) AS T1'''),
   262 
   266 
   263     ('Any N WHERE N todo_by U, N is Note, U eid 2, N filed_under T, T eid 3',
   267     ('Any N WHERE N todo_by U, N is Note, U eid 2, N filed_under T, T eid 3',
   264      # N would actually be invarient if U eid 2 had given a specific type to U
   268      # N would actually be invarient if U eid 2 had given a specific type to U
   265      '''SELECT N.cw_eid
   269      '''SELECT _N.cw_eid
   266 FROM cw_Note AS N, filed_under_relation AS rel_filed_under1, todo_by_relation AS rel_todo_by0
   270 FROM cw_Note AS _N, filed_under_relation AS rel_filed_under1, todo_by_relation AS rel_todo_by0
   267 WHERE rel_todo_by0.eid_from=N.cw_eid AND rel_todo_by0.eid_to=2 AND rel_filed_under1.eid_from=N.cw_eid AND rel_filed_under1.eid_to=3'''),
   271 WHERE rel_todo_by0.eid_from=_N.cw_eid AND rel_todo_by0.eid_to=2 AND rel_filed_under1.eid_from=_N.cw_eid AND rel_filed_under1.eid_to=3'''),
   268 
   272 
   269     ('Any N WHERE N todo_by U, U eid 2, P evaluee N, P eid 3',
   273     ('Any N WHERE N todo_by U, U eid 2, P evaluee N, P eid 3',
   270      '''SELECT rel_evaluee1.eid_to
   274      '''SELECT rel_evaluee1.eid_to
   271 FROM evaluee_relation AS rel_evaluee1, todo_by_relation AS rel_todo_by0
   275 FROM evaluee_relation AS rel_evaluee1, todo_by_relation AS rel_todo_by0
   272 WHERE rel_evaluee1.eid_to=rel_todo_by0.eid_from AND rel_todo_by0.eid_to=2 AND rel_evaluee1.eid_from=3'''),
   276 WHERE rel_evaluee1.eid_to=rel_todo_by0.eid_from AND rel_todo_by0.eid_to=2 AND rel_evaluee1.eid_from=3'''),
   276      '''SELECT 2, rel_owned_by0.eid_to
   280      '''SELECT 2, rel_owned_by0.eid_to
   277 FROM owned_by_relation AS rel_owned_by0
   281 FROM owned_by_relation AS rel_owned_by0
   278 WHERE rel_owned_by0.eid_from=1 AND NOT EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by1 WHERE rel_owned_by1.eid_from=2 AND rel_owned_by0.eid_to=rel_owned_by1.eid_to)'''),
   282 WHERE rel_owned_by0.eid_from=1 AND NOT EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by1 WHERE rel_owned_by1.eid_from=2 AND rel_owned_by0.eid_to=rel_owned_by1.eid_to)'''),
   279 
   283 
   280     ('Any GN WHERE X in_group G, G name GN, (G name "managers" OR EXISTS(X copain T, T login in ("comme", "cochon")))',
   284     ('Any GN WHERE X in_group G, G name GN, (G name "managers" OR EXISTS(X copain T, T login in ("comme", "cochon")))',
   281      '''SELECT G.cw_name
   285      '''SELECT _G.cw_name
   282 FROM cw_CWGroup AS G, in_group_relation AS rel_in_group0
   286 FROM cw_CWGroup AS _G, in_group_relation AS rel_in_group0
   283 WHERE rel_in_group0.eid_to=G.cw_eid AND ((G.cw_name=managers) OR (EXISTS(SELECT 1 FROM copain_relation AS rel_copain1, cw_CWUser AS T WHERE rel_copain1.eid_from=rel_in_group0.eid_from AND rel_copain1.eid_to=T.cw_eid AND T.cw_login IN(comme, cochon))))'''),
   287 WHERE rel_in_group0.eid_to=_G.cw_eid AND ((_G.cw_name=managers) OR (EXISTS(SELECT 1 FROM copain_relation AS rel_copain1, cw_CWUser AS _T WHERE rel_copain1.eid_from=rel_in_group0.eid_from AND rel_copain1.eid_to=_T.cw_eid AND _T.cw_login IN(comme, cochon))))'''),
   284 
   288 
   285     ('Any C WHERE C is Card, EXISTS(X documented_by C)',
   289     ('Any C WHERE C is Card, EXISTS(X documented_by C)',
   286       """SELECT C.cw_eid
   290       """SELECT _C.cw_eid
   287 FROM cw_Card AS C
   291 FROM cw_Card AS _C
   288 WHERE EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by0 WHERE rel_documented_by0.eid_to=C.cw_eid)"""),
   292 WHERE EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by0 WHERE rel_documented_by0.eid_to=_C.cw_eid)"""),
   289 
   293 
   290     ('Any C WHERE C is Card, EXISTS(X documented_by C, X eid 12)',
   294     ('Any C WHERE C is Card, EXISTS(X documented_by C, X eid 12)',
   291       """SELECT C.cw_eid
   295       """SELECT _C.cw_eid
   292 FROM cw_Card AS C
   296 FROM cw_Card AS _C
   293 WHERE EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by0 WHERE rel_documented_by0.eid_from=12 AND rel_documented_by0.eid_to=C.cw_eid)"""),
   297 WHERE EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by0 WHERE rel_documented_by0.eid_from=12 AND rel_documented_by0.eid_to=_C.cw_eid)"""),
   294 
   298 
   295     ('Any T WHERE C is Card, C title T, EXISTS(X documented_by C, X eid 12)',
   299     ('Any T WHERE C is Card, C title T, EXISTS(X documented_by C, X eid 12)',
   296       """SELECT C.cw_title
   300       """SELECT _C.cw_title
   297 FROM cw_Card AS C
   301 FROM cw_Card AS _C
   298 WHERE EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by0 WHERE rel_documented_by0.eid_from=12 AND rel_documented_by0.eid_to=C.cw_eid)"""),
   302 WHERE EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by0 WHERE rel_documented_by0.eid_from=12 AND rel_documented_by0.eid_to=_C.cw_eid)"""),
   299 
   303 
   300     ('Any GN,L WHERE X in_group G, X login L, G name GN, EXISTS(X copain T, T login L, T login IN("comme", "cochon"))',
   304     ('Any GN,L WHERE X in_group G, X login L, G name GN, EXISTS(X copain T, T login L, T login IN("comme", "cochon"))',
   301      '''SELECT G.cw_name, X.cw_login
   305      '''SELECT _G.cw_name, _X.cw_login
   302 FROM cw_CWGroup AS G, cw_CWUser AS X, in_group_relation AS rel_in_group0
   306 FROM cw_CWGroup AS _G, cw_CWUser AS _X, in_group_relation AS rel_in_group0
   303 WHERE rel_in_group0.eid_from=X.cw_eid AND rel_in_group0.eid_to=G.cw_eid AND EXISTS(SELECT 1 FROM copain_relation AS rel_copain1, cw_CWUser AS T WHERE rel_copain1.eid_from=X.cw_eid AND rel_copain1.eid_to=T.cw_eid AND T.cw_login=X.cw_login AND T.cw_login IN(comme, cochon))'''),
   307 WHERE rel_in_group0.eid_from=_X.cw_eid AND rel_in_group0.eid_to=_G.cw_eid AND EXISTS(SELECT 1 FROM copain_relation AS rel_copain1, cw_CWUser AS _T WHERE rel_copain1.eid_from=_X.cw_eid AND rel_copain1.eid_to=_T.cw_eid AND _T.cw_login=_X.cw_login AND _T.cw_login IN(comme, cochon))'''),
   304 
   308 
   305     ('Any X,S, MAX(T) GROUPBY X,S ORDERBY S WHERE X is CWUser, T tags X, S eid IN(32), X in_state S',
   309     ('Any X,S, MAX(T) GROUPBY X,S ORDERBY S WHERE X is CWUser, T tags X, S eid IN(32), X in_state S',
   306      '''SELECT X.cw_eid, 32, MAX(rel_tags0.eid_from)
   310      '''SELECT _X.cw_eid, 32, MAX(rel_tags0.eid_from)
   307 FROM cw_CWUser AS X, tags_relation AS rel_tags0
   311 FROM cw_CWUser AS _X, tags_relation AS rel_tags0
   308 WHERE rel_tags0.eid_to=X.cw_eid AND X.cw_in_state=32
   312 WHERE rel_tags0.eid_to=_X.cw_eid AND _X.cw_in_state=32
   309 GROUP BY X.cw_eid'''),
   313 GROUP BY _X.cw_eid'''),
   310 
   314 
   311     ('Any COUNT(S),CS GROUPBY CS ORDERBY 1 DESC LIMIT 10 WHERE S is Affaire, C is Societe, S concerne C, C nom CS, (EXISTS(S owned_by 1)) OR (EXISTS(S documented_by N, N title "published"))',
   315     ('Any COUNT(S),CS GROUPBY CS ORDERBY 1 DESC LIMIT 10 WHERE S is Affaire, C is Societe, S concerne C, C nom CS, (EXISTS(S owned_by 1)) OR (EXISTS(S documented_by N, N title "published"))',
   312      '''SELECT COUNT(rel_concerne0.eid_from), C.cw_nom
   316      '''SELECT COUNT(rel_concerne0.eid_from), _C.cw_nom
   313 FROM concerne_relation AS rel_concerne0, cw_Societe AS C
   317 FROM concerne_relation AS rel_concerne0, cw_Societe AS _C
   314 WHERE rel_concerne0.eid_to=C.cw_eid AND ((EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by1 WHERE rel_concerne0.eid_from=rel_owned_by1.eid_from AND rel_owned_by1.eid_to=1)) OR (EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by2, cw_Card AS N WHERE rel_concerne0.eid_from=rel_documented_by2.eid_from AND rel_documented_by2.eid_to=N.cw_eid AND N.cw_title=published)))
   318 WHERE rel_concerne0.eid_to=_C.cw_eid AND ((EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by1 WHERE rel_concerne0.eid_from=rel_owned_by1.eid_from AND rel_owned_by1.eid_to=1)) OR (EXISTS(SELECT 1 FROM documented_by_relation AS rel_documented_by2, cw_Card AS _N WHERE rel_concerne0.eid_from=rel_documented_by2.eid_from AND rel_documented_by2.eid_to=_N.cw_eid AND _N.cw_title=published)))
   315 GROUP BY C.cw_nom
   319 GROUP BY _C.cw_nom
   316 ORDER BY 1 DESC
   320 ORDER BY 1 DESC
   317 LIMIT 10'''),
   321 LIMIT 10'''),
   318 
   322 
   319     ('Any X WHERE Y evaluee X, Y is CWUser',
   323     ('Any X WHERE Y evaluee X, Y is CWUser',
   320      '''SELECT rel_evaluee0.eid_to
   324      '''SELECT rel_evaluee0.eid_to
   321 FROM cw_CWUser AS Y, evaluee_relation AS rel_evaluee0
   325 FROM cw_CWUser AS _Y, evaluee_relation AS rel_evaluee0
   322 WHERE rel_evaluee0.eid_from=Y.cw_eid'''),
   326 WHERE rel_evaluee0.eid_from=_Y.cw_eid'''),
   323 
   327 
   324     ('Any L WHERE X login "admin", X identity Y, Y login L',
   328     ('Any L WHERE X login "admin", X identity Y, Y login L',
   325      '''SELECT Y.cw_login
   329      '''SELECT _Y.cw_login
   326 FROM cw_CWUser AS X, cw_CWUser AS Y
   330 FROM cw_CWUser AS _X, cw_CWUser AS _Y
   327 WHERE X.cw_login=admin AND X.cw_eid=Y.cw_eid'''),
   331 WHERE _X.cw_login=admin AND _X.cw_eid=_Y.cw_eid'''),
   328 
   332 
   329     ('Any L WHERE X login "admin", NOT X identity Y, Y login L',
   333     ('Any L WHERE X login "admin", NOT X identity Y, Y login L',
   330      '''SELECT Y.cw_login
   334      '''SELECT _Y.cw_login
   331 FROM cw_CWUser AS X, cw_CWUser AS Y
   335 FROM cw_CWUser AS _X, cw_CWUser AS _Y
   332 WHERE X.cw_login=admin AND NOT X.cw_eid=Y.cw_eid'''),
   336 WHERE _X.cw_login=admin AND NOT _X.cw_eid=_Y.cw_eid'''),
   333 
   337 
   334     ('Any L WHERE X login "admin", X identity Y?, Y login L',
   338     ('Any L WHERE X login "admin", X identity Y?, Y login L',
   335      '''SELECT Y.cw_login
   339      '''SELECT _Y.cw_login
   336 FROM cw_CWUser AS X LEFT OUTER JOIN cw_CWUser AS Y ON (X.cw_eid=Y.cw_eid)
   340 FROM cw_CWUser AS _X LEFT OUTER JOIN cw_CWUser AS _Y ON (_X.cw_eid=_Y.cw_eid)
   337 WHERE X.cw_login=admin'''),
   341 WHERE _X.cw_login=admin'''),
   338 
   342 
   339     ('Any XN ORDERBY XN WHERE X name XN, X is IN (Basket,Folder,Tag)',
   343     ('Any XN ORDERBY XN WHERE X name XN, X is IN (Basket,Folder,Tag)',
   340      '''SELECT X.cw_name
   344      '''SELECT _X.cw_name
   341 FROM cw_Basket AS X
   345 FROM cw_Basket AS _X
   342 UNION ALL
   346 UNION ALL
   343 SELECT X.cw_name
   347 SELECT _X.cw_name
   344 FROM cw_Folder AS X
   348 FROM cw_Folder AS _X
   345 UNION ALL
   349 UNION ALL
   346 SELECT X.cw_name
   350 SELECT _X.cw_name
   347 FROM cw_Tag AS X
   351 FROM cw_Tag AS _X
   348 ORDER BY 1'''),
   352 ORDER BY 1'''),
   349 
   353 
   350     # DISTINCT, can use relation under exists scope as principal
   354     # DISTINCT, can use relation under exists scope as principal
   351     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), EXISTS(X read_permission Y)',
   355     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), EXISTS(X read_permission Y)',
   352      '''SELECT DISTINCT X.cw_eid, rel_read_permission0.eid_to
   356      '''SELECT DISTINCT _X.cw_eid, rel_read_permission0.eid_to
   353 FROM cw_CWEType AS X, read_permission_relation AS rel_read_permission0
   357 FROM cw_CWEType AS _X, read_permission_relation AS rel_read_permission0
   354 WHERE X.cw_name=CWGroup AND rel_read_permission0.eid_to IN(1, 2, 3) AND EXISTS(SELECT 1 WHERE rel_read_permission0.eid_from=X.cw_eid)
   358 WHERE _X.cw_name=CWGroup AND rel_read_permission0.eid_to IN(1, 2, 3) AND EXISTS(SELECT 1 WHERE rel_read_permission0.eid_from=_X.cw_eid)
   355 UNION
   359 UNION
   356 SELECT DISTINCT X.cw_eid, rel_read_permission0.eid_to
   360 SELECT DISTINCT _X.cw_eid, rel_read_permission0.eid_to
   357 FROM cw_CWRType AS X, read_permission_relation AS rel_read_permission0
   361 FROM cw_CWRType AS _X, read_permission_relation AS rel_read_permission0
   358 WHERE X.cw_name=CWGroup AND rel_read_permission0.eid_to IN(1, 2, 3) AND EXISTS(SELECT 1 WHERE rel_read_permission0.eid_from=X.cw_eid)'''),
   362 WHERE _X.cw_name=CWGroup AND rel_read_permission0.eid_to IN(1, 2, 3) AND EXISTS(SELECT 1 WHERE rel_read_permission0.eid_from=_X.cw_eid)'''),
   359 
   363 
   360     # no distinct, Y can't be invariant
   364     # no distinct, Y can't be invariant
   361     ('Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), EXISTS(X read_permission Y)',
   365     ('Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), EXISTS(X read_permission Y)',
   362      '''SELECT X.cw_eid, Y.cw_eid
   366      '''SELECT _X.cw_eid, _Y.cw_eid
   363 FROM cw_CWEType AS X, cw_CWGroup AS Y
   367 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   364 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   368 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   365 UNION ALL
   369 UNION ALL
   366 SELECT X.cw_eid, Y.cw_eid
   370 SELECT _X.cw_eid, _Y.cw_eid
   367 FROM cw_CWEType AS X, cw_RQLExpression AS Y
   371 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   368 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   372 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   369 UNION ALL
   373 UNION ALL
   370 SELECT X.cw_eid, Y.cw_eid
   374 SELECT _X.cw_eid, _Y.cw_eid
   371 FROM cw_CWGroup AS Y, cw_CWRType AS X
   375 FROM cw_CWGroup AS _Y, cw_CWRType AS _X
   372 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   376 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   373 UNION ALL
   377 UNION ALL
   374 SELECT X.cw_eid, Y.cw_eid
   378 SELECT _X.cw_eid, _Y.cw_eid
   375 FROM cw_CWRType AS X, cw_RQLExpression AS Y
   379 FROM cw_CWRType AS _X, cw_RQLExpression AS _Y
   376 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)'''),
   380 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   377 
   381 
   378     # DISTINCT but NEGED exists, can't be invariant
   382     # DISTINCT but NEGED exists, can't be invariant
   379     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT EXISTS(X read_permission Y)',
   383     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT EXISTS(X read_permission Y)',
   380      '''SELECT DISTINCT X.cw_eid, Y.cw_eid
   384      '''SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   381 FROM cw_CWEType AS X, cw_CWGroup AS Y
   385 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   382 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   386 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   383 UNION
   387 UNION
   384 SELECT DISTINCT X.cw_eid, Y.cw_eid
   388 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   385 FROM cw_CWEType AS X, cw_RQLExpression AS Y
   389 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   386 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   390 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   387 UNION
   391 UNION
   388 SELECT DISTINCT X.cw_eid, Y.cw_eid
   392 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   389 FROM cw_CWGroup AS Y, cw_CWRType AS X
   393 FROM cw_CWGroup AS _Y, cw_CWRType AS _X
   390 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   394 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   391 UNION
   395 UNION
   392 SELECT DISTINCT X.cw_eid, Y.cw_eid
   396 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   393 FROM cw_CWRType AS X, cw_RQLExpression AS Y
   397 FROM cw_CWRType AS _X, cw_RQLExpression AS _Y
   394 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)'''),
   398 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   395 
   399 
   396     # should generate the same query as above
   400     # should generate the same query as above
   397     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   401     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   398      '''SELECT DISTINCT X.cw_eid, Y.cw_eid
   402      '''SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   399 FROM cw_CWEType AS X, cw_CWGroup AS Y
   403 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   400 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   404 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   401 UNION
   405 UNION
   402 SELECT DISTINCT X.cw_eid, Y.cw_eid
   406 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   403 FROM cw_CWEType AS X, cw_RQLExpression AS Y
   407 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   404 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   408 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   405 UNION
   409 UNION
   406 SELECT DISTINCT X.cw_eid, Y.cw_eid
   410 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   407 FROM cw_CWGroup AS Y, cw_CWRType AS X
   411 FROM cw_CWGroup AS _Y, cw_CWRType AS _X
   408 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   412 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   409 UNION
   413 UNION
   410 SELECT DISTINCT X.cw_eid, Y.cw_eid
   414 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   411 FROM cw_CWRType AS X, cw_RQLExpression AS Y
   415 FROM cw_CWRType AS _X, cw_RQLExpression AS _Y
   412 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)'''),
   416 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   413 
   417 
   414     # neged relation, can't be inveriant
   418     # neged relation, can't be inveriant
   415     ('Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   419     ('Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   416      '''SELECT X.cw_eid, Y.cw_eid
   420      '''SELECT _X.cw_eid, _Y.cw_eid
   417 FROM cw_CWEType AS X, cw_CWGroup AS Y
   421 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   418 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   422 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   419 UNION ALL
   423 UNION ALL
   420 SELECT X.cw_eid, Y.cw_eid
   424 SELECT _X.cw_eid, _Y.cw_eid
   421 FROM cw_CWEType AS X, cw_RQLExpression AS Y
   425 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   422 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   426 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   423 UNION ALL
   427 UNION ALL
   424 SELECT X.cw_eid, Y.cw_eid
   428 SELECT _X.cw_eid, _Y.cw_eid
   425 FROM cw_CWGroup AS Y, cw_CWRType AS X
   429 FROM cw_CWGroup AS _Y, cw_CWRType AS _X
   426 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)
   430 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   427 UNION ALL
   431 UNION ALL
   428 SELECT X.cw_eid, Y.cw_eid
   432 SELECT _X.cw_eid, _Y.cw_eid
   429 FROM cw_CWRType AS X, cw_RQLExpression AS Y
   433 FROM cw_CWRType AS _X, cw_RQLExpression AS _Y
   430 WHERE X.cw_name=CWGroup AND Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=X.cw_eid AND rel_read_permission0.eid_to=Y.cw_eid)'''),
   434 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   431 
   435 
   432     ('Any MAX(X)+MIN(X), N GROUPBY N WHERE X name N, X is IN (Basket, Folder, Tag);',
   436     ('Any MAX(X)+MIN(X), N GROUPBY N WHERE X name N, X is IN (Basket, Folder, Tag);',
   433      '''SELECT (MAX(T1.C0) + MIN(T1.C0)), T1.C1 FROM (SELECT X.cw_eid AS C0, X.cw_name AS C1
   437      '''SELECT (MAX(T1.C0) + MIN(T1.C0)), T1.C1 FROM (SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   434 FROM cw_Basket AS X
   438 FROM cw_Basket AS _X
   435 UNION ALL
   439 UNION ALL
   436 SELECT X.cw_eid AS C0, X.cw_name AS C1
   440 SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   437 FROM cw_Folder AS X
   441 FROM cw_Folder AS _X
   438 UNION ALL
   442 UNION ALL
   439 SELECT X.cw_eid AS C0, X.cw_name AS C1
   443 SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   440 FROM cw_Tag AS X) AS T1
   444 FROM cw_Tag AS _X) AS T1
   441 GROUP BY T1.C1'''),
   445 GROUP BY T1.C1'''),
   442 
   446 
   443     ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X data_name N, X data D, X data_format DF;',
   447     ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X data_name N, X data D, X data_format DF;',
   444      '''SELECT (MAX(T1.C1) + MIN(LENGTH(T1.C0))), T1.C2 FROM (SELECT X.cw_data AS C0, X.cw_eid AS C1, X.cw_data_name AS C2, X.cw_data_format AS C3
   448      '''SELECT (MAX(T1.C1) + MIN(LENGTH(T1.C0))), T1.C2 FROM (SELECT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   445 FROM cw_File AS X
   449 FROM cw_File AS _X
   446 UNION ALL
   450 UNION ALL
   447 SELECT X.cw_data AS C0, X.cw_eid AS C1, X.cw_data_name AS C2, X.cw_data_format AS C3
   451 SELECT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   448 FROM cw_Image AS X) AS T1
   452 FROM cw_Image AS _X) AS T1
   449 GROUP BY T1.C2,T1.C3
   453 GROUP BY T1.C2,T1.C3
   450 ORDER BY 1,2,T1.C3'''),
   454 ORDER BY 1,2,T1.C3'''),
   451 
   455 
   452     ('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R',
   456     ('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R',
   453      '''SELECT T1.C0 FROM (SELECT DISTINCT A.cw_sujet AS C0, A.cw_ref AS C1
   457      '''SELECT T1.C0 FROM (SELECT DISTINCT _A.cw_sujet AS C0, _A.cw_ref AS C1
   454 FROM cw_Affaire AS A
   458 FROM cw_Affaire AS _A
   455 ORDER BY 2) AS T1'''),
   459 ORDER BY 2) AS T1'''),
   456 
   460 
   457     ('DISTINCT Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 2, DF WHERE X data_name N, X data D, X data_format DF;',
   461     ('DISTINCT Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 2, DF WHERE X data_name N, X data D, X data_format DF;',
   458      '''SELECT T1.C0,T1.C1 FROM (SELECT DISTINCT (MAX(T1.C1) + MIN(LENGTH(T1.C0))) AS C0, T1.C2 AS C1, T1.C3 AS C2 FROM (SELECT DISTINCT X.cw_data AS C0, X.cw_eid AS C1, X.cw_data_name AS C2, X.cw_data_format AS C3
   462      '''SELECT T1.C0,T1.C1 FROM (SELECT DISTINCT (MAX(T1.C1) + MIN(LENGTH(T1.C0))) AS C0, T1.C2 AS C1, T1.C3 AS C2 FROM (SELECT DISTINCT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   459 FROM cw_File AS X
   463 FROM cw_File AS _X
   460 UNION
   464 UNION
   461 SELECT DISTINCT X.cw_data AS C0, X.cw_eid AS C1, X.cw_data_name AS C2, X.cw_data_format AS C3
   465 SELECT DISTINCT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   462 FROM cw_Image AS X) AS T1
   466 FROM cw_Image AS _X) AS T1
   463 GROUP BY T1.C2,T1.C3
   467 GROUP BY T1.C2,T1.C3
   464 ORDER BY 2,3) AS T1
   468 ORDER BY 2,3) AS T1
   465 '''),
   469 '''),
   466 
   470 
   467     # ambiguity in EXISTS() -> should union the sub-query
   471     # ambiguity in EXISTS() -> should union the sub-query
   468     ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))',
   472     ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))',
   469      '''SELECT T.cw_eid
   473      '''SELECT _T.cw_eid
   470 FROM cw_Tag AS T
   474 FROM cw_Tag AS _T
   471 WHERE NOT (T.cw_name IN(t1, t2)) AND EXISTS(SELECT 1 FROM tags_relation AS rel_tags0, cw_CWGroup AS X WHERE rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=X.cw_eid UNION SELECT 1 FROM tags_relation AS rel_tags1, cw_CWUser AS X WHERE rel_tags1.eid_from=T.cw_eid AND rel_tags1.eid_to=X.cw_eid)'''),
   475 WHERE NOT (_T.cw_name IN(t1, t2)) AND EXISTS(SELECT 1 FROM tags_relation AS rel_tags0, cw_CWGroup AS _X WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid UNION SELECT 1 FROM tags_relation AS rel_tags1, cw_CWUser AS _X WHERE rel_tags1.eid_from=_T.cw_eid AND rel_tags1.eid_to=_X.cw_eid)'''),
   472 
   476 
   473     # must not use a relation in EXISTS scope to inline a variable
   477     # must not use a relation in EXISTS scope to inline a variable
   474     ('Any U WHERE U eid IN (1,2), EXISTS(X owned_by U)',
   478     ('Any U WHERE U eid IN (1,2), EXISTS(X owned_by U)',
   475      '''SELECT U.cw_eid
   479      '''SELECT _U.cw_eid
   476 FROM cw_CWUser AS U
   480 FROM cw_CWUser AS _U
   477 WHERE U.cw_eid IN(1, 2) AND EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_to=U.cw_eid)'''),
   481 WHERE _U.cw_eid IN(1, 2) AND EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_to=_U.cw_eid)'''),
   478 
   482 
   479     ('Any U WHERE EXISTS(U eid IN (1,2), X owned_by U)',
   483     ('Any U WHERE EXISTS(U eid IN (1,2), X owned_by U)',
   480      '''SELECT U.cw_eid
   484      '''SELECT _U.cw_eid
   481 FROM cw_CWUser AS U
   485 FROM cw_CWUser AS _U
   482 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE U.cw_eid IN(1, 2) AND rel_owned_by0.eid_to=U.cw_eid)'''),
   486 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE _U.cw_eid IN(1, 2) AND rel_owned_by0.eid_to=_U.cw_eid)'''),
   483 
   487 
   484     ('Any COUNT(U) WHERE EXISTS (P owned_by U, P is IN (Note, Affaire))',
   488     ('Any COUNT(U) WHERE EXISTS (P owned_by U, P is IN (Note, Affaire))',
   485      '''SELECT COUNT(U.cw_eid)
   489      '''SELECT COUNT(_U.cw_eid)
   486 FROM cw_CWUser AS U
   490 FROM cw_CWUser AS _U
   487 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS P WHERE rel_owned_by0.eid_from=P.cw_eid AND rel_owned_by0.eid_to=U.cw_eid UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS P WHERE rel_owned_by1.eid_from=P.cw_eid AND rel_owned_by1.eid_to=U.cw_eid)'''),
   491 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS _P WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=_U.cw_eid UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS _P WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=_U.cw_eid)'''),
   488 
   492 
   489     ('Any MAX(X)',
   493     ('Any MAX(X)',
   490      '''SELECT MAX(X.eid)
   494      '''SELECT MAX(_X.eid)
   491 FROM entities AS X'''),
   495 FROM entities AS _X'''),
   492 
   496 
   493     ('Any MAX(X) WHERE X is Note',
   497     ('Any MAX(X) WHERE X is Note',
   494      '''SELECT MAX(X.cw_eid)
   498      '''SELECT MAX(_X.cw_eid)
   495 FROM cw_Note AS X'''),
   499 FROM cw_Note AS _X'''),
   496 
   500 
   497     ('Any X WHERE X eid > 12',
   501     ('Any X WHERE X eid > 12',
   498      '''SELECT X.eid
   502      '''SELECT _X.eid
   499 FROM entities AS X
   503 FROM entities AS _X
   500 WHERE X.eid>12'''),
   504 WHERE _X.eid>12'''),
   501 
   505 
   502     ('Any X WHERE X eid > 12, X is Note',
   506     ('Any X WHERE X eid > 12, X is Note',
   503      """SELECT X.eid
   507      """SELECT _X.eid
   504 FROM entities AS X
   508 FROM entities AS _X
   505 WHERE X.type='Note' AND X.eid>12"""),
   509 WHERE _X.type='Note' AND _X.eid>12"""),
   506 
   510 
   507     ('Any X, T WHERE X eid > 12, X title T, X is IN (Bookmark, Card)',
   511     ('Any X, T WHERE X eid > 12, X title T, X is IN (Bookmark, Card)',
   508      """SELECT X.cw_eid, X.cw_title
   512      """SELECT _X.cw_eid, _X.cw_title
   509 FROM cw_Bookmark AS X
   513 FROM cw_Bookmark AS _X
   510 WHERE X.cw_eid>12
   514 WHERE _X.cw_eid>12
   511 UNION ALL
   515 UNION ALL
   512 SELECT X.cw_eid, X.cw_title
   516 SELECT _X.cw_eid, _X.cw_title
   513 FROM cw_Card AS X
   517 FROM cw_Card AS _X
   514 WHERE X.cw_eid>12"""),
   518 WHERE _X.cw_eid>12"""),
   515 
   519 
   516     ('Any X',
   520     ('Any X',
   517      '''SELECT X.eid
   521      '''SELECT _X.eid
   518 FROM entities AS X'''),
   522 FROM entities AS _X'''),
   519 
   523 
   520     ('Any X GROUPBY X WHERE X eid 12',
   524     ('Any X GROUPBY X WHERE X eid 12',
   521      '''SELECT 12'''),
   525      '''SELECT 12'''),
   522 
   526 
   523     ('Any X GROUPBY X ORDERBY Y WHERE X eid 12, X login Y',
   527     ('Any X GROUPBY X ORDERBY Y WHERE X eid 12, X login Y',
   524      '''SELECT X.cw_eid
   528      '''SELECT _X.cw_eid
   525 FROM cw_CWUser AS X
   529 FROM cw_CWUser AS _X
   526 WHERE X.cw_eid=12
   530 WHERE _X.cw_eid=12
   527 GROUP BY X.cw_eid,X.cw_login
   531 GROUP BY _X.cw_eid,_X.cw_login
   528 ORDER BY X.cw_login'''),
   532 ORDER BY _X.cw_login'''),
   529 
   533 
   530     ('Any U,COUNT(X) GROUPBY U WHERE U eid 12, X owned_by U HAVING COUNT(X) > 10',
   534     ('Any U,COUNT(X) GROUPBY U WHERE U eid 12, X owned_by U HAVING COUNT(X) > 10',
   531      '''SELECT rel_owned_by0.eid_to, COUNT(rel_owned_by0.eid_from)
   535      '''SELECT rel_owned_by0.eid_to, COUNT(rel_owned_by0.eid_from)
   532 FROM owned_by_relation AS rel_owned_by0
   536 FROM owned_by_relation AS rel_owned_by0
   533 WHERE rel_owned_by0.eid_to=12
   537 WHERE rel_owned_by0.eid_to=12
   534 GROUP BY rel_owned_by0.eid_to
   538 GROUP BY rel_owned_by0.eid_to
   535 HAVING COUNT(rel_owned_by0.eid_from)>10'''),
   539 HAVING COUNT(rel_owned_by0.eid_from)>10'''),
   536 
   540 
   537     ('DISTINCT Any X ORDERBY stockproc(X) WHERE U login X',
   541     ('DISTINCT Any X ORDERBY stockproc(X) WHERE U login X',
   538      '''SELECT T1.C0 FROM (SELECT DISTINCT U.cw_login AS C0, STOCKPROC(U.cw_login) AS C1
   542      '''SELECT T1.C0 FROM (SELECT DISTINCT _U.cw_login AS C0, STOCKPROC(_U.cw_login) AS C1
   539 FROM cw_CWUser AS U
   543 FROM cw_CWUser AS _U
   540 ORDER BY 2) AS T1'''),
   544 ORDER BY 2) AS T1'''),
   541 
   545 
   542     ('DISTINCT Any X ORDERBY Y WHERE B bookmarked_by X, X login Y',
   546     ('DISTINCT Any X ORDERBY Y WHERE B bookmarked_by X, X login Y',
   543      '''SELECT T1.C0 FROM (SELECT DISTINCT X.cw_eid AS C0, X.cw_login AS C1
   547      '''SELECT T1.C0 FROM (SELECT DISTINCT _X.cw_eid AS C0, _X.cw_login AS C1
   544 FROM bookmarked_by_relation AS rel_bookmarked_by0, cw_CWUser AS X
   548 FROM bookmarked_by_relation AS rel_bookmarked_by0, cw_CWUser AS _X
   545 WHERE rel_bookmarked_by0.eid_to=X.cw_eid
   549 WHERE rel_bookmarked_by0.eid_to=_X.cw_eid
   546 ORDER BY 2) AS T1'''),
   550 ORDER BY 2) AS T1'''),
   547 
   551 
   548     ('DISTINCT Any X ORDERBY SN WHERE X in_state S, S name SN',
   552     ('DISTINCT Any X ORDERBY SN WHERE X in_state S, S name SN',
   549      '''SELECT T1.C0 FROM (SELECT DISTINCT X.cw_eid AS C0, S.cw_name AS C1
   553      '''SELECT T1.C0 FROM (SELECT DISTINCT _X.cw_eid AS C0, _S.cw_name AS C1
   550 FROM cw_Affaire AS X, cw_State AS S
   554 FROM cw_Affaire AS _X, cw_State AS _S
   551 WHERE X.cw_in_state=S.cw_eid
   555 WHERE _X.cw_in_state=_S.cw_eid
   552 UNION
   556 UNION
   553 SELECT DISTINCT X.cw_eid AS C0, S.cw_name AS C1
   557 SELECT DISTINCT _X.cw_eid AS C0, _S.cw_name AS C1
   554 FROM cw_CWUser AS X, cw_State AS S
   558 FROM cw_CWUser AS _X, cw_State AS _S
   555 WHERE X.cw_in_state=S.cw_eid
   559 WHERE _X.cw_in_state=_S.cw_eid
   556 UNION
   560 UNION
   557 SELECT DISTINCT X.cw_eid AS C0, S.cw_name AS C1
   561 SELECT DISTINCT _X.cw_eid AS C0, _S.cw_name AS C1
   558 FROM cw_Note AS X, cw_State AS S
   562 FROM cw_Note AS _X, cw_State AS _S
   559 WHERE X.cw_in_state=S.cw_eid
   563 WHERE _X.cw_in_state=_S.cw_eid
   560 ORDER BY 2) AS T1'''),
   564 ORDER BY 2) AS T1'''),
   561 
   565 
   562     ('Any O,AA,AB,AC ORDERBY AC DESC '
   566     ('Any O,AA,AB,AC ORDERBY AC DESC '
   563      'WHERE NOT S use_email O, S eid 1, O is EmailAddress, O address AA, O alias AB, O modification_date AC, '
   567      'WHERE NOT S use_email O, S eid 1, O is EmailAddress, O address AA, O alias AB, O modification_date AC, '
   564      'EXISTS(A use_email O, EXISTS(A identity B, NOT B in_group D, D name "guests", D is CWGroup), A is CWUser), B eid 2',
   568      'EXISTS(A use_email O, EXISTS(A identity B, NOT B in_group D, D name "guests", D is CWGroup), A is CWUser), B eid 2',
   565      '''SELECT O.cw_eid, O.cw_address, O.cw_alias, O.cw_modification_date
   569      '''SELECT _O.cw_eid, _O.cw_address, _O.cw_alias, _O.cw_modification_date
   566 FROM cw_EmailAddress AS O
   570 FROM cw_EmailAddress AS _O
   567 WHERE NOT EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email0 WHERE rel_use_email0.eid_from=1 AND rel_use_email0.eid_to=O.cw_eid) AND EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email1 WHERE rel_use_email1.eid_to=O.cw_eid AND EXISTS(SELECT 1 FROM cw_CWGroup AS D WHERE rel_use_email1.eid_from=2 AND NOT EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group2 WHERE rel_in_group2.eid_from=2 AND rel_in_group2.eid_to=D.cw_eid) AND D.cw_name=guests))
   571 WHERE NOT EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email0 WHERE rel_use_email0.eid_from=1 AND rel_use_email0.eid_to=_O.cw_eid) AND EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email1 WHERE rel_use_email1.eid_to=_O.cw_eid AND EXISTS(SELECT 1 FROM cw_CWGroup AS _D WHERE rel_use_email1.eid_from=2 AND NOT EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group2 WHERE rel_in_group2.eid_from=2 AND rel_in_group2.eid_to=_D.cw_eid) AND _D.cw_name=guests))
   568 ORDER BY 4 DESC'''),
   572 ORDER BY 4 DESC'''),
   569 
   573 
   570 
   574 
   571     ("Any X WHERE X eid 0, X eid 0",
   575     ("Any X WHERE X eid 0, X eid 0",
   572      '''SELECT 0'''),
   576      '''SELECT 0'''),
   573 
   577 
   574     ("Any X WHERE X eid 0, X eid 0, X test TRUE",
   578     ("Any X WHERE X eid 0, X eid 0, X test TRUE",
   575      '''SELECT X.cw_eid
   579      '''SELECT _X.cw_eid
   576 FROM cw_Personne AS X
   580 FROM cw_Personne AS _X
   577 WHERE X.cw_eid=0 AND X.cw_eid=0 AND X.cw_test=TRUE'''),
   581 WHERE _X.cw_eid=0 AND _X.cw_eid=0 AND _X.cw_test=TRUE'''),
   578 
   582 
   579     ("Any X,GROUP_CONCAT(TN) GROUPBY X ORDERBY XN WHERE T tags X, X name XN, T name TN, X is CWGroup",
   583     ("Any X,GROUP_CONCAT(TN) GROUPBY X ORDERBY XN WHERE T tags X, X name XN, T name TN, X is CWGroup",
   580      '''SELECT X.cw_eid, GROUP_CONCAT(T.cw_name)
   584      '''SELECT _X.cw_eid, GROUP_CONCAT(_T.cw_name)
   581 FROM cw_CWGroup AS X, cw_Tag AS T, tags_relation AS rel_tags0
   585 FROM cw_CWGroup AS _X, cw_Tag AS _T, tags_relation AS rel_tags0
   582 WHERE rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=X.cw_eid
   586 WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid
   583 GROUP BY X.cw_eid,X.cw_name
   587 GROUP BY _X.cw_eid,_X.cw_name
   584 ORDER BY X.cw_name'''),
   588 ORDER BY _X.cw_name'''),
   585 
   589 
   586     ("Any X,GROUP_CONCAT(TN) GROUPBY X ORDERBY XN WHERE T tags X, X name XN, T name TN",
   590     ("Any X,GROUP_CONCAT(TN) GROUPBY X ORDERBY XN WHERE T tags X, X name XN, T name TN",
   587      '''SELECT T1.C0, GROUP_CONCAT(T1.C1) FROM (SELECT X.cw_eid AS C0, T.cw_name AS C1, X.cw_name AS C2
   591      '''SELECT T1.C0, GROUP_CONCAT(T1.C1) FROM (SELECT _X.cw_eid AS C0, _T.cw_name AS C1, _X.cw_name AS C2
   588 FROM cw_CWGroup AS X, cw_Tag AS T, tags_relation AS rel_tags0
   592 FROM cw_CWGroup AS _X, cw_Tag AS _T, tags_relation AS rel_tags0
   589 WHERE rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=X.cw_eid
   593 WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid
   590 UNION ALL
   594 UNION ALL
   591 SELECT X.cw_eid AS C0, T.cw_name AS C1, X.cw_name AS C2
   595 SELECT _X.cw_eid AS C0, _T.cw_name AS C1, _X.cw_name AS C2
   592 FROM cw_State AS X, cw_Tag AS T, tags_relation AS rel_tags0
   596 FROM cw_State AS _X, cw_Tag AS _T, tags_relation AS rel_tags0
   593 WHERE rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=X.cw_eid
   597 WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid
   594 UNION ALL
   598 UNION ALL
   595 SELECT X.cw_eid AS C0, T.cw_name AS C1, X.cw_name AS C2
   599 SELECT _X.cw_eid AS C0, _T.cw_name AS C1, _X.cw_name AS C2
   596 FROM cw_Tag AS T, cw_Tag AS X, tags_relation AS rel_tags0
   600 FROM cw_Tag AS _T, cw_Tag AS _X, tags_relation AS rel_tags0
   597 WHERE rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=X.cw_eid) AS T1
   601 WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid) AS T1
   598 GROUP BY T1.C0,T1.C2
   602 GROUP BY T1.C0,T1.C2
   599 ORDER BY T1.C2'''),
   603 ORDER BY T1.C2'''),
   600 
   604 
   601     ]
   605     ]
   602 
   606 
   603 MULTIPLE_SEL = [
   607 MULTIPLE_SEL = [
   604     ("DISTINCT Any X,Y where P is Personne, P nom X , P prenom Y;",
   608     ("DISTINCT Any X,Y where P is Personne, P nom X , P prenom Y;",
   605      '''SELECT DISTINCT P.cw_nom, P.cw_prenom
   609      '''SELECT DISTINCT _P.cw_nom, _P.cw_prenom
   606 FROM cw_Personne AS P'''),
   610 FROM cw_Personne AS _P'''),
   607     ("Any X,Y where P is Personne, P nom X , P prenom Y, not P nom NULL;",
   611     ("Any X,Y where P is Personne, P nom X , P prenom Y, not P nom NULL;",
   608      '''SELECT P.cw_nom, P.cw_prenom
   612      '''SELECT _P.cw_nom, _P.cw_prenom
   609 FROM cw_Personne AS P
   613 FROM cw_Personne AS _P
   610 WHERE NOT (P.cw_nom IS NULL)'''),
   614 WHERE NOT (_P.cw_nom IS NULL)'''),
   611     ("Personne X,Y where X nom NX, Y nom NX, X eid XE, not Y eid XE",
   615     ("Personne X,Y where X nom NX, Y nom NX, X eid XE, not Y eid XE",
   612      '''SELECT X.cw_eid, Y.cw_eid
   616      '''SELECT _X.cw_eid, _Y.cw_eid
   613 FROM cw_Personne AS X, cw_Personne AS Y
   617 FROM cw_Personne AS _X, cw_Personne AS _Y
   614 WHERE Y.cw_nom=X.cw_nom AND NOT (Y.cw_eid=X.cw_eid)''')
   618 WHERE _Y.cw_nom=_X.cw_nom AND NOT (_Y.cw_eid=_X.cw_eid)''')
   615     ]
   619     ]
   616 
   620 
   617 NEGATIONS = [
   621 NEGATIONS = [
   618     ("Personne X WHERE NOT X evaluee Y;",
   622     ("Personne X WHERE NOT X evaluee Y;",
   619      '''SELECT X.cw_eid
   623      '''SELECT _X.cw_eid
   620 FROM cw_Personne AS X
   624 FROM cw_Personne AS _X
   621 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=X.cw_eid)'''),
   625 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_X.cw_eid)'''),
   622 
   626 
   623     ("Note N WHERE NOT X evaluee N, X eid 0",
   627     ("Note N WHERE NOT X evaluee N, X eid 0",
   624      '''SELECT N.cw_eid
   628      '''SELECT _N.cw_eid
   625 FROM cw_Note AS N
   629 FROM cw_Note AS _N
   626 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=0 AND rel_evaluee0.eid_to=N.cw_eid)'''),
   630 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=0 AND rel_evaluee0.eid_to=_N.cw_eid)'''),
   627 
   631 
   628     ('Any X WHERE NOT X travaille S, X is Personne',
   632     ('Any X WHERE NOT X travaille S, X is Personne',
   629      '''SELECT X.cw_eid
   633      '''SELECT _X.cw_eid
   630 FROM cw_Personne AS X
   634 FROM cw_Personne AS _X
   631 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=X.cw_eid)'''),
   635 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid)'''),
   632 
   636 
   633     ("Personne P where not P datenaiss TODAY",
   637     ("Personne P where not P datenaiss TODAY",
   634      '''SELECT P.cw_eid
   638      '''SELECT _P.cw_eid
   635 FROM cw_Personne AS P
   639 FROM cw_Personne AS _P
   636 WHERE NOT (DATE(P.cw_datenaiss)=CURRENT_DATE)'''),
   640 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
   637 
   641 
   638     ("Personne P where NOT P concerne A",
   642     ("Personne P where NOT P concerne A",
   639      '''SELECT P.cw_eid
   643      '''SELECT _P.cw_eid
   640 FROM cw_Personne AS P
   644 FROM cw_Personne AS _P
   641 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=P.cw_eid)'''),
   645 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=_P.cw_eid)'''),
   642 
   646 
   643     ("Affaire A where not P concerne A",
   647     ("Affaire A where not P concerne A",
   644      '''SELECT A.cw_eid
   648      '''SELECT _A.cw_eid
   645 FROM cw_Affaire AS A
   649 FROM cw_Affaire AS _A
   646 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_to=A.cw_eid)'''),
   650 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_to=_A.cw_eid)'''),
   647     ("Personne P where not P concerne A, A sujet ~= 'TEST%'",
   651     ("Personne P where not P concerne A, A sujet ~= 'TEST%'",
   648      '''SELECT P.cw_eid
   652      '''SELECT _P.cw_eid
   649 FROM cw_Affaire AS A, cw_Personne AS P
   653 FROM cw_Affaire AS _A, cw_Personne AS _P
   650 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=P.cw_eid AND rel_concerne0.eid_to=A.cw_eid) AND A.cw_sujet ILIKE TEST%'''),
   654 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=_P.cw_eid AND rel_concerne0.eid_to=_A.cw_eid) AND _A.cw_sujet ILIKE TEST%'''),
   651 
   655 
   652     ('Any S WHERE NOT T eid 28258, T tags S',
   656     ('Any S WHERE NOT T eid 28258, T tags S',
   653      '''SELECT rel_tags0.eid_to
   657      '''SELECT rel_tags0.eid_to
   654 FROM tags_relation AS rel_tags0
   658 FROM tags_relation AS rel_tags0
   655 WHERE NOT (rel_tags0.eid_from=28258)'''),
   659 WHERE NOT (rel_tags0.eid_from=28258)'''),
   656 
   660 
   657     ('Any S WHERE T is Tag, T name TN, NOT T eid 28258, T tags S, S name SN',
   661     ('Any S WHERE T is Tag, T name TN, NOT T eid 28258, T tags S, S name SN',
   658      '''SELECT S.cw_eid
   662      '''SELECT _S.cw_eid
   659 FROM cw_CWGroup AS S, cw_Tag AS T, tags_relation AS rel_tags0
   663 FROM cw_CWGroup AS _S, cw_Tag AS _T, tags_relation AS rel_tags0
   660 WHERE NOT (T.cw_eid=28258) AND rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=S.cw_eid
   664 WHERE NOT (_T.cw_eid=28258) AND rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_S.cw_eid
   661 UNION ALL
   665 UNION ALL
   662 SELECT S.cw_eid
   666 SELECT _S.cw_eid
   663 FROM cw_State AS S, cw_Tag AS T, tags_relation AS rel_tags0
   667 FROM cw_State AS _S, cw_Tag AS _T, tags_relation AS rel_tags0
   664 WHERE NOT (T.cw_eid=28258) AND rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=S.cw_eid
   668 WHERE NOT (_T.cw_eid=28258) AND rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_S.cw_eid
   665 UNION ALL
   669 UNION ALL
   666 SELECT S.cw_eid
   670 SELECT _S.cw_eid
   667 FROM cw_Tag AS S, cw_Tag AS T, tags_relation AS rel_tags0
   671 FROM cw_Tag AS _S, cw_Tag AS _T, tags_relation AS rel_tags0
   668 WHERE NOT (T.cw_eid=28258) AND rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=S.cw_eid'''),
   672 WHERE NOT (_T.cw_eid=28258) AND rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_S.cw_eid'''),
   669 
   673 
   670     ('Any X,Y WHERE X created_by Y, X eid 5, NOT Y eid 6',
   674     ('Any X,Y WHERE X created_by Y, X eid 5, NOT Y eid 6',
   671      '''SELECT 5, rel_created_by0.eid_to
   675      '''SELECT 5, rel_created_by0.eid_to
   672 FROM created_by_relation AS rel_created_by0
   676 FROM created_by_relation AS rel_created_by0
   673 WHERE rel_created_by0.eid_from=5 AND NOT (rel_created_by0.eid_to=6)'''),
   677 WHERE rel_created_by0.eid_from=5 AND NOT (rel_created_by0.eid_to=6)'''),
   674 
   678 
   675     ('Note X WHERE NOT Y evaluee X',
   679     ('Note X WHERE NOT Y evaluee X',
   676      '''SELECT X.cw_eid
   680      '''SELECT _X.cw_eid
   677 FROM cw_Note AS X
   681 FROM cw_Note AS _X
   678 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_to=X.cw_eid)'''),
   682 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_to=_X.cw_eid)'''),
   679 
   683 
   680     ('Any Y WHERE NOT Y evaluee X',
   684     ('Any Y WHERE NOT Y evaluee X',
   681      '''SELECT Y.cw_eid
   685      '''SELECT _Y.cw_eid
   682 FROM cw_CWUser AS Y
   686 FROM cw_CWUser AS _Y
   683 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=Y.cw_eid)
   687 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   684 UNION ALL
   688 UNION ALL
   685 SELECT Y.cw_eid
   689 SELECT _Y.cw_eid
   686 FROM cw_Division AS Y
   690 FROM cw_Division AS _Y
   687 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=Y.cw_eid)
   691 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   688 UNION ALL
   692 UNION ALL
   689 SELECT Y.cw_eid
   693 SELECT _Y.cw_eid
   690 FROM cw_Personne AS Y
   694 FROM cw_Personne AS _Y
   691 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=Y.cw_eid)
   695 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   692 UNION ALL
   696 UNION ALL
   693 SELECT Y.cw_eid
   697 SELECT _Y.cw_eid
   694 FROM cw_Societe AS Y
   698 FROM cw_Societe AS _Y
   695 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=Y.cw_eid)
   699 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   696 UNION ALL
   700 UNION ALL
   697 SELECT Y.cw_eid
   701 SELECT _Y.cw_eid
   698 FROM cw_SubDivision AS Y
   702 FROM cw_SubDivision AS _Y
   699 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=Y.cw_eid)'''),
   703 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)'''),
   700 
   704 
   701     ('Any X WHERE NOT Y evaluee X, Y is CWUser',
   705     ('Any X WHERE NOT Y evaluee X, Y is CWUser',
   702      '''SELECT X.cw_eid
   706      '''SELECT _X.cw_eid
   703 FROM cw_Note AS X
   707 FROM cw_Note AS _X
   704 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0,cw_CWUser AS Y WHERE rel_evaluee0.eid_from=Y.cw_eid AND rel_evaluee0.eid_to=X.cw_eid)'''),
   708 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0,cw_CWUser AS _Y WHERE rel_evaluee0.eid_from=_Y.cw_eid AND rel_evaluee0.eid_to=_X.cw_eid)'''),
   705 
   709 
   706     ('Any X,RT WHERE X relation_type RT, NOT X is CWAttribute',
   710     ('Any X,RT WHERE X relation_type RT, NOT X is CWAttribute',
   707      '''SELECT X.cw_eid, X.cw_relation_type
   711      '''SELECT _X.cw_eid, _X.cw_relation_type
   708 FROM cw_CWRelation AS X
   712 FROM cw_CWRelation AS _X
   709 WHERE X.cw_relation_type IS NOT NULL'''),
   713 WHERE _X.cw_relation_type IS NOT NULL'''),
   710 
   714 
   711     ('Any K,V WHERE P is CWProperty, P pkey K, P value V, NOT P for_user U',
   715     ('Any K,V WHERE P is CWProperty, P pkey K, P value V, NOT P for_user U',
   712      '''SELECT P.cw_pkey, P.cw_value
   716      '''SELECT _P.cw_pkey, _P.cw_value
   713 FROM cw_CWProperty AS P
   717 FROM cw_CWProperty AS _P
   714 WHERE P.cw_for_user IS NULL'''),
   718 WHERE _P.cw_for_user IS NULL'''),
   715 
   719 
   716     ('Any S WHERE NOT X in_state S, X is IN(Affaire, CWUser)',
   720     ('Any S WHERE NOT X in_state S, X is IN(Affaire, CWUser)',
   717      '''SELECT S.cw_eid
   721      '''SELECT _S.cw_eid
   718 FROM cw_State AS S
   722 FROM cw_State AS _S
   719 WHERE NOT EXISTS(SELECT 1 FROM cw_Affaire AS X WHERE X.cw_in_state=S.cw_eid)
   723 WHERE NOT EXISTS(SELECT 1 FROM cw_Affaire AS _X WHERE _X.cw_in_state=_S.cw_eid)
   720 INTERSECT
   724 INTERSECT
   721 SELECT S.cw_eid
   725 SELECT _S.cw_eid
   722 FROM cw_State AS S
   726 FROM cw_State AS _S
   723 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS X WHERE X.cw_in_state=S.cw_eid)'''),
   727 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid)'''),
   724 
   728 
   725     ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser',
   729     ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser',
   726      '''SELECT S.cw_eid
   730      '''SELECT _S.cw_eid
   727 FROM cw_State AS S
   731 FROM cw_State AS _S
   728 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS X WHERE X.cw_in_state=S.cw_eid AND S.cw_name=somename)'''),
   732 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename)'''),
   729    
   733    
   730 # XXXFIXME fail
   734 # XXXFIXME fail
   731 #         ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute',
   735 #         ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute',
   732 #      '''SELECT X.cw_eid, X.cw_relation_type
   736 #      '''SELECT _X.cw_eid, _X.cw_relation_type
   733 # FROM cw_CWRelation AS X'''),
   737 # FROM cw_CWRelation AS _X'''),
   734 ]
   738 ]
   735 
   739 
   736 OUTER_JOIN = [
   740 OUTER_JOIN = [
   737     ('Any X,S WHERE X travaille S?',
   741     ('Any X,S WHERE X travaille S?',
   738      '''SELECT X.cw_eid, rel_travaille0.eid_to
   742      '''SELECT _X.cw_eid, rel_travaille0.eid_to
   739 FROM cw_Personne AS X LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_from=X.cw_eid)'''
   743 FROM cw_Personne AS _X LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_from=_X.cw_eid)'''
   740     ),
   744     ),
   741     ('Any S,X WHERE X? travaille S, S is Societe',
   745     ('Any S,X WHERE X? travaille S, S is Societe',
   742      '''SELECT S.cw_eid, rel_travaille0.eid_from
   746      '''SELECT _S.cw_eid, rel_travaille0.eid_from
   743 FROM cw_Societe AS S LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_to=S.cw_eid)'''
   747 FROM cw_Societe AS _S LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_to=_S.cw_eid)'''
   744     ),
   748     ),
   745 
   749 
   746     ('Any N,A WHERE N inline1 A?',
   750     ('Any N,A WHERE N inline1 A?',
   747      '''SELECT N.cw_eid, N.cw_inline1
   751      '''SELECT _N.cw_eid, _N.cw_inline1
   748 FROM cw_Note AS N'''),
   752 FROM cw_Note AS _N'''),
   749 
   753 
   750     ('Any SN WHERE X from_state S?, S name SN',
   754     ('Any SN WHERE X from_state S?, S name SN',
   751      '''SELECT S.cw_name
   755      '''SELECT _S.cw_name
   752 FROM cw_TrInfo AS X LEFT OUTER JOIN cw_State AS S ON (X.cw_from_state=S.cw_eid)'''
   756 FROM cw_TrInfo AS _X LEFT OUTER JOIN cw_State AS _S ON (_X.cw_from_state=_S.cw_eid)'''
   753     ),
   757     ),
   754 
   758 
   755     ('Any A,N WHERE N? inline1 A',
   759     ('Any A,N WHERE N? inline1 A',
   756      '''SELECT A.cw_eid, N.cw_eid
   760      '''SELECT _A.cw_eid, _N.cw_eid
   757 FROM cw_Affaire AS A LEFT OUTER JOIN cw_Note AS N ON (N.cw_inline1=A.cw_eid)'''
   761 FROM cw_Affaire AS _A LEFT OUTER JOIN cw_Note AS _N ON (_N.cw_inline1=_A.cw_eid)'''
   758     ),
   762     ),
   759 
   763 
   760     ('Any A,B,C,D,E,F,G WHERE A eid 12,A creation_date B,A modification_date C,A comment D,A from_state E?,A to_state F?,A wf_info_for G?',
   764     ('Any A,B,C,D,E,F,G WHERE A eid 12,A creation_date B,A modification_date C,A comment D,A from_state E?,A to_state F?,A wf_info_for G?',
   761     '''SELECT A.cw_eid, A.cw_creation_date, A.cw_modification_date, A.cw_comment, A.cw_from_state, A.cw_to_state, A.cw_wf_info_for
   765     '''SELECT _A.cw_eid, _A.cw_creation_date, _A.cw_modification_date, _A.cw_comment, _A.cw_from_state, _A.cw_to_state, _A.cw_wf_info_for
   762 FROM cw_TrInfo AS A
   766 FROM cw_TrInfo AS _A
   763 WHERE A.cw_eid=12'''),
   767 WHERE _A.cw_eid=12'''),
   764 
   768 
   765     ('Any FS,TS,C,D,U ORDERBY D DESC WHERE WF wf_info_for X,WF from_state FS?, WF to_state TS, WF comment C,WF creation_date D, WF owned_by U, X eid 1',
   769     ('Any FS,TS,C,D,U ORDERBY D DESC WHERE WF wf_info_for X,WF from_state FS?, WF to_state TS, WF comment C,WF creation_date D, WF owned_by U, X eid 1',
   766      '''SELECT WF.cw_from_state, WF.cw_to_state, WF.cw_comment, WF.cw_creation_date, rel_owned_by0.eid_to
   770      '''SELECT _WF.cw_from_state, _WF.cw_to_state, _WF.cw_comment, _WF.cw_creation_date, rel_owned_by0.eid_to
   767 FROM cw_TrInfo AS WF, owned_by_relation AS rel_owned_by0
   771 FROM cw_TrInfo AS _WF, owned_by_relation AS rel_owned_by0
   768 WHERE WF.cw_wf_info_for=1 AND WF.cw_to_state IS NOT NULL AND rel_owned_by0.eid_from=WF.cw_eid
   772 WHERE _WF.cw_wf_info_for=1 AND _WF.cw_to_state IS NOT NULL AND rel_owned_by0.eid_from=_WF.cw_eid
   769 ORDER BY 4 DESC'''),
   773 ORDER BY 4 DESC'''),
   770 
   774 
   771     ('Any X WHERE X is Affaire, S is Societe, EXISTS(X owned_by U OR (X concerne S?, S owned_by U))',
   775     ('Any X WHERE X is Affaire, S is Societe, EXISTS(X owned_by U OR (X concerne S?, S owned_by U))',
   772      '''SELECT X.cw_eid
   776      '''SELECT _X.cw_eid
   773 FROM cw_Affaire AS X
   777 FROM cw_Affaire AS _X
   774 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_CWUser AS U, cw_Affaire AS A LEFT OUTER JOIN concerne_relation AS rel_concerne1 ON (rel_concerne1.eid_from=A.cw_eid) LEFT OUTER JOIN cw_Societe AS S ON (rel_concerne1.eid_to=S.cw_eid), owned_by_relation AS rel_owned_by2 WHERE ((rel_owned_by0.eid_from=A.cw_eid AND rel_owned_by0.eid_to=U.cw_eid) OR (rel_owned_by2.eid_from=S.cw_eid AND rel_owned_by2.eid_to=U.cw_eid)) AND X.cw_eid=A.cw_eid)'''),
   778 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_CWUser AS _U, cw_Affaire AS _A LEFT OUTER JOIN concerne_relation AS rel_concerne1 ON (rel_concerne1.eid_from=_A.cw_eid) LEFT OUTER JOIN cw_Societe AS _S ON (rel_concerne1.eid_to=_S.cw_eid), owned_by_relation AS rel_owned_by2 WHERE ((rel_owned_by0.eid_from=_A.cw_eid AND rel_owned_by0.eid_to=_U.cw_eid) OR (rel_owned_by2.eid_from=_S.cw_eid AND rel_owned_by2.eid_to=_U.cw_eid)) AND _X.cw_eid=_A.cw_eid)'''),
   775 
   779 
   776     ('Any C,M WHERE C travaille G?, G evaluee M?, G is Societe',
   780     ('Any C,M WHERE C travaille G?, G evaluee M?, G is Societe',
   777      '''SELECT C.cw_eid, rel_evaluee1.eid_to
   781      '''SELECT _C.cw_eid, rel_evaluee1.eid_to
   778 FROM cw_Personne AS C LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_from=C.cw_eid) LEFT OUTER JOIN cw_Societe AS G ON (rel_travaille0.eid_to=G.cw_eid) LEFT OUTER JOIN evaluee_relation AS rel_evaluee1 ON (rel_evaluee1.eid_from=G.cw_eid)'''
   782 FROM cw_Personne AS _C LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_from=_C.cw_eid) LEFT OUTER JOIN cw_Societe AS _G ON (rel_travaille0.eid_to=_G.cw_eid) LEFT OUTER JOIN evaluee_relation AS rel_evaluee1 ON (rel_evaluee1.eid_from=_G.cw_eid)'''
   779      ),
   783      ),
   780 
   784 
   781     ('Any A,C WHERE A documented_by C?, (C is NULL) OR (EXISTS(C require_permission F, '
   785     ('Any A,C WHERE A documented_by C?, (C is NULL) OR (EXISTS(C require_permission F, '
   782      'F name "read", F require_group E, U in_group E)), U eid 1',
   786      'F name "read", F require_group E, U in_group E)), U eid 1',
   783      '''SELECT A.cw_eid, rel_documented_by0.eid_to
   787      '''SELECT _A.cw_eid, rel_documented_by0.eid_to
   784 FROM cw_Affaire AS A LEFT OUTER JOIN documented_by_relation AS rel_documented_by0 ON (rel_documented_by0.eid_from=A.cw_eid)
   788 FROM cw_Affaire AS _A LEFT OUTER JOIN documented_by_relation AS rel_documented_by0 ON (rel_documented_by0.eid_from=_A.cw_eid)
   785 WHERE ((rel_documented_by0.eid_to IS NULL) OR (EXISTS(SELECT 1 FROM require_permission_relation AS rel_require_permission1, cw_CWPermission AS F, require_group_relation AS rel_require_group2, in_group_relation AS rel_in_group3 WHERE rel_documented_by0.eid_to=rel_require_permission1.eid_from AND rel_require_permission1.eid_to=F.cw_eid AND F.cw_name=read AND rel_require_group2.eid_from=F.cw_eid AND rel_in_group3.eid_to=rel_require_group2.eid_to AND rel_in_group3.eid_from=1)))'''),
   789 WHERE ((rel_documented_by0.eid_to IS NULL) OR (EXISTS(SELECT 1 FROM require_permission_relation AS rel_require_permission1, cw_CWPermission AS _F, require_group_relation AS rel_require_group2, in_group_relation AS rel_in_group3 WHERE rel_documented_by0.eid_to=rel_require_permission1.eid_from AND rel_require_permission1.eid_to=_F.cw_eid AND _F.cw_name=read AND rel_require_group2.eid_from=_F.cw_eid AND rel_in_group3.eid_to=rel_require_group2.eid_to AND rel_in_group3.eid_from=1)))'''),
   786 
   790 
   787     ("Any X WHERE X eid 12, P? connait X",
   791     ("Any X WHERE X eid 12, P? connait X",
   788      '''SELECT X.cw_eid
   792      '''SELECT _X.cw_eid
   789 FROM cw_Personne AS X LEFT OUTER JOIN connait_relation AS rel_connait0 ON (rel_connait0.eid_to=12)
   793 FROM cw_Personne AS _X LEFT OUTER JOIN connait_relation AS rel_connait0 ON (rel_connait0.eid_to=12)
   790 WHERE X.cw_eid=12'''
   794 WHERE _X.cw_eid=12'''
   791     ),
   795     ),
   792 
   796 
   793     ('Any GN, TN ORDERBY GN WHERE T tags G?, T name TN, G name GN',
   797     ('Any GN, TN ORDERBY GN WHERE T tags G?, T name TN, G name GN',
   794     '''
   798     '''
   795 SELECT _T0.C1, T.cw_name
   799 SELECT _T0.C1, _T.cw_name
   796 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN (SELECT G.cw_eid AS C0, G.cw_name AS C1
   800 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN (SELECT _G.cw_eid AS C0, _G.cw_name AS C1
   797 FROM cw_CWGroup AS G
   801 FROM cw_CWGroup AS _G
   798 UNION ALL
   802 UNION ALL
   799 SELECT G.cw_eid AS C0, G.cw_name AS C1
   803 SELECT _G.cw_eid AS C0, _G.cw_name AS C1
   800 FROM cw_State AS G
   804 FROM cw_State AS _G
   801 UNION ALL
   805 UNION ALL
   802 SELECT G.cw_eid AS C0, G.cw_name AS C1
   806 SELECT _G.cw_eid AS C0, _G.cw_name AS C1
   803 FROM cw_Tag AS G) AS _T0 ON (rel_tags0.eid_to=_T0.C0)
   807 FROM cw_Tag AS _G) AS _T0 ON (rel_tags0.eid_to=_T0.C0)
   804 ORDER BY 1'''),
   808 ORDER BY 1'''),
   805 
   809 
   806 
   810 
   807     # optional variable with additional restriction
   811     # optional variable with additional restriction
   808     ('Any T,G WHERE T tags G?, G name "hop", G is CWGroup',
   812     ('Any T,G WHERE T tags G?, G name "hop", G is CWGroup',
   809      '''SELECT T.cw_eid, G.cw_eid
   813      '''SELECT _T.cw_eid, _G.cw_eid
   810 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN cw_CWGroup AS G ON (rel_tags0.eid_to=G.cw_eid AND G.cw_name=hop)'''),
   814 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN cw_CWGroup AS _G ON (rel_tags0.eid_to=_G.cw_eid AND _G.cw_name=hop)'''),
   811 
   815 
   812     # optional variable with additional invariant restriction
   816     # optional variable with additional invariant restriction
   813     ('Any T,G WHERE T tags G?, G eid 12',
   817     ('Any T,G WHERE T tags G?, G eid 12',
   814      '''SELECT T.cw_eid, rel_tags0.eid_to
   818      '''SELECT _T.cw_eid, rel_tags0.eid_to
   815 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid AND rel_tags0.eid_to=12)'''),
   819 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=12)'''),
   816 
   820 
   817     # optional variable with additional restriction appearing before the relation
   821     # optional variable with additional restriction appearing before the relation
   818     ('Any T,G WHERE G name "hop", T tags G?, G is CWGroup',
   822     ('Any T,G WHERE G name "hop", T tags G?, G is CWGroup',
   819      '''SELECT T.cw_eid, G.cw_eid
   823      '''SELECT _T.cw_eid, _G.cw_eid
   820 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN cw_CWGroup AS G ON (rel_tags0.eid_to=G.cw_eid AND G.cw_name=hop)'''),
   824 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN cw_CWGroup AS _G ON (rel_tags0.eid_to=_G.cw_eid AND _G.cw_name=hop)'''),
   821 
   825 
   822     # optional variable with additional restriction on inlined relation
   826     # optional variable with additional restriction on inlined relation
   823     # XXX the expected result should be as the query below. So what, raise BadRQLQuery ?
   827     # XXX the expected result should be as the query below. So what, raise BadRQLQuery ?
   824     ('Any T,G,S WHERE T tags G?, G in_state S, S name "hop", G is CWUser',
   828     ('Any T,G,S WHERE T tags G?, G in_state S, S name "hop", G is CWUser',
   825      '''SELECT T.cw_eid, G.cw_eid, S.cw_eid
   829      '''SELECT _T.cw_eid, _G.cw_eid, _S.cw_eid
   826 FROM cw_State AS S, cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN cw_CWUser AS G ON (rel_tags0.eid_to=G.cw_eid)
   830 FROM cw_State AS _S, cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN cw_CWUser AS _G ON (rel_tags0.eid_to=_G.cw_eid)
   827 WHERE G.cw_in_state=S.cw_eid AND S.cw_name=hop
   831 WHERE _G.cw_in_state=_S.cw_eid AND _S.cw_name=hop
   828 '''),
   832 '''),
   829 
   833 
   830     # optional variable with additional invariant restriction on an inlined relation
   834     # optional variable with additional invariant restriction on an inlined relation
   831     ('Any T,G,S WHERE T tags G, G in_state S?, S eid 1, G is CWUser',
   835     ('Any T,G,S WHERE T tags G, G in_state S?, S eid 1, G is CWUser',
   832      '''SELECT rel_tags0.eid_from, G.cw_eid, G.cw_in_state
   836      '''SELECT rel_tags0.eid_from, _G.cw_eid, _G.cw_in_state
   833 FROM cw_CWUser AS G, tags_relation AS rel_tags0
   837 FROM cw_CWUser AS _G, tags_relation AS rel_tags0
   834 WHERE rel_tags0.eid_to=G.cw_eid AND (G.cw_in_state=1 OR G.cw_in_state IS NULL)'''),
   838 WHERE rel_tags0.eid_to=_G.cw_eid AND (_G.cw_in_state=1 OR _G.cw_in_state IS NULL)'''),
   835 
   839 
   836     # two optional variables with additional invariant restriction on an inlined relation
   840     # two optional variables with additional invariant restriction on an inlined relation
   837     ('Any T,G,S WHERE T tags G?, G in_state S?, S eid 1, G is CWUser',
   841     ('Any T,G,S WHERE T tags G?, G in_state S?, S eid 1, G is CWUser',
   838      '''SELECT T.cw_eid, G.cw_eid, G.cw_in_state
   842      '''SELECT _T.cw_eid, _G.cw_eid, _G.cw_in_state
   839 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN cw_CWUser AS G ON (rel_tags0.eid_to=G.cw_eid AND (G.cw_in_state=1 OR G.cw_in_state IS NULL))'''),
   843 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN cw_CWUser AS _G ON (rel_tags0.eid_to=_G.cw_eid AND (_G.cw_in_state=1 OR _G.cw_in_state IS NULL))'''),
   840 
   844 
   841     # two optional variables with additional restriction on an inlined relation
   845     # two optional variables with additional restriction on an inlined relation
   842     ('Any T,G,S WHERE T tags G?, G in_state S?, S name "hop", G is CWUser',
   846     ('Any T,G,S WHERE T tags G?, G in_state S?, S name "hop", G is CWUser',
   843      '''SELECT T.cw_eid, G.cw_eid, S.cw_eid
   847      '''SELECT _T.cw_eid, _G.cw_eid, _S.cw_eid
   844 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN cw_CWUser AS G ON (rel_tags0.eid_to=G.cw_eid) LEFT OUTER JOIN cw_State AS S ON (G.cw_in_state=S.cw_eid AND S.cw_name=hop)'''),
   848 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN cw_CWUser AS _G ON (rel_tags0.eid_to=_G.cw_eid) LEFT OUTER JOIN cw_State AS _S ON (_G.cw_in_state=_S.cw_eid AND _S.cw_name=hop)'''),
   845 
   849 
   846     # two optional variables with additional restriction on an ambigous inlined relation
   850     # two optional variables with additional restriction on an ambigous inlined relation
   847     ('Any T,G,S WHERE T tags G?, G in_state S?, S name "hop"',
   851     ('Any T,G,S WHERE T tags G?, G in_state S?, S name "hop"',
   848      '''
   852      '''
   849 SELECT T.cw_eid, _T0.C0, _T0.C1
   853 SELECT _T.cw_eid, _T0.C0, _T0.C1
   850 FROM cw_Tag AS T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=T.cw_eid) LEFT OUTER JOIN (SELECT G.cw_eid AS C0, S.cw_eid AS C1
   854 FROM cw_Tag AS _T LEFT OUTER JOIN tags_relation AS rel_tags0 ON (rel_tags0.eid_from=_T.cw_eid) LEFT OUTER JOIN (SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   851 FROM cw_Affaire AS G LEFT OUTER JOIN cw_State AS S ON (G.cw_in_state=S.cw_eid AND S.cw_name=hop)
   855 FROM cw_Affaire AS _G LEFT OUTER JOIN cw_State AS _S ON (_G.cw_in_state=_S.cw_eid AND _S.cw_name=hop)
   852 UNION ALL
   856 UNION ALL
   853 SELECT G.cw_eid AS C0, S.cw_eid AS C1
   857 SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   854 FROM cw_CWUser AS G LEFT OUTER JOIN cw_State AS S ON (G.cw_in_state=S.cw_eid AND S.cw_name=hop)
   858 FROM cw_CWUser AS _G LEFT OUTER JOIN cw_State AS _S ON (_G.cw_in_state=_S.cw_eid AND _S.cw_name=hop)
   855 UNION ALL
   859 UNION ALL
   856 SELECT G.cw_eid AS C0, S.cw_eid AS C1
   860 SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   857 FROM cw_Note AS G LEFT OUTER JOIN cw_State AS S ON (G.cw_in_state=S.cw_eid AND S.cw_name=hop) ) AS _T0 ON (rel_tags0.eid_to=_T0.C0)'''),
   861 FROM cw_Note AS _G LEFT OUTER JOIN cw_State AS _S ON (_G.cw_in_state=_S.cw_eid AND _S.cw_name=hop) ) AS _T0 ON (rel_tags0.eid_to=_T0.C0)'''),
   858 
   862 
   859     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
   863     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
   860      '''SELECT O.cw_eid, rel_todo_by0.eid_to
   864      '''SELECT _O.cw_eid, rel_todo_by0.eid_to
   861 FROM cw_Affaire AS O LEFT OUTER JOIN todo_by_relation AS rel_todo_by0 ON (rel_todo_by0.eid_from=O.cw_eid), cw_Note AS S
   865 FROM cw_Affaire AS _O LEFT OUTER JOIN todo_by_relation AS rel_todo_by0 ON (rel_todo_by0.eid_from=_O.cw_eid), cw_Note AS _S
   862 WHERE NOT EXISTS(SELECT 1 WHERE S.cw_inline1=O.cw_eid) AND S.cw_eid=123''')
   866 WHERE NOT EXISTS(SELECT 1 WHERE _S.cw_inline1=_O.cw_eid) AND _S.cw_eid=123''')
   863     ]
   867     ]
   864 
   868 
   865 VIRTUAL_VARS = [
   869 VIRTUAL_VARS = [
   866     ("Personne P WHERE P travaille S, S tel T, S fax T, S is Societe;",
   870     ("Personne P WHERE P travaille S, S tel T, S fax T, S is Societe;",
   867      '''SELECT rel_travaille0.eid_from
   871      '''SELECT rel_travaille0.eid_from
   868 FROM cw_Societe AS S, travaille_relation AS rel_travaille0
   872 FROM cw_Societe AS _S, travaille_relation AS rel_travaille0
   869 WHERE rel_travaille0.eid_to=S.cw_eid AND S.cw_fax=S.cw_tel'''),
   873 WHERE rel_travaille0.eid_to=_S.cw_eid AND _S.cw_fax=_S.cw_tel'''),
   870 
   874 
   871     ("Personne P where X eid 0, X creation_date D, P datenaiss < D, X is Affaire",
   875     ("Personne P where X eid 0, X creation_date D, P datenaiss < D, X is Affaire",
   872      '''SELECT P.cw_eid
   876      '''SELECT _P.cw_eid
   873 FROM cw_Affaire AS X, cw_Personne AS P
   877 FROM cw_Affaire AS _X, cw_Personne AS _P
   874 WHERE X.cw_eid=0 AND P.cw_datenaiss<X.cw_creation_date'''),
   878 WHERE _X.cw_eid=0 AND _P.cw_datenaiss<_X.cw_creation_date'''),
   875 
   879 
   876     ("Any N,T WHERE N is Note, N type T;",
   880     ("Any N,T WHERE N is Note, N type T;",
   877      '''SELECT N.cw_eid, N.cw_type
   881      '''SELECT _N.cw_eid, _N.cw_type
   878 FROM cw_Note AS N'''),
   882 FROM cw_Note AS _N'''),
   879 
   883 
   880     ("Personne P where X is Personne, X tel T, X fax F, P fax T+F",
   884     ("Personne P where X is Personne, X tel T, X fax F, P fax T+F",
   881      '''SELECT P.cw_eid
   885      '''SELECT _P.cw_eid
   882 FROM cw_Personne AS P, cw_Personne AS X
   886 FROM cw_Personne AS _P, cw_Personne AS _X
   883 WHERE P.cw_fax=(X.cw_tel + X.cw_fax)'''),
   887 WHERE _P.cw_fax=(_X.cw_tel + _X.cw_fax)'''),
   884 
   888 
   885     ("Personne P where X tel T, X fax F, P fax IN (T,F)",
   889     ("Personne P where X tel T, X fax F, P fax IN (T,F)",
   886      '''SELECT P.cw_eid
   890      '''SELECT _P.cw_eid
   887 FROM cw_Division AS X, cw_Personne AS P
   891 FROM cw_Division AS _X, cw_Personne AS _P
   888 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax)
   892 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax)
   889 UNION ALL
   893 UNION ALL
   890 SELECT P.cw_eid
   894 SELECT _P.cw_eid
   891 FROM cw_Personne AS P, cw_Personne AS X
   895 FROM cw_Personne AS _P, cw_Personne AS _X
   892 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax)
   896 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax)
   893 UNION ALL
   897 UNION ALL
   894 SELECT P.cw_eid
   898 SELECT _P.cw_eid
   895 FROM cw_Personne AS P, cw_Societe AS X
   899 FROM cw_Personne AS _P, cw_Societe AS _X
   896 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax)
   900 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax)
   897 UNION ALL
   901 UNION ALL
   898 SELECT P.cw_eid
   902 SELECT _P.cw_eid
   899 FROM cw_Personne AS P, cw_SubDivision AS X
   903 FROM cw_Personne AS _P, cw_SubDivision AS _X
   900 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax)'''),
   904 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax)'''),
   901 
   905 
   902     ("Personne P where X tel T, X fax F, P fax IN (T,F,0832542332)",
   906     ("Personne P where X tel T, X fax F, P fax IN (T,F,0832542332)",
   903      '''SELECT P.cw_eid
   907      '''SELECT _P.cw_eid
   904 FROM cw_Division AS X, cw_Personne AS P
   908 FROM cw_Division AS _X, cw_Personne AS _P
   905 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax, 832542332)
   909 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax, 832542332)
   906 UNION ALL
   910 UNION ALL
   907 SELECT P.cw_eid
   911 SELECT _P.cw_eid
   908 FROM cw_Personne AS P, cw_Personne AS X
   912 FROM cw_Personne AS _P, cw_Personne AS _X
   909 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax, 832542332)
   913 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax, 832542332)
   910 UNION ALL
   914 UNION ALL
   911 SELECT P.cw_eid
   915 SELECT _P.cw_eid
   912 FROM cw_Personne AS P, cw_Societe AS X
   916 FROM cw_Personne AS _P, cw_Societe AS _X
   913 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax, 832542332)
   917 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax, 832542332)
   914 UNION ALL
   918 UNION ALL
   915 SELECT P.cw_eid
   919 SELECT _P.cw_eid
   916 FROM cw_Personne AS P, cw_SubDivision AS X
   920 FROM cw_Personne AS _P, cw_SubDivision AS _X
   917 WHERE P.cw_fax IN(X.cw_tel, X.cw_fax, 832542332)'''),
   921 WHERE _P.cw_fax IN(_X.cw_tel, _X.cw_fax, 832542332)'''),
   918     ]
   922     ]
   919 
   923 
   920 FUNCS = [
   924 FUNCS = [
   921     ("Any COUNT(P) WHERE P is Personne",
   925     ("Any COUNT(P) WHERE P is Personne",
   922      '''SELECT COUNT(P.cw_eid)
   926      '''SELECT COUNT(_P.cw_eid)
   923 FROM cw_Personne AS P'''),
   927 FROM cw_Personne AS _P'''),
   924     ]
   928     ]
   925 
   929 
   926 SYMETRIC = [
   930 SYMETRIC = [
   927     ('Any P WHERE X eid 0, X connait P',
   931     ('Any P WHERE X eid 0, X connait P',
   928      '''SELECT DISTINCT P.cw_eid
   932      '''SELECT DISTINCT _P.cw_eid
   929 FROM connait_relation AS rel_connait0, cw_Personne AS P
   933 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   930 WHERE (rel_connait0.eid_from=0 AND rel_connait0.eid_to=P.cw_eid OR rel_connait0.eid_to=0 AND rel_connait0.eid_from=P.cw_eid)'''
   934 WHERE (rel_connait0.eid_from=0 AND rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_to=0 AND rel_connait0.eid_from=_P.cw_eid)'''
   931      ),
   935      ),
   932 
   936 
   933     ('Any P WHERE X connait P',
   937     ('Any P WHERE X connait P',
   934     '''SELECT DISTINCT P.cw_eid
   938     '''SELECT DISTINCT _P.cw_eid
   935 FROM connait_relation AS rel_connait0, cw_Personne AS P
   939 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   936 WHERE (rel_connait0.eid_to=P.cw_eid OR rel_connait0.eid_from=P.cw_eid)'''
   940 WHERE (rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_from=_P.cw_eid)'''
   937     ),
   941     ),
   938 
   942 
   939     ('Any X WHERE X connait P',
   943     ('Any X WHERE X connait P',
   940     '''SELECT DISTINCT X.cw_eid
   944     '''SELECT DISTINCT _X.cw_eid
   941 FROM connait_relation AS rel_connait0, cw_Personne AS X
   945 FROM connait_relation AS rel_connait0, cw_Personne AS _X
   942 WHERE (rel_connait0.eid_from=X.cw_eid OR rel_connait0.eid_to=X.cw_eid)'''
   946 WHERE (rel_connait0.eid_from=_X.cw_eid OR rel_connait0.eid_to=_X.cw_eid)'''
   943      ),
   947      ),
   944 
   948 
   945     ('Any P WHERE X eid 0, NOT X connait P',
   949     ('Any P WHERE X eid 0, NOT X connait P',
   946      '''SELECT P.cw_eid
   950      '''SELECT _P.cw_eid
   947 FROM cw_Personne AS P
   951 FROM cw_Personne AS _P
   948 WHERE NOT EXISTS(SELECT 1 FROM connait_relation AS rel_connait0 WHERE (rel_connait0.eid_from=0 AND rel_connait0.eid_to=P.cw_eid OR rel_connait0.eid_to=0 AND rel_connait0.eid_from=P.cw_eid))'''),
   952 WHERE NOT EXISTS(SELECT 1 FROM connait_relation AS rel_connait0 WHERE (rel_connait0.eid_from=0 AND rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_to=0 AND rel_connait0.eid_from=_P.cw_eid))'''),
   949 
   953 
   950     ('Any P WHERE NOT X connait P',
   954     ('Any P WHERE NOT X connait P',
   951     '''SELECT P.cw_eid
   955     '''SELECT _P.cw_eid
   952 FROM cw_Personne AS P
   956 FROM cw_Personne AS _P
   953 WHERE NOT EXISTS(SELECT 1 FROM connait_relation AS rel_connait0 WHERE (rel_connait0.eid_to=P.cw_eid OR rel_connait0.eid_from=P.cw_eid))'''),
   957 WHERE NOT EXISTS(SELECT 1 FROM connait_relation AS rel_connait0 WHERE (rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_from=_P.cw_eid))'''),
   954 
   958 
   955     ('Any X WHERE NOT X connait P',
   959     ('Any X WHERE NOT X connait P',
   956     '''SELECT X.cw_eid
   960     '''SELECT _X.cw_eid
   957 FROM cw_Personne AS X
   961 FROM cw_Personne AS _X
   958 WHERE NOT EXISTS(SELECT 1 FROM connait_relation AS rel_connait0 WHERE (rel_connait0.eid_from=X.cw_eid OR rel_connait0.eid_to=X.cw_eid))'''),
   962 WHERE NOT EXISTS(SELECT 1 FROM connait_relation AS rel_connait0 WHERE (rel_connait0.eid_from=_X.cw_eid OR rel_connait0.eid_to=_X.cw_eid))'''),
   959 
   963 
   960     ('Any P WHERE X connait P, P nom "nom"',
   964     ('Any P WHERE X connait P, P nom "nom"',
   961      '''SELECT DISTINCT P.cw_eid
   965      '''SELECT DISTINCT _P.cw_eid
   962 FROM connait_relation AS rel_connait0, cw_Personne AS P
   966 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   963 WHERE (rel_connait0.eid_to=P.cw_eid OR rel_connait0.eid_from=P.cw_eid) AND P.cw_nom=nom'''),
   967 WHERE (rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_from=_P.cw_eid) AND _P.cw_nom=nom'''),
   964 
   968 
   965     ('Any X WHERE X connait P, P nom "nom"',
   969     ('Any X WHERE X connait P, P nom "nom"',
   966      '''SELECT DISTINCT X.cw_eid
   970      '''SELECT DISTINCT _X.cw_eid
   967 FROM connait_relation AS rel_connait0, cw_Personne AS P, cw_Personne AS X
   971 FROM connait_relation AS rel_connait0, cw_Personne AS _P, cw_Personne AS _X
   968 WHERE (rel_connait0.eid_from=X.cw_eid AND rel_connait0.eid_to=P.cw_eid OR rel_connait0.eid_to=X.cw_eid AND rel_connait0.eid_from=P.cw_eid) AND P.cw_nom=nom'''
   972 WHERE (rel_connait0.eid_from=_X.cw_eid AND rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_to=_X.cw_eid AND rel_connait0.eid_from=_P.cw_eid) AND _P.cw_nom=nom'''
   969     ),
   973     ),
   970 
   974 
   971     ('Any X ORDERBY X DESC LIMIT 9 WHERE E eid 0, E connait X',
   975     ('Any X ORDERBY X DESC LIMIT 9 WHERE E eid 0, E connait X',
   972     '''SELECT DISTINCT X.cw_eid
   976     '''SELECT DISTINCT _X.cw_eid
   973 FROM connait_relation AS rel_connait0, cw_Personne AS X
   977 FROM connait_relation AS rel_connait0, cw_Personne AS _X
   974 WHERE (rel_connait0.eid_from=0 AND rel_connait0.eid_to=X.cw_eid OR rel_connait0.eid_to=0 AND rel_connait0.eid_from=X.cw_eid)
   978 WHERE (rel_connait0.eid_from=0 AND rel_connait0.eid_to=_X.cw_eid OR rel_connait0.eid_to=0 AND rel_connait0.eid_from=_X.cw_eid)
   975 ORDER BY 1 DESC
   979 ORDER BY 1 DESC
   976 LIMIT 9'''
   980 LIMIT 9'''
   977      ),
   981      ),
   978 
   982 
   979     ('DISTINCT Any P WHERE P connait S OR S connait P, S nom "chouette"',
   983     ('DISTINCT Any P WHERE P connait S OR S connait P, S nom "chouette"',
   980      '''SELECT DISTINCT P.cw_eid
   984      '''SELECT DISTINCT _P.cw_eid
   981 FROM connait_relation AS rel_connait0, cw_Personne AS P, cw_Personne AS S
   985 FROM connait_relation AS rel_connait0, cw_Personne AS _P, cw_Personne AS _S
   982 WHERE (rel_connait0.eid_from=P.cw_eid AND rel_connait0.eid_to=S.cw_eid OR rel_connait0.eid_to=P.cw_eid AND rel_connait0.eid_from=S.cw_eid) AND S.cw_nom=chouette'''
   986 WHERE (rel_connait0.eid_from=_P.cw_eid AND rel_connait0.eid_to=_S.cw_eid OR rel_connait0.eid_to=_P.cw_eid AND rel_connait0.eid_from=_S.cw_eid) AND _S.cw_nom=chouette'''
   983      )
   987      )
   984     ]
   988     ]
   985 
   989 
   986 INLINE = [
   990 INLINE = [
   987     ('Any P, L WHERE N ecrit_par P, P nom L, N eid 0',
   991     ('Any P, L WHERE N ecrit_par P, P nom L, N eid 0',
   988      '''SELECT P.cw_eid, P.cw_nom
   992      '''SELECT _P.cw_eid, _P.cw_nom
   989 FROM cw_Note AS N, cw_Personne AS P
   993 FROM cw_Note AS _N, cw_Personne AS _P
   990 WHERE N.cw_ecrit_par=P.cw_eid AND N.cw_eid=0'''),
   994 WHERE _N.cw_ecrit_par=_P.cw_eid AND _N.cw_eid=0'''),
   991 
   995 
   992     ('Any N WHERE NOT N ecrit_par P, P nom "toto"',
   996     ('Any N WHERE NOT N ecrit_par P, P nom "toto"',
   993      '''SELECT N.cw_eid
   997      '''SELECT _N.cw_eid
   994 FROM cw_Note AS N, cw_Personne AS P
   998 FROM cw_Note AS _N, cw_Personne AS _P
   995 WHERE NOT EXISTS(SELECT 1 WHERE N.cw_ecrit_par=P.cw_eid) AND P.cw_nom=toto'''),
   999 WHERE NOT EXISTS(SELECT 1 WHERE _N.cw_ecrit_par=_P.cw_eid) AND _P.cw_nom=toto'''),
   996 
  1000 
   997     ('Any P WHERE N ecrit_par P, N eid 0',
  1001     ('Any P WHERE N ecrit_par P, N eid 0',
   998     '''SELECT N.cw_ecrit_par
  1002     '''SELECT _N.cw_ecrit_par
   999 FROM cw_Note AS N
  1003 FROM cw_Note AS _N
  1000 WHERE N.cw_ecrit_par IS NOT NULL AND N.cw_eid=0'''),
  1004 WHERE _N.cw_ecrit_par IS NOT NULL AND _N.cw_eid=0'''),
  1001 
  1005 
  1002     ('Any P WHERE N ecrit_par P, P is Personne, N eid 0',
  1006     ('Any P WHERE N ecrit_par P, P is Personne, N eid 0',
  1003     '''SELECT P.cw_eid
  1007     '''SELECT _P.cw_eid
  1004 FROM cw_Note AS N, cw_Personne AS P
  1008 FROM cw_Note AS _N, cw_Personne AS _P
  1005 WHERE N.cw_ecrit_par=P.cw_eid AND N.cw_eid=0'''),
  1009 WHERE _N.cw_ecrit_par=_P.cw_eid AND _N.cw_eid=0'''),
  1006 
  1010 
  1007     ('Any P WHERE NOT N ecrit_par P, P is Personne, N eid 512',
  1011     ('Any P WHERE NOT N ecrit_par P, P is Personne, N eid 512',
  1008      '''SELECT P.cw_eid
  1012      '''SELECT _P.cw_eid
  1009 FROM cw_Note AS N, cw_Personne AS P
  1013 FROM cw_Note AS _N, cw_Personne AS _P
  1010 WHERE NOT EXISTS(SELECT 1 WHERE N.cw_ecrit_par=P.cw_eid) AND N.cw_eid=512'''),
  1014 WHERE NOT EXISTS(SELECT 1 WHERE _N.cw_ecrit_par=_P.cw_eid) AND _N.cw_eid=512'''),
  1011 
  1015 
  1012     ('Any S,ES,T WHERE S state_of ET, ET name "CWUser", ES allowed_transition T, T destination_state S',
  1016     ('Any S,ES,T WHERE S state_of ET, ET name "CWUser", ES allowed_transition T, T destination_state S',
  1013      '''SELECT T.cw_destination_state, rel_allowed_transition1.eid_from, T.cw_eid
  1017      '''SELECT _T.cw_destination_state, rel_allowed_transition1.eid_from, _T.cw_eid
  1014 FROM allowed_transition_relation AS rel_allowed_transition1, cw_Transition AS T, cw_Workflow AS ET, state_of_relation AS rel_state_of0
  1018 FROM allowed_transition_relation AS rel_allowed_transition1, cw_Transition AS _T, cw_Workflow AS _ET, state_of_relation AS rel_state_of0
  1015 WHERE T.cw_destination_state=rel_state_of0.eid_from AND rel_state_of0.eid_to=ET.cw_eid AND ET.cw_name=CWUser AND rel_allowed_transition1.eid_to=T.cw_eid'''),
  1019 WHERE _T.cw_destination_state=rel_state_of0.eid_from AND rel_state_of0.eid_to=_ET.cw_eid AND _ET.cw_name=CWUser AND rel_allowed_transition1.eid_to=_T.cw_eid'''),
  1016 
  1020 
  1017     ('Any O WHERE S eid 0, S in_state O',
  1021     ('Any O WHERE S eid 0, S in_state O',
  1018      '''SELECT S.cw_in_state
  1022      '''SELECT _S.cw_in_state
  1019 FROM cw_Affaire AS S
  1023 FROM cw_Affaire AS _S
  1020 WHERE S.cw_eid=0 AND S.cw_in_state IS NOT NULL
  1024 WHERE _S.cw_eid=0 AND _S.cw_in_state IS NOT NULL
  1021 UNION ALL
  1025 UNION ALL
  1022 SELECT S.cw_in_state
  1026 SELECT _S.cw_in_state
  1023 FROM cw_CWUser AS S
  1027 FROM cw_CWUser AS _S
  1024 WHERE S.cw_eid=0 AND S.cw_in_state IS NOT NULL
  1028 WHERE _S.cw_eid=0 AND _S.cw_in_state IS NOT NULL
  1025 UNION ALL
  1029 UNION ALL
  1026 SELECT S.cw_in_state
  1030 SELECT _S.cw_in_state
  1027 FROM cw_Note AS S
  1031 FROM cw_Note AS _S
  1028 WHERE S.cw_eid=0 AND S.cw_in_state IS NOT NULL''')
  1032 WHERE _S.cw_eid=0 AND _S.cw_in_state IS NOT NULL''')
  1029 
  1033 
  1030     ]
  1034     ]
  1031 
  1035 
  1032 INTERSECT = [
  1036 INTERSECT = [
  1033     ('Any SN WHERE NOT X in_state S, S name SN',
  1037     ('Any SN WHERE NOT X in_state S, S name SN',
  1034      '''SELECT S.cw_name
  1038      '''SELECT _S.cw_name
  1035 FROM cw_State AS S
  1039 FROM cw_State AS _S
  1036 WHERE NOT EXISTS(SELECT 1 FROM cw_Affaire AS X WHERE X.cw_in_state=S.cw_eid)
  1040 WHERE NOT EXISTS(SELECT 1 FROM cw_Affaire AS _X WHERE _X.cw_in_state=_S.cw_eid)
  1037 INTERSECT
  1041 INTERSECT
  1038 SELECT S.cw_name
  1042 SELECT _S.cw_name
  1039 FROM cw_State AS S
  1043 FROM cw_State AS _S
  1040 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS X WHERE X.cw_in_state=S.cw_eid)
  1044 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid)
  1041 INTERSECT
  1045 INTERSECT
  1042 SELECT S.cw_name
  1046 SELECT _S.cw_name
  1043 FROM cw_State AS S
  1047 FROM cw_State AS _S
  1044 WHERE NOT EXISTS(SELECT 1 FROM cw_Note AS X WHERE X.cw_in_state=S.cw_eid)'''),
  1048 WHERE NOT EXISTS(SELECT 1 FROM cw_Note AS _X WHERE _X.cw_in_state=_S.cw_eid)'''),
  1045 
  1049 
  1046     ('Any PN WHERE NOT X travaille S, X nom PN, S is IN(Division, Societe)',
  1050     ('Any PN WHERE NOT X travaille S, X nom PN, S is IN(Division, Societe)',
  1047      '''SELECT X.cw_nom
  1051      '''SELECT _X.cw_nom
  1048 FROM cw_Personne AS X
  1052 FROM cw_Personne AS _X
  1049 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0,cw_Division AS S WHERE rel_travaille0.eid_from=X.cw_eid AND rel_travaille0.eid_to=S.cw_eid)
  1053 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0,cw_Division AS _S WHERE rel_travaille0.eid_from=_X.cw_eid AND rel_travaille0.eid_to=_S.cw_eid)
  1050 INTERSECT
  1054 INTERSECT
  1051 SELECT X.cw_nom
  1055 SELECT _X.cw_nom
  1052 FROM cw_Personne AS X
  1056 FROM cw_Personne AS _X
  1053 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0,cw_Societe AS S WHERE rel_travaille0.eid_from=X.cw_eid AND rel_travaille0.eid_to=S.cw_eid)'''),
  1057 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0,cw_Societe AS _S WHERE rel_travaille0.eid_from=_X.cw_eid AND rel_travaille0.eid_to=_S.cw_eid)'''),
  1054 
  1058 
  1055     ('Any PN WHERE NOT X travaille S, S nom PN, S is IN(Division, Societe)',
  1059     ('Any PN WHERE NOT X travaille S, S nom PN, S is IN(Division, Societe)',
  1056      '''SELECT S.cw_nom
  1060      '''SELECT _S.cw_nom
  1057 FROM cw_Division AS S
  1061 FROM cw_Division AS _S
  1058 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=S.cw_eid)
  1062 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid)
  1059 UNION ALL
  1063 UNION ALL
  1060 SELECT S.cw_nom
  1064 SELECT _S.cw_nom
  1061 FROM cw_Societe AS S
  1065 FROM cw_Societe AS _S
  1062 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=S.cw_eid)'''),
  1066 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid)'''),
  1063 
  1067 
  1064     ('Personne X WHERE NOT X travaille S, S nom "chouette"',
  1068     ('Personne X WHERE NOT X travaille S, S nom "chouette"',
  1065      '''SELECT X.cw_eid
  1069      '''SELECT _X.cw_eid
  1066 FROM cw_Division AS S, cw_Personne AS X
  1070 FROM cw_Division AS _S, cw_Personne AS _X
  1067 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=X.cw_eid AND rel_travaille0.eid_to=S.cw_eid) AND S.cw_nom=chouette
  1071 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid AND rel_travaille0.eid_to=_S.cw_eid) AND _S.cw_nom=chouette
  1068 UNION ALL
  1072 UNION ALL
  1069 SELECT X.cw_eid
  1073 SELECT _X.cw_eid
  1070 FROM cw_Personne AS X, cw_Societe AS S
  1074 FROM cw_Personne AS _X, cw_Societe AS _S
  1071 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=X.cw_eid AND rel_travaille0.eid_to=S.cw_eid) AND S.cw_nom=chouette
  1075 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid AND rel_travaille0.eid_to=_S.cw_eid) AND _S.cw_nom=chouette
  1072 UNION ALL
  1076 UNION ALL
  1073 SELECT X.cw_eid
  1077 SELECT _X.cw_eid
  1074 FROM cw_Personne AS X, cw_SubDivision AS S
  1078 FROM cw_Personne AS _X, cw_SubDivision AS _S
  1075 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=X.cw_eid AND rel_travaille0.eid_to=S.cw_eid) AND S.cw_nom=chouette'''),
  1079 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid AND rel_travaille0.eid_to=_S.cw_eid) AND _S.cw_nom=chouette'''),
  1076 
  1080 
  1077     ('Any X WHERE X is ET, ET eid 2',
  1081     ('Any X WHERE X is ET, ET eid 2',
  1078      '''SELECT rel_is0.eid_from
  1082      '''SELECT rel_is0.eid_from
  1079 FROM is_relation AS rel_is0
  1083 FROM is_relation AS rel_is0
  1080 WHERE rel_is0.eid_to=2'''),
  1084 WHERE rel_is0.eid_to=2'''),
  1163             raise
  1167             raise
  1164         return
  1168         return
  1165 
  1169 
  1166     def test1(self):
  1170     def test1(self):
  1167         self._checkall('Any count(RDEF) WHERE RDEF relation_type X, X eid %(x)s',
  1171         self._checkall('Any count(RDEF) WHERE RDEF relation_type X, X eid %(x)s',
  1168                        ("""SELECT COUNT(T1.C0) FROM (SELECT RDEF.cw_eid AS C0
  1172                        ("""SELECT COUNT(T1.C0) FROM (SELECT _RDEF.cw_eid AS C0
  1169 FROM cw_CWAttribute AS RDEF
  1173 FROM cw_CWAttribute AS _RDEF
  1170 WHERE RDEF.cw_relation_type=%(x)s
  1174 WHERE _RDEF.cw_relation_type=%(x)s
  1171 UNION ALL
  1175 UNION ALL
  1172 SELECT RDEF.cw_eid AS C0
  1176 SELECT _RDEF.cw_eid AS C0
  1173 FROM cw_CWRelation AS RDEF
  1177 FROM cw_CWRelation AS _RDEF
  1174 WHERE RDEF.cw_relation_type=%(x)s) AS T1""", {}),
  1178 WHERE _RDEF.cw_relation_type=%(x)s) AS T1""", {}),
  1175                        )
  1179                        )
  1176 
  1180 
  1177     def test2(self):
  1181     def test2(self):
  1178         self._checkall('Any X WHERE C comments X, C eid %(x)s',
  1182         self._checkall('Any X WHERE C comments X, C eid %(x)s',
  1179                        ('''SELECT rel_comments0.eid_to
  1183                        ('''SELECT rel_comments0.eid_to
  1193 WHERE rel_in_basket0.eid_to=12''')
  1197 WHERE rel_in_basket0.eid_to=12''')
  1194 
  1198 
  1195     def test_varmap1(self):
  1199     def test_varmap1(self):
  1196         self._check('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"',
  1200         self._check('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"',
  1197                     '''SELECT T00.x, T00.l
  1201                     '''SELECT T00.x, T00.l
  1198 FROM T00, cw_CWGroup AS G, in_group_relation AS rel_in_group0
  1202 FROM T00, cw_CWGroup AS _G, in_group_relation AS rel_in_group0
  1199 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=G.cw_eid AND G.cw_name=users''',
  1203 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=_G.cw_eid AND _G.cw_name=users''',
  1200                     varmap={'X': 'T00.x', 'X.login': 'T00.l'})
  1204                     varmap={'X': 'T00.x', 'X.login': 'T00.l'})
  1201 
  1205 
  1202     def test_varmap2(self):
  1206     def test_varmap2(self):
  1203         self._check('Any X,L,GN WHERE X is CWUser, X in_group G, X login L, G name GN',
  1207         self._check('Any X,L,GN WHERE X is CWUser, X in_group G, X login L, G name GN',
  1204                     '''SELECT T00.x, T00.l, G.cw_name
  1208                     '''SELECT T00.x, T00.l, _G.cw_name
  1205 FROM T00, cw_CWGroup AS G, in_group_relation AS rel_in_group0
  1209 FROM T00, cw_CWGroup AS _G, in_group_relation AS rel_in_group0
  1206 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=G.cw_eid''',
  1210 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=_G.cw_eid''',
  1207                     varmap={'X': 'T00.x', 'X.login': 'T00.l'})
  1211                     varmap={'X': 'T00.x', 'X.login': 'T00.l'})
  1208 
  1212 
  1209     def test_varmap3(self):
  1213     def test_varmap3(self):
  1210         self._check('Any %(x)s,D WHERE F data D, F is File',
  1214         self._check('Any %(x)s,D WHERE F data D, F is File',
  1211                     'SELECT 728, _TDF0.C0\nFROM _TDF0',
  1215                     'SELECT 728, _TDF0.C0\nFROM _TDF0',
  1214 
  1218 
  1215     def test_is_null_transform(self):
  1219     def test_is_null_transform(self):
  1216         union = self._prepare('Any X WHERE X login %(login)s')
  1220         union = self._prepare('Any X WHERE X login %(login)s')
  1217         r, args = self.o.generate(union, {'login': None})
  1221         r, args = self.o.generate(union, {'login': None})
  1218         self.assertLinesEquals((r % args).strip(),
  1222         self.assertLinesEquals((r % args).strip(),
  1219                                '''SELECT X.cw_eid
  1223                                '''SELECT _X.cw_eid
  1220 FROM cw_CWUser AS X
  1224 FROM cw_CWUser AS _X
  1221 WHERE X.cw_login IS NULL''')
  1225 WHERE _X.cw_login IS NULL''')
  1222 
  1226 
  1223     def test_parser_parse(self):
  1227     def test_parser_parse(self):
  1224         for t in self._parse(PARSER):
  1228         for t in self._parse(PARSER):
  1225             yield t
  1229             yield t
  1226 
  1230 
  1259     def test_union(self):
  1263     def test_union(self):
  1260         for t in self._parse((
  1264         for t in self._parse((
  1261             ('(Any N ORDERBY 1 WHERE X name N, X is State)'
  1265             ('(Any N ORDERBY 1 WHERE X name N, X is State)'
  1262              ' UNION '
  1266              ' UNION '
  1263              '(Any NN ORDERBY 1 WHERE XX name NN, XX is Transition)',
  1267              '(Any NN ORDERBY 1 WHERE XX name NN, XX is Transition)',
  1264              '''(SELECT X.cw_name
  1268              '''(SELECT _X.cw_name
  1265 FROM cw_State AS X
  1269 FROM cw_State AS _X
  1266 ORDER BY 1)
  1270 ORDER BY 1)
  1267 UNION ALL
  1271 UNION ALL
  1268 (SELECT XX.cw_name
  1272 (SELECT _XX.cw_name
  1269 FROM cw_Transition AS XX
  1273 FROM cw_Transition AS _XX
  1270 ORDER BY 1)'''),
  1274 ORDER BY 1)'''),
  1271             )):
  1275             )):
  1272             yield t
  1276             yield t
  1273 
  1277 
  1274     def test_subquery(self):
  1278     def test_subquery(self):
  1277             ('Any N ORDERBY 1 WITH N BEING '
  1281             ('Any N ORDERBY 1 WITH N BEING '
  1278              '((Any N WHERE X name N, X is State)'
  1282              '((Any N WHERE X name N, X is State)'
  1279              ' UNION '
  1283              ' UNION '
  1280              '(Any NN WHERE XX name NN, XX is Transition))',
  1284              '(Any NN WHERE XX name NN, XX is Transition))',
  1281              '''SELECT _T0.C0
  1285              '''SELECT _T0.C0
  1282 FROM ((SELECT X.cw_name AS C0
  1286 FROM ((SELECT _X.cw_name AS C0
  1283 FROM cw_State AS X)
  1287 FROM cw_State AS _X)
  1284 UNION ALL
  1288 UNION ALL
  1285 (SELECT XX.cw_name AS C0
  1289 (SELECT _XX.cw_name AS C0
  1286 FROM cw_Transition AS XX)) AS _T0
  1290 FROM cw_Transition AS _XX)) AS _T0
  1287 ORDER BY 1'''),
  1291 ORDER BY 1'''),
  1288 
  1292 
  1289             ('Any N,NX ORDERBY NX WITH N,NX BEING '
  1293             ('Any N,NX ORDERBY NX WITH N,NX BEING '
  1290              '((Any N,COUNT(X) GROUPBY N WHERE X name N, X is State HAVING COUNT(X)>1)'
  1294              '((Any N,COUNT(X) GROUPBY N WHERE X name N, X is State HAVING COUNT(X)>1)'
  1291              ' UNION '
  1295              ' UNION '
  1292              '(Any N,COUNT(X) GROUPBY N WHERE X name N, X is Transition HAVING COUNT(X)>1))',
  1296              '(Any N,COUNT(X) GROUPBY N WHERE X name N, X is Transition HAVING COUNT(X)>1))',
  1293              '''SELECT _T0.C0, _T0.C1
  1297              '''SELECT _T0.C0, _T0.C1
  1294 FROM ((SELECT X.cw_name AS C0, COUNT(X.cw_eid) AS C1
  1298 FROM ((SELECT _X.cw_name AS C0, COUNT(_X.cw_eid) AS C1
  1295 FROM cw_State AS X
  1299 FROM cw_State AS _X
  1296 GROUP BY X.cw_name
  1300 GROUP BY _X.cw_name
  1297 HAVING COUNT(X.cw_eid)>1)
  1301 HAVING COUNT(_X.cw_eid)>1)
  1298 UNION ALL
  1302 UNION ALL
  1299 (SELECT X.cw_name AS C0, COUNT(X.cw_eid) AS C1
  1303 (SELECT _X.cw_name AS C0, COUNT(_X.cw_eid) AS C1
  1300 FROM cw_Transition AS X
  1304 FROM cw_Transition AS _X
  1301 GROUP BY X.cw_name
  1305 GROUP BY _X.cw_name
  1302 HAVING COUNT(X.cw_eid)>1)) AS _T0
  1306 HAVING COUNT(_X.cw_eid)>1)) AS _T0
  1303 ORDER BY 2'''),
  1307 ORDER BY 2'''),
  1304 
  1308 
  1305             ('Any N,COUNT(X) GROUPBY N HAVING COUNT(X)>1 '
  1309             ('Any N,COUNT(X) GROUPBY N HAVING COUNT(X)>1 '
  1306              'WITH X, N BEING ((Any X, N WHERE X name N, X is State) UNION '
  1310              'WITH X, N BEING ((Any X, N WHERE X name N, X is State) UNION '
  1307              '                 (Any X, N WHERE X name N, X is Transition))',
  1311              '                 (Any X, N WHERE X name N, X is Transition))',
  1308              '''SELECT _T0.C1, COUNT(_T0.C0)
  1312              '''SELECT _T0.C1, COUNT(_T0.C0)
  1309 FROM ((SELECT X.cw_eid AS C0, X.cw_name AS C1
  1313 FROM ((SELECT _X.cw_eid AS C0, _X.cw_name AS C1
  1310 FROM cw_State AS X)
  1314 FROM cw_State AS _X)
  1311 UNION ALL
  1315 UNION ALL
  1312 (SELECT X.cw_eid AS C0, X.cw_name AS C1
  1316 (SELECT _X.cw_eid AS C0, _X.cw_name AS C1
  1313 FROM cw_Transition AS X)) AS _T0
  1317 FROM cw_Transition AS _X)) AS _T0
  1314 GROUP BY _T0.C1
  1318 GROUP BY _T0.C1
  1315 HAVING COUNT(_T0.C0)>1'''),
  1319 HAVING COUNT(_T0.C0)>1'''),
  1316 
  1320 
  1317             ('Any ETN,COUNT(X) GROUPBY ETN WHERE X is ET, ET name ETN '
  1321             ('Any ETN,COUNT(X) GROUPBY ETN WHERE X is ET, ET name ETN '
  1318              'WITH X BEING ((Any X WHERE X is Societe) UNION (Any X WHERE X is Affaire, (EXISTS(X owned_by 1)) OR ((EXISTS(D concerne B?, B owned_by 1, X identity D, B is Note)) OR (EXISTS(F concerne E?, E owned_by 1, E is Societe, X identity F)))))',
  1322              'WITH X BEING ((Any X WHERE X is Societe) UNION (Any X WHERE X is Affaire, (EXISTS(X owned_by 1)) OR ((EXISTS(D concerne B?, B owned_by 1, X identity D, B is Note)) OR (EXISTS(F concerne E?, E owned_by 1, E is Societe, X identity F)))))',
  1319              '''SELECT ET.cw_name, COUNT(_T0.C0)
  1323              '''SELECT _ET.cw_name, COUNT(_T0.C0)
  1320 FROM ((SELECT X.cw_eid AS C0
  1324 FROM ((SELECT _X.cw_eid AS C0
  1321 FROM cw_Societe AS X)
  1325 FROM cw_Societe AS _X)
  1322 UNION ALL
  1326 UNION ALL
  1323 (SELECT X.cw_eid AS C0
  1327 (SELECT _X.cw_eid AS C0
  1324 FROM cw_Affaire AS X
  1328 FROM cw_Affaire AS _X
  1325 WHERE ((EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_from=X.cw_eid AND rel_owned_by0.eid_to=1)) OR (((EXISTS(SELECT 1 FROM cw_Affaire AS D LEFT OUTER JOIN concerne_relation AS rel_concerne1 ON (rel_concerne1.eid_from=D.cw_eid) LEFT OUTER JOIN cw_Note AS B ON (rel_concerne1.eid_to=B.cw_eid), owned_by_relation AS rel_owned_by2 WHERE rel_owned_by2.eid_from=B.cw_eid AND rel_owned_by2.eid_to=1 AND X.cw_eid=D.cw_eid)) OR (EXISTS(SELECT 1 FROM cw_Affaire AS F LEFT OUTER JOIN concerne_relation AS rel_concerne3 ON (rel_concerne3.eid_from=F.cw_eid) LEFT OUTER JOIN cw_Societe AS E ON (rel_concerne3.eid_to=E.cw_eid), owned_by_relation AS rel_owned_by4 WHERE rel_owned_by4.eid_from=E.cw_eid AND rel_owned_by4.eid_to=1 AND X.cw_eid=F.cw_eid))))))) AS _T0, cw_CWEType AS ET, is_relation AS rel_is0
  1329 WHERE ((EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_owned_by0.eid_to=1)) OR (((EXISTS(SELECT 1 FROM cw_Affaire AS _D LEFT OUTER JOIN concerne_relation AS rel_concerne1 ON (rel_concerne1.eid_from=_D.cw_eid) LEFT OUTER JOIN cw_Note AS _B ON (rel_concerne1.eid_to=_B.cw_eid), owned_by_relation AS rel_owned_by2 WHERE rel_owned_by2.eid_from=_B.cw_eid AND rel_owned_by2.eid_to=1 AND _X.cw_eid=_D.cw_eid)) OR (EXISTS(SELECT 1 FROM cw_Affaire AS _F LEFT OUTER JOIN concerne_relation AS rel_concerne3 ON (rel_concerne3.eid_from=_F.cw_eid) LEFT OUTER JOIN cw_Societe AS _E ON (rel_concerne3.eid_to=_E.cw_eid), owned_by_relation AS rel_owned_by4 WHERE rel_owned_by4.eid_from=_E.cw_eid AND rel_owned_by4.eid_to=1 AND _X.cw_eid=_F.cw_eid))))))) AS _T0, cw_CWEType AS _ET, is_relation AS rel_is0
  1326 WHERE rel_is0.eid_from=_T0.C0 AND rel_is0.eid_to=ET.cw_eid
  1330 WHERE rel_is0.eid_from=_T0.C0 AND rel_is0.eid_to=_ET.cw_eid
  1327 GROUP BY ET.cw_name'''),
  1331 GROUP BY _ET.cw_name'''),
  1328             )):
  1332             )):
  1329             yield t
  1333             yield t
  1330 
  1334 
  1331 
  1335 
  1332     def test_subquery_error(self):
  1336     def test_subquery_error(self):
  1351              """SELECT appears0.uid
  1355              """SELECT appears0.uid
  1352 FROM appears AS appears0
  1356 FROM appears AS appears0
  1353 WHERE appears0.words @@ to_tsquery('default', 'toto&tata')"""),
  1357 WHERE appears0.words @@ to_tsquery('default', 'toto&tata')"""),
  1354 
  1358 
  1355             ('Personne X WHERE X has_text "toto tata"',
  1359             ('Personne X WHERE X has_text "toto tata"',
  1356              """SELECT X.eid
  1360              """SELECT _X.eid
  1357 FROM appears AS appears0, entities AS X
  1361 FROM appears AS appears0, entities AS _X
  1358 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.eid AND X.type='Personne'"""),
  1362 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.eid AND _X.type='Personne'"""),
  1359 
  1363 
  1360             ('Personne X WHERE X has_text %(text)s',
  1364             ('Personne X WHERE X has_text %(text)s',
  1361              """SELECT X.eid
  1365              """SELECT _X.eid
  1362 FROM appears AS appears0, entities AS X
  1366 FROM appears AS appears0, entities AS _X
  1363 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=X.eid AND X.type='Personne'"""),
  1367 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=_X.eid AND _X.type='Personne'"""),
  1364 
  1368 
  1365             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1369             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1366              """SELECT X.cw_eid
  1370              """SELECT _X.cw_eid
  1367 FROM appears AS appears0, cw_Basket AS X
  1371 FROM appears AS appears0, cw_Basket AS _X
  1368 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1372 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1369 UNION ALL
  1373 UNION ALL
  1370 SELECT X.cw_eid
  1374 SELECT _X.cw_eid
  1371 FROM appears AS appears0, cw_Folder AS X
  1375 FROM appears AS appears0, cw_Folder AS _X
  1372 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1376 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1373 """),
  1377 """),
  1374 
  1378 
  1375             ('Personne X where X has_text %(text)s, X travaille S, S has_text %(text)s',
  1379             ('Personne X where X has_text %(text)s, X travaille S, S has_text %(text)s',
  1376              """SELECT X.eid
  1380              """SELECT _X.eid
  1377 FROM appears AS appears0, appears AS appears2, entities AS X, travaille_relation AS rel_travaille1
  1381 FROM appears AS appears0, appears AS appears2, entities AS _X, travaille_relation AS rel_travaille1
  1378 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=X.eid AND X.type='Personne' AND X.eid=rel_travaille1.eid_from AND appears2.uid=rel_travaille1.eid_to AND appears2.words @@ to_tsquery('default', 'hip&hop&momo')"""),
  1382 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=_X.eid AND _X.type='Personne' AND _X.eid=rel_travaille1.eid_from AND appears2.uid=rel_travaille1.eid_to AND appears2.words @@ to_tsquery('default', 'hip&hop&momo')"""),
  1379             )):
  1383             )):
  1380             yield t
  1384             yield t
  1381 
  1385 
  1382 
  1386 
  1383     def test_from_clause_needed(self):
  1387     def test_from_clause_needed(self):
  1384         queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')",
  1388         queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')",
  1385                     '''SELECT 1
  1389                     '''SELECT 1
  1386 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS T WHERE T.cw_name=managers)'''),
  1390 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS _T WHERE _T.cw_name=managers)'''),
  1387                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1391                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1388                     '''SELECT 5, 6
  1392                     '''SELECT 5, 6
  1389 WHERE NOT EXISTS(SELECT 1 FROM created_by_relation AS rel_created_by0 WHERE rel_created_by0.eid_from=5 AND rel_created_by0.eid_to=6)'''),
  1393 WHERE NOT EXISTS(SELECT 1 FROM created_by_relation AS rel_created_by0 WHERE rel_created_by0.eid_from=5 AND rel_created_by0.eid_to=6)'''),
  1390                    ]
  1394                    ]
  1391         for t in self._parse(queries):
  1395         for t in self._parse(queries):
  1392             yield t
  1396             yield t
  1393 
  1397 
  1394     def test_ambigous_exists_no_from_clause(self):
  1398     def test_ambigous_exists_no_from_clause(self):
  1395         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1399         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1396                     '''SELECT COUNT(1)
  1400                     '''SELECT COUNT(1)
  1397 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS P WHERE rel_owned_by0.eid_from=P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS P WHERE rel_owned_by1.eid_from=P.cw_eid AND rel_owned_by1.eid_to=1)''')
  1401 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS _P WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS _P WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=1)''')
  1398 
  1402 
  1399     def test_attr_map(self):
  1403     def test_attr_map(self):
  1400         def generate_ref(gen, linkedvar, rel):
  1404         def generate_ref(gen, linkedvar, rel):
  1401             linkedvar.accept(gen)
  1405             linkedvar.accept(gen)
  1402             return 'VERSION_DATA(%s)' % linkedvar._q_sql
  1406             return 'VERSION_DATA(%s)' % linkedvar._q_sql
  1403         self.o.attr_map['Affaire.ref'] = generate_ref
  1407         self.o.attr_map['Affaire.ref'] = generate_ref
  1404         try:
  1408         try:
  1405             self._check('Any R WHERE X ref R',
  1409             self._check('Any R WHERE X ref R',
  1406                         '''SELECT VERSION_DATA(X.cw_eid)
  1410                         '''SELECT VERSION_DATA(_X.cw_eid)
  1407 FROM cw_Affaire AS X''')
  1411 FROM cw_Affaire AS _X''')
  1408             self._check('Any X WHERE X ref 1',
  1412             self._check('Any X WHERE X ref 1',
  1409                         '''SELECT X.cw_eid
  1413                         '''SELECT _X.cw_eid
  1410 FROM cw_Affaire AS X
  1414 FROM cw_Affaire AS _X
  1411 WHERE VERSION_DATA(X.cw_eid)=1''')
  1415 WHERE VERSION_DATA(_X.cw_eid)=1''')
  1412         finally:
  1416         finally:
  1413             self.o.attr_map.clear()
  1417             self.o.attr_map.clear()
  1414 
  1418 
  1415 
  1419 
  1416 class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC):
  1420 class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC):
  1431     def test_union(self):
  1435     def test_union(self):
  1432         for t in self._parse((
  1436         for t in self._parse((
  1433             ('(Any N ORDERBY 1 WHERE X name N, X is State)'
  1437             ('(Any N ORDERBY 1 WHERE X name N, X is State)'
  1434              ' UNION '
  1438              ' UNION '
  1435              '(Any NN ORDERBY 1 WHERE XX name NN, XX is Transition)',
  1439              '(Any NN ORDERBY 1 WHERE XX name NN, XX is Transition)',
  1436              '''SELECT X.cw_name
  1440              '''SELECT _X.cw_name
  1437 FROM cw_State AS X
  1441 FROM cw_State AS _X
  1438 ORDER BY 1
  1442 ORDER BY 1
  1439 UNION ALL
  1443 UNION ALL
  1440 SELECT XX.cw_name
  1444 SELECT _XX.cw_name
  1441 FROM cw_Transition AS XX
  1445 FROM cw_Transition AS _XX
  1442 ORDER BY 1'''),
  1446 ORDER BY 1'''),
  1443             )):
  1447             )):
  1444             yield t
  1448             yield t
  1445 
  1449 
  1446 
  1450 
  1451             ('Any N ORDERBY 1 WITH N BEING '
  1455             ('Any N ORDERBY 1 WITH N BEING '
  1452              '((Any N WHERE X name N, X is State)'
  1456              '((Any N WHERE X name N, X is State)'
  1453              ' UNION '
  1457              ' UNION '
  1454              '(Any NN WHERE XX name NN, XX is Transition))',
  1458              '(Any NN WHERE XX name NN, XX is Transition))',
  1455              '''SELECT _T0.C0
  1459              '''SELECT _T0.C0
  1456 FROM (SELECT X.cw_name AS C0
  1460 FROM (SELECT _X.cw_name AS C0
  1457 FROM cw_State AS X
  1461 FROM cw_State AS _X
  1458 UNION ALL
  1462 UNION ALL
  1459 SELECT XX.cw_name AS C0
  1463 SELECT _XX.cw_name AS C0
  1460 FROM cw_Transition AS XX) AS _T0
  1464 FROM cw_Transition AS _XX) AS _T0
  1461 ORDER BY 1'''),
  1465 ORDER BY 1'''),
  1462 
  1466 
  1463             ('Any N,NX ORDERBY NX WITH N,NX BEING '
  1467             ('Any N,NX ORDERBY NX WITH N,NX BEING '
  1464              '((Any N,COUNT(X) GROUPBY N WHERE X name N, X is State HAVING COUNT(X)>1)'
  1468              '((Any N,COUNT(X) GROUPBY N WHERE X name N, X is State HAVING COUNT(X)>1)'
  1465              ' UNION '
  1469              ' UNION '
  1466              '(Any N,COUNT(X) GROUPBY N WHERE X name N, X is Transition HAVING COUNT(X)>1))',
  1470              '(Any N,COUNT(X) GROUPBY N WHERE X name N, X is Transition HAVING COUNT(X)>1))',
  1467              '''SELECT _T0.C0, _T0.C1
  1471              '''SELECT _T0.C0, _T0.C1
  1468 FROM (SELECT X.cw_name AS C0, COUNT(X.cw_eid) AS C1
  1472 FROM (SELECT _X.cw_name AS C0, COUNT(_X.cw_eid) AS C1
  1469 FROM cw_State AS X
  1473 FROM cw_State AS _X
  1470 GROUP BY X.cw_name
  1474 GROUP BY _X.cw_name
  1471 HAVING COUNT(X.cw_eid)>1
  1475 HAVING COUNT(_X.cw_eid)>1
  1472 UNION ALL
  1476 UNION ALL
  1473 SELECT X.cw_name AS C0, COUNT(X.cw_eid) AS C1
  1477 SELECT _X.cw_name AS C0, COUNT(_X.cw_eid) AS C1
  1474 FROM cw_Transition AS X
  1478 FROM cw_Transition AS _X
  1475 GROUP BY X.cw_name
  1479 GROUP BY _X.cw_name
  1476 HAVING COUNT(X.cw_eid)>1) AS _T0
  1480 HAVING COUNT(_X.cw_eid)>1) AS _T0
  1477 ORDER BY 2'''),
  1481 ORDER BY 2'''),
  1478 
  1482 
  1479             ('Any N,COUNT(X) GROUPBY N HAVING COUNT(X)>1 '
  1483             ('Any N,COUNT(X) GROUPBY N HAVING COUNT(X)>1 '
  1480              'WITH X, N BEING ((Any X, N WHERE X name N, X is State) UNION '
  1484              'WITH X, N BEING ((Any X, N WHERE X name N, X is State) UNION '
  1481              '                 (Any X, N WHERE X name N, X is Transition))',
  1485              '                 (Any X, N WHERE X name N, X is Transition))',
  1482              '''SELECT _T0.C1, COUNT(_T0.C0)
  1486              '''SELECT _T0.C1, COUNT(_T0.C0)
  1483 FROM (SELECT X.cw_eid AS C0, X.cw_name AS C1
  1487 FROM (SELECT _X.cw_eid AS C0, _X.cw_name AS C1
  1484 FROM cw_State AS X
  1488 FROM cw_State AS _X
  1485 UNION ALL
  1489 UNION ALL
  1486 SELECT X.cw_eid AS C0, X.cw_name AS C1
  1490 SELECT _X.cw_eid AS C0, _X.cw_name AS C1
  1487 FROM cw_Transition AS X) AS _T0
  1491 FROM cw_Transition AS _X) AS _T0
  1488 GROUP BY _T0.C1
  1492 GROUP BY _T0.C1
  1489 HAVING COUNT(_T0.C0)>1'''),
  1493 HAVING COUNT(_T0.C0)>1'''),
  1490             )):
  1494             )):
  1491             yield t
  1495             yield t
  1492 
  1496 
  1501              """SELECT appears0.uid
  1505              """SELECT appears0.uid
  1502 FROM appears AS appears0
  1506 FROM appears AS appears0
  1503 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('hip', 'hop', 'momo'))"""),
  1507 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('hip', 'hop', 'momo'))"""),
  1504 
  1508 
  1505             ('Personne X WHERE X has_text "toto tata"',
  1509             ('Personne X WHERE X has_text "toto tata"',
  1506              """SELECT X.eid
  1510              """SELECT _X.eid
  1507 FROM appears AS appears0, entities AS X
  1511 FROM appears AS appears0, entities AS _X
  1508 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1512 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=_X.eid AND _X.type='Personne'"""),
  1509 
  1513 
  1510             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1514             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1511              """SELECT X.cw_eid
  1515              """SELECT _X.cw_eid
  1512 FROM appears AS appears0, cw_Basket AS X
  1516 FROM appears AS appears0, cw_Basket AS _X
  1513 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1517 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1514 UNION ALL
  1518 UNION ALL
  1515 SELECT X.cw_eid
  1519 SELECT _X.cw_eid
  1516 FROM appears AS appears0, cw_Folder AS X
  1520 FROM appears AS appears0, cw_Folder AS _X
  1517 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1521 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1518 """),
  1522 """),
  1519             )):
  1523             )):
  1520             yield t
  1524             yield t
  1521 
  1525 
  1522 
  1526 
  1538 
  1542 
  1539     def test_from_clause_needed(self):
  1543     def test_from_clause_needed(self):
  1540         queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')",
  1544         queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')",
  1541                     '''SELECT 1
  1545                     '''SELECT 1
  1542 FROM (SELECT 1) AS _T
  1546 FROM (SELECT 1) AS _T
  1543 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS T WHERE T.cw_name=managers)'''),
  1547 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS _T WHERE _T.cw_name=managers)'''),
  1544                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1548                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1545                     '''SELECT 5, 6
  1549                     '''SELECT 5, 6
  1546 FROM (SELECT 1) AS _T
  1550 FROM (SELECT 1) AS _T
  1547 WHERE NOT EXISTS(SELECT 1 FROM created_by_relation AS rel_created_by0 WHERE rel_created_by0.eid_from=5 AND rel_created_by0.eid_to=6)'''),
  1551 WHERE NOT EXISTS(SELECT 1 FROM created_by_relation AS rel_created_by0 WHERE rel_created_by0.eid_from=5 AND rel_created_by0.eid_to=6)'''),
  1548                    ]
  1552                    ]
  1555             ('Any X WHERE X has_text "toto tata"',
  1559             ('Any X WHERE X has_text "toto tata"',
  1556              """SELECT appears0.uid
  1560              """SELECT appears0.uid
  1557 FROM appears AS appears0
  1561 FROM appears AS appears0
  1558 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE)"""),
  1562 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE)"""),
  1559             ('Personne X WHERE X has_text "toto tata"',
  1563             ('Personne X WHERE X has_text "toto tata"',
  1560              """SELECT X.eid
  1564              """SELECT _X.eid
  1561 FROM appears AS appears0, entities AS X
  1565 FROM appears AS appears0, entities AS _X
  1562 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1566 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=_X.eid AND _X.type='Personne'"""),
  1563             ('Personne X WHERE X has_text %(text)s',
  1567             ('Personne X WHERE X has_text %(text)s',
  1564              """SELECT X.eid
  1568              """SELECT _X.eid
  1565 FROM appears AS appears0, entities AS X
  1569 FROM appears AS appears0, entities AS _X
  1566 WHERE MATCH (appears0.words) AGAINST ('hip hop momo' IN BOOLEAN MODE) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1570 WHERE MATCH (appears0.words) AGAINST ('hip hop momo' IN BOOLEAN MODE) AND appears0.uid=_X.eid AND _X.type='Personne'"""),
  1567             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1571             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1568              """SELECT X.cw_eid
  1572              """SELECT _X.cw_eid
  1569 FROM appears AS appears0, cw_Basket AS X
  1573 FROM appears AS appears0, cw_Basket AS _X
  1570 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1574 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1571 UNION ALL
  1575 UNION ALL
  1572 SELECT X.cw_eid
  1576 SELECT _X.cw_eid
  1573 FROM appears AS appears0, cw_Folder AS X
  1577 FROM appears AS appears0, cw_Folder AS _X
  1574 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1578 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1575 """)
  1579 """)
  1576             ]
  1580             ]
  1577         for t in self._parse(queries):
  1581         for t in self._parse(queries):
  1578             yield t
  1582             yield t
  1579 
  1583 
  1580 
  1584 
  1581     def test_ambigous_exists_no_from_clause(self):
  1585     def test_ambigous_exists_no_from_clause(self):
  1582         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1586         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1583                     '''SELECT COUNT(1)
  1587                     '''SELECT COUNT(1)
  1584 FROM (SELECT 1) AS _T
  1588 FROM (SELECT 1) AS _T
  1585 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS P WHERE rel_owned_by0.eid_from=P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS P WHERE rel_owned_by1.eid_from=P.cw_eid AND rel_owned_by1.eid_to=1)''')
  1589 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS _P WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS _P WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=1)''')
  1586 
  1590 
  1587 
  1591 
  1588 
  1592 
  1589 
  1593 
  1590 if __name__ == '__main__':
  1594 if __name__ == '__main__':