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