server/test/unittest_rql2sql.py
changeset 5590 a56eb02f9ce7
parent 5575 8a531340c3ef
parent 5582 3e133b29a1a4
child 5768 1e73a466aa69
equal deleted inserted replaced
5578:6b9fee0c5c42 5590:a56eb02f9ce7
   174 
   174 
   175     ("Any X WHERE X prenom 'lulu',"
   175     ("Any X WHERE X prenom 'lulu',"
   176      "NOT EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   176      "NOT EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   177      '''SELECT _X.cw_eid
   177      '''SELECT _X.cw_eid
   178 FROM cw_Personne AS _X
   178 FROM cw_Personne AS _X
   179 WHERE _X.cw_prenom=lulu AND NOT EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS _G WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=_G.cw_eid AND ((_G.cw_name=lulufanclub) OR (_G.cw_name=managers)))'''),
   179 WHERE _X.cw_prenom=lulu AND NOT (EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS _G WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=_G.cw_eid AND ((_G.cw_name=lulufanclub) OR (_G.cw_name=managers))))'''),
   180 
   180 
   181 
   181 
   182 
   182 
   183 ]
   183 ]
   184 
   184 
   270 
   270 
   271     # 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
   271     # 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
   272     ('Any O WHERE NOT S ecrit_par O, S eid 1, S inline1 P, O inline2 P',
   272     ('Any O WHERE NOT S ecrit_par O, S eid 1, S inline1 P, O inline2 P',
   273      '''SELECT _O.cw_eid
   273      '''SELECT _O.cw_eid
   274 FROM cw_Note AS _S, cw_Personne AS _O
   274 FROM cw_Note AS _S, cw_Personne AS _O
   275 WHERE NOT EXISTS(SELECT 1 WHERE _S.cw_ecrit_par=_O.cw_eid) AND _S.cw_eid=1 AND _O.cw_inline2=_S.cw_inline1'''),
   275 WHERE NOT (_S.cw_ecrit_par=_O.cw_eid) AND _S.cw_eid=1 AND _O.cw_inline2=_S.cw_inline1'''),
   276 
   276 
   277     ('DISTINCT Any S ORDERBY stockproc(SI) WHERE NOT S ecrit_par O, S para SI',
   277     ('DISTINCT Any S ORDERBY stockproc(SI) WHERE NOT S ecrit_par O, S para SI',
   278      '''SELECT T1.C0 FROM (SELECT DISTINCT _S.cw_eid AS C0, STOCKPROC(_S.cw_para) AS C1
   278      '''SELECT T1.C0 FROM (SELECT DISTINCT _S.cw_eid AS C0, STOCKPROC(_S.cw_para) AS C1
   279 FROM cw_Note AS _S
   279 FROM cw_Note AS _S
   280 WHERE _S.cw_ecrit_par IS NULL
   280 WHERE _S.cw_ecrit_par IS NULL
   293 
   293 
   294 
   294 
   295     (' Any X,U WHERE C owned_by U, NOT X owned_by U, C eid 1, X eid 2',
   295     (' Any X,U WHERE C owned_by U, NOT X owned_by U, C eid 1, X eid 2',
   296      '''SELECT 2, rel_owned_by0.eid_to
   296      '''SELECT 2, rel_owned_by0.eid_to
   297 FROM owned_by_relation AS rel_owned_by0
   297 FROM owned_by_relation AS rel_owned_by0
   298 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)'''),
   298 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))'''),
   299 
   299 
   300     ('Any GN WHERE X in_group G, G name GN, (G name "managers" OR EXISTS(X copain T, T login in ("comme", "cochon")))',
   300     ('Any GN WHERE X in_group G, G name GN, (G name "managers" OR EXISTS(X copain T, T login in ("comme", "cochon")))',
   301      '''SELECT _G.cw_name
   301      '''SELECT _G.cw_name
   302 FROM cw_CWGroup AS _G, in_group_relation AS rel_in_group0
   302 FROM cw_CWGroup AS _G, in_group_relation AS rel_in_group0
   303 WHERE rel_in_group0.eid_to=_G.cw_eid AND ((_G.cw_name=managers) OR (EXISTS(SELECT 1 FROM copain_relation AS rel_copain1, cw_CWUser AS _T WHERE rel_copain1.eid_from=rel_in_group0.eid_from AND rel_copain1.eid_to=_T.cw_eid AND _T.cw_login IN(comme, cochon))))'''),
   303 WHERE rel_in_group0.eid_to=_G.cw_eid AND ((_G.cw_name=managers) OR (EXISTS(SELECT 1 FROM copain_relation AS rel_copain1, cw_CWUser AS _T WHERE rel_copain1.eid_from=rel_in_group0.eid_from AND rel_copain1.eid_to=_T.cw_eid AND _T.cw_login IN(comme, cochon))))'''),
   347 WHERE _X.cw_login=admin AND _X.cw_eid=_Y.cw_eid'''),
   347 WHERE _X.cw_login=admin AND _X.cw_eid=_Y.cw_eid'''),
   348 
   348 
   349     ('Any L WHERE X login "admin", NOT X identity Y, Y login L',
   349     ('Any L WHERE X login "admin", NOT X identity Y, Y login L',
   350      '''SELECT _Y.cw_login
   350      '''SELECT _Y.cw_login
   351 FROM cw_CWUser AS _X, cw_CWUser AS _Y
   351 FROM cw_CWUser AS _X, cw_CWUser AS _Y
   352 WHERE _X.cw_login=admin AND NOT _X.cw_eid=_Y.cw_eid'''),
   352 WHERE _X.cw_login=admin AND NOT (_X.cw_eid=_Y.cw_eid)'''),
   353 
   353 
   354     ('Any L WHERE X login "admin", X identity Y?, Y login L',
   354     ('Any L WHERE X login "admin", X identity Y?, Y login L',
   355      '''SELECT _Y.cw_login
   355      '''SELECT _Y.cw_login
   356 FROM cw_CWUser AS _X LEFT OUTER JOIN cw_CWUser AS _Y ON (_X.cw_eid=_Y.cw_eid)
   356 FROM cw_CWUser AS _X LEFT OUTER JOIN cw_CWUser AS _Y ON (_X.cw_eid=_Y.cw_eid)
   357 WHERE _X.cw_login=admin'''),
   357 WHERE _X.cw_login=admin'''),
   385 
   385 
   386     # DISTINCT but NEGED exists, can't be invariant
   386     # DISTINCT but NEGED exists, can't be invariant
   387     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT EXISTS(X read_permission Y)',
   387     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT EXISTS(X read_permission Y)',
   388      '''SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   388      '''SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   389 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   389 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   390 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   390 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT (EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid))
   391 UNION
   391 UNION
   392 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   392 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   393 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   393 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   394 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   394 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT (EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid))'''),
   395 
   395 
   396     # should generate the same query as above
   396     # should generate the same query as above
   397     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   397     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   398      '''SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   398      '''SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   399 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   399 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   400 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   400 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT (EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid))
   401 UNION
   401 UNION
   402 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   402 SELECT DISTINCT _X.cw_eid, _Y.cw_eid
   403 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   403 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   404 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   404 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT (EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid))'''),
   405 
   405 
   406     # neged relation, can't be inveriant
   406     # neged relation, can't be inveriant
   407     ('Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   407     ('Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y',
   408      '''SELECT _X.cw_eid, _Y.cw_eid
   408      '''SELECT _X.cw_eid, _Y.cw_eid
   409 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   409 FROM cw_CWEType AS _X, cw_CWGroup AS _Y
   410 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)
   410 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT (EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid))
   411 UNION ALL
   411 UNION ALL
   412 SELECT _X.cw_eid, _Y.cw_eid
   412 SELECT _X.cw_eid, _Y.cw_eid
   413 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   413 FROM cw_CWEType AS _X, cw_RQLExpression AS _Y
   414 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid)'''),
   414 WHERE _X.cw_name=CWGroup AND _Y.cw_eid IN(1, 2, 3) AND NOT (EXISTS(SELECT 1 FROM read_permission_relation AS rel_read_permission0 WHERE rel_read_permission0.eid_from=_X.cw_eid AND rel_read_permission0.eid_to=_Y.cw_eid))'''),
   415 
   415 
   416     ('Any MAX(X)+MIN(X), N GROUPBY N WHERE X name N, X is IN (Basket, Folder, Tag);',
   416     ('Any MAX(X)+MIN(X), N GROUPBY N WHERE X name N, X is IN (Basket, Folder, Tag);',
   417      '''SELECT (MAX(T1.C0) + MIN(T1.C0)), T1.C1 FROM (SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   417      '''SELECT (MAX(T1.C0) + MIN(T1.C0)), T1.C1 FROM (SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   418 FROM cw_Basket AS _X
   418 FROM cw_Basket AS _X
   419 UNION ALL
   419 UNION ALL
   540     ('Any O,AA,AB,AC ORDERBY AC DESC '
   540     ('Any O,AA,AB,AC ORDERBY AC DESC '
   541      'WHERE NOT S use_email O, S eid 1, O is EmailAddress, O address AA, O alias AB, O modification_date AC, '
   541      'WHERE NOT S use_email O, S eid 1, O is EmailAddress, O address AA, O alias AB, O modification_date AC, '
   542      'EXISTS(A use_email O, EXISTS(A identity B, NOT B in_group D, D name "guests", D is CWGroup), A is CWUser), B eid 2',
   542      'EXISTS(A use_email O, EXISTS(A identity B, NOT B in_group D, D name "guests", D is CWGroup), A is CWUser), B eid 2',
   543      '''SELECT _O.cw_eid, _O.cw_address, _O.cw_alias, _O.cw_modification_date
   543      '''SELECT _O.cw_eid, _O.cw_address, _O.cw_alias, _O.cw_modification_date
   544 FROM cw_EmailAddress AS _O
   544 FROM cw_EmailAddress AS _O
   545 WHERE NOT EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email0 WHERE rel_use_email0.eid_from=1 AND rel_use_email0.eid_to=_O.cw_eid) AND EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email1 WHERE rel_use_email1.eid_to=_O.cw_eid AND EXISTS(SELECT 1 FROM cw_CWGroup AS _D WHERE rel_use_email1.eid_from=2 AND NOT EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group2 WHERE rel_in_group2.eid_from=2 AND rel_in_group2.eid_to=_D.cw_eid) AND _D.cw_name=guests))
   545 WHERE NOT (EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email0 WHERE rel_use_email0.eid_from=1 AND rel_use_email0.eid_to=_O.cw_eid)) AND EXISTS(SELECT 1 FROM use_email_relation AS rel_use_email1 WHERE rel_use_email1.eid_to=_O.cw_eid AND EXISTS(SELECT 1 FROM cw_CWGroup AS _D WHERE rel_use_email1.eid_from=2 AND NOT (EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group2 WHERE rel_in_group2.eid_from=2 AND rel_in_group2.eid_to=_D.cw_eid)) AND _D.cw_name=guests))
   546 ORDER BY 4 DESC'''),
   546 ORDER BY 4 DESC'''),
   547 
   547 
   548 
   548 
   549     ("Any X WHERE X eid 0, X test TRUE",
   549     ("Any X WHERE X eid 0, X test TRUE",
   550      '''SELECT _X.cw_eid
   550      '''SELECT _X.cw_eid
   591 
   591 
   592 NEGATIONS = [
   592 NEGATIONS = [
   593     ("Personne X WHERE NOT X evaluee Y;",
   593     ("Personne X WHERE NOT X evaluee Y;",
   594      '''SELECT _X.cw_eid
   594      '''SELECT _X.cw_eid
   595 FROM cw_Personne AS _X
   595 FROM cw_Personne AS _X
   596 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_X.cw_eid)'''),
   596 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_X.cw_eid))'''),
   597 
   597 
   598     ("Note N WHERE NOT X evaluee N, X eid 0",
   598     ("Note N WHERE NOT X evaluee N, X eid 0",
   599      '''SELECT _N.cw_eid
   599      '''SELECT _N.cw_eid
   600 FROM cw_Note AS _N
   600 FROM cw_Note AS _N
   601 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)'''),
   601 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))'''),
   602 
   602 
   603     ('Any X WHERE NOT X travaille S, X is Personne',
   603     ('Any X WHERE NOT X travaille S, X is Personne',
   604      '''SELECT _X.cw_eid
   604      '''SELECT _X.cw_eid
   605 FROM cw_Personne AS _X
   605 FROM cw_Personne AS _X
   606 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid)'''),
   606 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid))'''),
   607 
   607 
   608     ("Personne P where not P datenaiss TODAY",
   608     ("Personne P where not P datenaiss TODAY",
   609      '''SELECT _P.cw_eid
   609      '''SELECT _P.cw_eid
   610 FROM cw_Personne AS _P
   610 FROM cw_Personne AS _P
   611 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
   611 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
   612 
   612 
   613     ("Personne P where NOT P concerne A",
   613     ("Personne P where NOT P concerne A",
   614      '''SELECT _P.cw_eid
   614      '''SELECT _P.cw_eid
   615 FROM cw_Personne AS _P
   615 FROM cw_Personne AS _P
   616 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=_P.cw_eid)'''),
   616 WHERE NOT (EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=_P.cw_eid))'''),
   617 
   617 
   618     ("Affaire A where not P concerne A",
   618     ("Affaire A where not P concerne A",
   619      '''SELECT _A.cw_eid
   619      '''SELECT _A.cw_eid
   620 FROM cw_Affaire AS _A
   620 FROM cw_Affaire AS _A
   621 WHERE NOT EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_to=_A.cw_eid)'''),
   621 WHERE NOT (EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_to=_A.cw_eid))'''),
   622     ("Personne P where not P concerne A, A sujet ~= 'TEST%'",
   622     ("Personne P where not P concerne A, A sujet ~= 'TEST%'",
   623      '''SELECT _P.cw_eid
   623      '''SELECT _P.cw_eid
   624 FROM cw_Affaire AS _A, cw_Personne AS _P
   624 FROM cw_Affaire AS _A, cw_Personne AS _P
   625 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%'''),
   625 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%'''),
   626 
   626 
   627     ('Any S WHERE NOT T eid 28258, T tags S',
   627     ('Any S WHERE NOT T eid 28258, T tags S',
   628      '''SELECT rel_tags0.eid_to
   628      '''SELECT rel_tags0.eid_to
   629 FROM tags_relation AS rel_tags0
   629 FROM tags_relation AS rel_tags0
   630 WHERE NOT (rel_tags0.eid_from=28258)'''),
   630 WHERE NOT (rel_tags0.eid_from=28258)'''),
   648 WHERE rel_created_by0.eid_from=5 AND NOT (rel_created_by0.eid_to=6)'''),
   648 WHERE rel_created_by0.eid_from=5 AND NOT (rel_created_by0.eid_to=6)'''),
   649 
   649 
   650     ('Note X WHERE NOT Y evaluee X',
   650     ('Note X WHERE NOT Y evaluee X',
   651      '''SELECT _X.cw_eid
   651      '''SELECT _X.cw_eid
   652 FROM cw_Note AS _X
   652 FROM cw_Note AS _X
   653 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_to=_X.cw_eid)'''),
   653 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_to=_X.cw_eid))'''),
   654 
   654 
   655     ('Any Y WHERE NOT Y evaluee X',
   655     ('Any Y WHERE NOT Y evaluee X',
   656      '''SELECT _Y.cw_eid
   656      '''SELECT _Y.cw_eid
   657 FROM cw_CWUser AS _Y
   657 FROM cw_CWUser AS _Y
   658 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   658 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))
   659 UNION ALL
   659 UNION ALL
   660 SELECT _Y.cw_eid
   660 SELECT _Y.cw_eid
   661 FROM cw_Division AS _Y
   661 FROM cw_Division AS _Y
   662 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   662 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))
   663 UNION ALL
   663 UNION ALL
   664 SELECT _Y.cw_eid
   664 SELECT _Y.cw_eid
   665 FROM cw_Personne AS _Y
   665 FROM cw_Personne AS _Y
   666 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   666 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))
   667 UNION ALL
   667 UNION ALL
   668 SELECT _Y.cw_eid
   668 SELECT _Y.cw_eid
   669 FROM cw_Societe AS _Y
   669 FROM cw_Societe AS _Y
   670 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)
   670 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))
   671 UNION ALL
   671 UNION ALL
   672 SELECT _Y.cw_eid
   672 SELECT _Y.cw_eid
   673 FROM cw_SubDivision AS _Y
   673 FROM cw_SubDivision AS _Y
   674 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid)'''),
   674 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))'''),
   675 
   675 
   676     ('Any X WHERE NOT Y evaluee X, Y is CWUser',
   676     ('Any X WHERE NOT Y evaluee X, Y is CWUser',
   677      '''SELECT _X.cw_eid
   677      '''SELECT _X.cw_eid
   678 FROM cw_Note AS _X
   678 FROM cw_Note AS _X
   679 WHERE NOT EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0,cw_CWUser AS _Y WHERE rel_evaluee0.eid_from=_Y.cw_eid AND rel_evaluee0.eid_to=_X.cw_eid)'''),
   679 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0, cw_CWUser AS _Y WHERE rel_evaluee0.eid_from=_Y.cw_eid AND rel_evaluee0.eid_to=_X.cw_eid))'''),
   680 
   680 
   681     ('Any X,RT WHERE X relation_type RT, NOT X is CWAttribute',
   681     ('Any X,RT WHERE X relation_type RT, NOT X is CWAttribute',
   682      '''SELECT _X.cw_eid, _X.cw_relation_type
   682      '''SELECT _X.cw_eid, _X.cw_relation_type
   683 FROM cw_CWRelation AS _X
   683 FROM cw_CWRelation AS _X
   684 WHERE _X.cw_relation_type IS NOT NULL'''),
   684 WHERE _X.cw_relation_type IS NOT NULL'''),
   689 WHERE _P.cw_for_user IS NULL'''),
   689 WHERE _P.cw_for_user IS NULL'''),
   690 
   690 
   691     ('Any S WHERE NOT X in_state S, X is IN(Affaire, CWUser)',
   691     ('Any S WHERE NOT X in_state S, X is IN(Affaire, CWUser)',
   692      '''SELECT _S.cw_eid
   692      '''SELECT _S.cw_eid
   693 FROM cw_State AS _S
   693 FROM cw_State AS _S
   694 WHERE NOT EXISTS(SELECT 1 FROM cw_Affaire AS _X WHERE _X.cw_in_state=_S.cw_eid)
   694 WHERE NOT (EXISTS(SELECT 1 FROM cw_Affaire AS _X WHERE _X.cw_in_state=_S.cw_eid UNION SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid))'''),
   695 INTERSECT
       
   696 SELECT _S.cw_eid
       
   697 FROM cw_State AS _S
       
   698 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid)'''),
       
   699 
   695 
   700     ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser',
   696     ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser',
   701      '''SELECT _S.cw_eid
   697      '''SELECT _S.cw_eid
   702 FROM cw_State AS _S
   698 FROM cw_State AS _S
   703 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename)'''),
   699 WHERE NOT (EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename))'''),
   704 
   700 
   705 # XXXFIXME fail
   701 # XXXFIXME fail
   706 #         ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute',
   702 #         ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute',
   707 #      '''SELECT _X.cw_eid, _X.cw_relation_type
   703 #      '''SELECT _X.cw_eid, _X.cw_relation_type
   708 # FROM cw_CWRelation AS _X'''),
   704 # FROM cw_CWRelation AS _X'''),
   832 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)'''),
   828 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)'''),
   833 
   829 
   834     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
   830     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
   835      '''SELECT _O.cw_eid, rel_todo_by0.eid_to
   831      '''SELECT _O.cw_eid, rel_todo_by0.eid_to
   836 FROM cw_Affaire AS _O LEFT OUTER JOIN todo_by_relation AS rel_todo_by0 ON (rel_todo_by0.eid_from=_O.cw_eid), cw_Note AS _S
   832 FROM cw_Affaire AS _O LEFT OUTER JOIN todo_by_relation AS rel_todo_by0 ON (rel_todo_by0.eid_from=_O.cw_eid), cw_Note AS _S
   837 WHERE NOT EXISTS(SELECT 1 WHERE _S.cw_inline1=_O.cw_eid) AND _S.cw_eid=123''')
   833 WHERE NOT (_S.cw_inline1=_O.cw_eid) AND _S.cw_eid=123''')
   838     ]
   834     ]
   839 
   835 
   840 VIRTUAL_VARS = [
   836 VIRTUAL_VARS = [
   841 
   837 
   842     ('Any X WHERE X is CWUser, X creation_date > D1, Y creation_date D1, Y login "SWEB09"',
   838     ('Any X WHERE X is CWUser, X creation_date > D1, Y creation_date D1, Y login "SWEB09"',
   907     ("Any COUNT(P) WHERE P is Personne",
   903     ("Any COUNT(P) WHERE P is Personne",
   908      '''SELECT COUNT(_P.cw_eid)
   904      '''SELECT COUNT(_P.cw_eid)
   909 FROM cw_Personne AS _P'''),
   905 FROM cw_Personne AS _P'''),
   910     ]
   906     ]
   911 
   907 
   912 SYMETRIC = [
   908 SYMMETRIC = [
   913     ('Any P WHERE X eid 0, X connait P',
   909     ('Any P WHERE X eid 0, X connait P',
   914      '''SELECT DISTINCT _P.cw_eid
   910      '''SELECT DISTINCT _P.cw_eid
   915 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   911 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   916 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)'''
   912 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)'''
   917      ),
   913      ),
   929      ),
   925      ),
   930 
   926 
   931     ('Any P WHERE X eid 0, NOT X connait P',
   927     ('Any P WHERE X eid 0, NOT X connait P',
   932      '''SELECT _P.cw_eid
   928      '''SELECT _P.cw_eid
   933 FROM cw_Personne AS _P
   929 FROM cw_Personne AS _P
   934 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))'''),
   930 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)))'''),
   935 
   931 
   936     ('Any P WHERE NOT X connait P',
   932     ('Any P WHERE NOT X connait P',
   937     '''SELECT _P.cw_eid
   933     '''SELECT _P.cw_eid
   938 FROM cw_Personne AS _P
   934 FROM cw_Personne AS _P
   939 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))'''),
   935 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)))'''),
   940 
   936 
   941     ('Any X WHERE NOT X connait P',
   937     ('Any X WHERE NOT X connait P',
   942     '''SELECT _X.cw_eid
   938     '''SELECT _X.cw_eid
   943 FROM cw_Personne AS _X
   939 FROM cw_Personne AS _X
   944 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))'''),
   940 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)))'''),
   945 
   941 
   946     ('Any P WHERE X connait P, P nom "nom"',
   942     ('Any P WHERE X connait P, P nom "nom"',
   947      '''SELECT DISTINCT _P.cw_eid
   943      '''SELECT DISTINCT _P.cw_eid
   948 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   944 FROM connait_relation AS rel_connait0, cw_Personne AS _P
   949 WHERE (rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_from=_P.cw_eid) AND _P.cw_nom=nom'''),
   945 WHERE (rel_connait0.eid_to=_P.cw_eid OR rel_connait0.eid_from=_P.cw_eid) AND _P.cw_nom=nom'''),
   976 WHERE _N.cw_ecrit_par=_P.cw_eid AND _N.cw_eid=0'''),
   972 WHERE _N.cw_ecrit_par=_P.cw_eid AND _N.cw_eid=0'''),
   977 
   973 
   978     ('Any N WHERE NOT N ecrit_par P, P nom "toto"',
   974     ('Any N WHERE NOT N ecrit_par P, P nom "toto"',
   979      '''SELECT _N.cw_eid
   975      '''SELECT _N.cw_eid
   980 FROM cw_Note AS _N, cw_Personne AS _P
   976 FROM cw_Note AS _N, cw_Personne AS _P
   981 WHERE NOT EXISTS(SELECT 1 WHERE _N.cw_ecrit_par=_P.cw_eid) AND _P.cw_nom=toto'''),
   977 WHERE NOT (_N.cw_ecrit_par=_P.cw_eid) AND _P.cw_nom=toto'''),
       
   978 
       
   979     ('Any P WHERE NOT N ecrit_par P, P nom "toto"',
       
   980      '''SELECT _P.cw_eid
       
   981 FROM cw_Personne AS _P
       
   982 WHERE NOT (EXISTS(SELECT 1 FROM cw_Note AS _N WHERE _N.cw_ecrit_par=_P.cw_eid)) AND _P.cw_nom=toto'''),
   982 
   983 
   983     ('Any P WHERE N ecrit_par P, N eid 0',
   984     ('Any P WHERE N ecrit_par P, N eid 0',
   984     '''SELECT _N.cw_ecrit_par
   985     '''SELECT _N.cw_ecrit_par
   985 FROM cw_Note AS _N
   986 FROM cw_Note AS _N
   986 WHERE _N.cw_ecrit_par IS NOT NULL AND _N.cw_eid=0'''),
   987 WHERE _N.cw_ecrit_par IS NOT NULL AND _N.cw_eid=0'''),
   991 WHERE _N.cw_ecrit_par=_P.cw_eid AND _N.cw_eid=0'''),
   992 WHERE _N.cw_ecrit_par=_P.cw_eid AND _N.cw_eid=0'''),
   992 
   993 
   993     ('Any P WHERE NOT N ecrit_par P, P is Personne, N eid 512',
   994     ('Any P WHERE NOT N ecrit_par P, P is Personne, N eid 512',
   994      '''SELECT _P.cw_eid
   995      '''SELECT _P.cw_eid
   995 FROM cw_Note AS _N, cw_Personne AS _P
   996 FROM cw_Note AS _N, cw_Personne AS _P
   996 WHERE NOT EXISTS(SELECT 1 WHERE _N.cw_ecrit_par=_P.cw_eid) AND _N.cw_eid=512'''),
   997 WHERE NOT (_N.cw_ecrit_par=_P.cw_eid) AND _N.cw_eid=512'''),
   997 
   998 
   998     ('Any S,ES,T WHERE S state_of ET, ET name "CWUser", ES allowed_transition T, T destination_state S',
   999     ('Any S,ES,T WHERE S state_of ET, ET name "CWUser", ES allowed_transition T, T destination_state S',
   999      '''SELECT _T.cw_destination_state, rel_allowed_transition1.eid_from, _T.cw_eid
  1000      '''SELECT _T.cw_destination_state, rel_allowed_transition1.eid_from, _T.cw_eid
  1000 FROM allowed_transition_relation AS rel_allowed_transition1, cw_Transition AS _T, cw_Workflow AS _ET, state_of_relation AS rel_state_of0
  1001 FROM allowed_transition_relation AS rel_allowed_transition1, cw_Transition AS _T, cw_Workflow AS _ET, state_of_relation AS rel_state_of0
  1001 WHERE _T.cw_destination_state=rel_state_of0.eid_from AND rel_state_of0.eid_to=_ET.cw_eid AND _ET.cw_name=CWUser AND rel_allowed_transition1.eid_to=_T.cw_eid'''),
  1002 WHERE _T.cw_destination_state=rel_state_of0.eid_from AND rel_state_of0.eid_to=_ET.cw_eid AND _ET.cw_name=CWUser AND rel_allowed_transition1.eid_to=_T.cw_eid'''),
  1013 FROM cw_Note AS _S
  1014 FROM cw_Note AS _S
  1014 WHERE _S.cw_eid=0 AND _S.cw_in_state IS NOT NULL'''),
  1015 WHERE _S.cw_eid=0 AND _S.cw_in_state IS NOT NULL'''),
  1015 
  1016 
  1016     ('Any X WHERE NOT Y for_user X, X eid 123',
  1017     ('Any X WHERE NOT Y for_user X, X eid 123',
  1017      '''SELECT 123
  1018      '''SELECT 123
  1018 WHERE NOT EXISTS(SELECT 1 FROM cw_CWProperty AS _Y WHERE _Y.cw_for_user=123)
  1019 WHERE NOT (EXISTS(SELECT 1 FROM cw_CWProperty AS _Y WHERE _Y.cw_for_user=123))
  1019 '''),
  1020 '''),
  1020 
  1021 
  1021     ]
  1022     ]
  1022 
  1023 
  1023 INTERSECT = [
  1024 INTERSECT = [
  1024     ('Any SN WHERE NOT X in_state S, S name SN',
  1025     ('Any SN WHERE NOT X in_state S, S name SN',
  1025      '''SELECT _S.cw_name
  1026      '''SELECT _S.cw_name
  1026 FROM cw_State AS _S
  1027 FROM cw_State AS _S
  1027 WHERE NOT EXISTS(SELECT 1 FROM cw_Affaire AS _X WHERE _X.cw_in_state=_S.cw_eid)
  1028 WHERE NOT (EXISTS(SELECT 1 FROM cw_Affaire AS _X WHERE _X.cw_in_state=_S.cw_eid UNION SELECT 1 FROM cw_Note AS _X WHERE _X.cw_in_state=_S.cw_eid UNION SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid))'''),
  1028 INTERSECT
       
  1029 SELECT _S.cw_name
       
  1030 FROM cw_State AS _S
       
  1031 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid)
       
  1032 INTERSECT
       
  1033 SELECT _S.cw_name
       
  1034 FROM cw_State AS _S
       
  1035 WHERE NOT EXISTS(SELECT 1 FROM cw_Note AS _X WHERE _X.cw_in_state=_S.cw_eid)'''),
       
  1036 
  1029 
  1037     ('Any PN WHERE NOT X travaille S, X nom PN, S is IN(Division, Societe)',
  1030     ('Any PN WHERE NOT X travaille S, X nom PN, S is IN(Division, Societe)',
  1038      '''SELECT _X.cw_nom
  1031      '''SELECT _X.cw_nom
  1039 FROM cw_Personne AS _X
  1032 FROM cw_Personne AS _X
  1040 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)
  1033 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 UNION SELECT 1 FROM travaille_relation AS rel_travaille1, cw_Societe AS _S WHERE rel_travaille1.eid_from=_X.cw_eid AND rel_travaille1.eid_to=_S.cw_eid))'''),
  1041 INTERSECT
       
  1042 SELECT _X.cw_nom
       
  1043 FROM cw_Personne AS _X
       
  1044 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)'''),
       
  1045 
  1034 
  1046     ('Any PN WHERE NOT X travaille S, S nom PN, S is IN(Division, Societe)',
  1035     ('Any PN WHERE NOT X travaille S, S nom PN, S is IN(Division, Societe)',
  1047      '''SELECT _S.cw_nom
  1036      '''SELECT _S.cw_nom
  1048 FROM cw_Division AS _S
  1037 FROM cw_Division AS _S
  1049 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid)
  1038 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid))
  1050 UNION ALL
  1039 UNION ALL
  1051 SELECT _S.cw_nom
  1040 SELECT _S.cw_nom
  1052 FROM cw_Societe AS _S
  1041 FROM cw_Societe AS _S
  1053 WHERE NOT EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid)'''),
  1042 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid))'''),
  1054 
  1043 
  1055     ('Personne X WHERE NOT X travaille S, S nom "chouette"',
  1044     ('Personne X WHERE NOT X travaille S, S nom "chouette"',
  1056      '''SELECT _X.cw_eid
  1045      '''SELECT _X.cw_eid
  1057 FROM cw_Division AS _S, cw_Personne AS _X
  1046 FROM cw_Division AS _S, cw_Personne AS _X
  1058 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
  1047 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
  1059 UNION ALL
  1048 UNION ALL
  1060 SELECT _X.cw_eid
  1049 SELECT _X.cw_eid
  1061 FROM cw_Personne AS _X, cw_Societe AS _S
  1050 FROM cw_Personne AS _X, cw_Societe AS _S
  1062 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
  1051 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
  1063 UNION ALL
  1052 UNION ALL
  1064 SELECT _X.cw_eid
  1053 SELECT _X.cw_eid
  1065 FROM cw_Personne AS _X, cw_SubDivision AS _S
  1054 FROM cw_Personne AS _X, cw_SubDivision AS _S
  1066 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'''),
  1055 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'''),
  1067 
  1056 
  1068     ('Any X WHERE X is ET, ET eid 2',
  1057     ('Any X WHERE X is ET, ET eid 2',
  1069      '''SELECT rel_is0.eid_from
  1058      '''SELECT rel_is0.eid_from
  1070 FROM is_relation AS rel_is0
  1059 FROM is_relation AS rel_is0
  1071 WHERE rel_is0.eid_to=2'''),
  1060 WHERE rel_is0.eid_to=2'''),
  1333                ' (Any X WHERE X is Transition))')
  1322                ' (Any X WHERE X is Transition))')
  1334         rqlst = self._prepare(rql)
  1323         rqlst = self._prepare(rql)
  1335         self.assertRaises(BadRQLQuery, self.o.generate, rqlst)
  1324         self.assertRaises(BadRQLQuery, self.o.generate, rqlst)
  1336 
  1325 
  1337     def test_symmetric(self):
  1326     def test_symmetric(self):
  1338         for t in self._parse(SYMETRIC):
  1327         for t in self._parse(SYMMETRIC):
  1339             yield t
  1328             yield t
  1340 
  1329 
  1341     def test_inline(self):
  1330     def test_inline(self):
  1342         for t in self._parse(INLINE):
  1331         for t in self._parse(INLINE):
  1343             yield t
  1332             yield t
  1381         queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')",
  1370         queries = [("Any 1 WHERE EXISTS(T is CWGroup, T name 'managers')",
  1382                     '''SELECT 1
  1371                     '''SELECT 1
  1383 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS _T WHERE _T.cw_name=managers)'''),
  1372 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS _T WHERE _T.cw_name=managers)'''),
  1384                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1373                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1385                     '''SELECT 5, 6
  1374                     '''SELECT 5, 6
  1386 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)'''),
  1375 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))'''),
  1387                    ]
  1376                    ]
  1388         for t in self._parse(queries):
  1377         for t in self._parse(queries):
  1389             yield t
  1378             yield t
  1390 
  1379 
  1391     def test_ambigous_exists_no_from_clause(self):
  1380     def test_ambigous_exists_no_from_clause(self):
  1427         RQLGeneratorTC.setUp(self)
  1416         RQLGeneratorTC.setUp(self)
  1428         dbhelper = get_db_helper('sqlite')
  1417         dbhelper = get_db_helper('sqlite')
  1429         self.o = SQLGenerator(schema, dbhelper)
  1418         self.o = SQLGenerator(schema, dbhelper)
  1430 
  1419 
  1431     def _norm_sql(self, sql):
  1420     def _norm_sql(self, sql):
  1432         return sql.strip().replace(' ILIKE ', ' LIKE ').replace('\nINTERSECT ALL\n', '\nINTERSECT\n')
  1421         return sql.strip().replace(' ILIKE ', ' LIKE ')
  1433 
  1422 
  1434     def test_date_extraction(self):
  1423     def test_date_extraction(self):
  1435         self._check("Any MONTH(D) WHERE P is Personne, P creation_date D",
  1424         self._check("Any MONTH(D) WHERE P is Personne, P creation_date D",
  1436                     '''SELECT MONTH(_P.cw_creation_date)
  1425                     '''SELECT MONTH(_P.cw_creation_date)
  1437 FROM cw_Personne AS _P''')
  1426 FROM cw_Personne AS _P''')
  1559 FROM (SELECT 1) AS _T
  1548 FROM (SELECT 1) AS _T
  1560 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS _T WHERE _T.cw_name=managers)'''),
  1549 WHERE EXISTS(SELECT 1 FROM cw_CWGroup AS _T WHERE _T.cw_name=managers)'''),
  1561                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1550                    ('Any X,Y WHERE NOT X created_by Y, X eid 5, Y eid 6',
  1562                     '''SELECT 5, 6
  1551                     '''SELECT 5, 6
  1563 FROM (SELECT 1) AS _T
  1552 FROM (SELECT 1) AS _T
  1564 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)'''),
  1553 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))'''),
  1565                    ]
  1554                    ]
  1566         for t in self._parse(queries):
  1555         for t in self._parse(queries):
  1567             yield t
  1556             yield t
  1568 
  1557 
  1569 
  1558