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