server/test/unittest_rql2sql.py
branchstable
changeset 7193 7eaef037ea9d
parent 7142 c47381851a3e
child 7194 79686c864bbf
equal deleted inserted replaced
7192:9e92c8558fea 7193:7eaef037ea9d
   188 
   188 
   189     ("Any X WHERE X prenom 'lulu',"
   189     ("Any X WHERE X prenom 'lulu',"
   190      "EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   190      "EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   191      '''SELECT _X.cw_eid
   191      '''SELECT _X.cw_eid
   192 FROM cw_Personne AS _X
   192 FROM cw_Personne AS _X
   193 WHERE _X.cw_prenom=lulu AND EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, in_group_relation AS rel_in_group1, cw_CWGroup AS _G WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_in_group1.eid_from=rel_owned_by0.eid_to AND rel_in_group1.eid_to=_G.cw_eid AND ((_G.cw_name=lulufanclub) OR (_G.cw_name=managers)))'''),
   193 WHERE _X.cw_prenom=lulu AND EXISTS(SELECT 1 FROM cw_CWGroup AS _G, in_group_relation AS rel_in_group1, owned_by_relation AS rel_owned_by0 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)))'''),
   194 
   194 
   195     ("Any X WHERE X prenom 'lulu',"
   195     ("Any X WHERE X prenom 'lulu',"
   196      "NOT EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   196      "NOT EXISTS(X owned_by U, U in_group G, G name 'lulufanclub' OR G name 'managers');",
   197      '''SELECT _X.cw_eid
   197      '''SELECT _X.cw_eid
   198 FROM cw_Personne AS _X
   198 FROM cw_Personne AS _X
   199 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))))'''),
   199 WHERE _X.cw_prenom=lulu AND NOT (EXISTS(SELECT 1 FROM cw_CWGroup AS _G, in_group_relation AS rel_in_group1, owned_by_relation AS rel_owned_by0 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))))'''),
   200 
   200 
   201     ('Any X WHERE  X title V, NOT X wikiid V, NOT X title "parent", X is Card',
   201     ('Any X WHERE  X title V, NOT X wikiid V, NOT X title "parent", X is Card',
   202      '''SELECT _X.cw_eid
   202      '''SELECT _X.cw_eid
   203 FROM cw_Card AS _X
   203 FROM cw_Card AS _X
   204 WHERE NOT (_X.cw_wikiid=_X.cw_title) AND NOT (_X.cw_title=parent)''')
   204 WHERE NOT (_X.cw_wikiid=_X.cw_title) AND NOT (_X.cw_title=parent)''')
   450 
   450 
   451     # ambiguity in EXISTS() -> should union the sub-query
   451     # ambiguity in EXISTS() -> should union the sub-query
   452     ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))',
   452     ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))',
   453      '''SELECT _T.cw_eid
   453      '''SELECT _T.cw_eid
   454 FROM cw_Tag AS _T
   454 FROM cw_Tag AS _T
   455 WHERE NOT (_T.cw_name IN(t1, t2)) AND EXISTS(SELECT 1 FROM tags_relation AS rel_tags0, cw_CWGroup AS _X WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid UNION SELECT 1 FROM tags_relation AS rel_tags1, cw_CWUser AS _X WHERE rel_tags1.eid_from=_T.cw_eid AND rel_tags1.eid_to=_X.cw_eid)'''),
   455 WHERE NOT (_T.cw_name IN(t1, t2)) AND EXISTS(SELECT 1 FROM cw_CWGroup AS _X, tags_relation AS rel_tags0 WHERE rel_tags0.eid_from=_T.cw_eid AND rel_tags0.eid_to=_X.cw_eid UNION SELECT 1 FROM cw_CWUser AS _X, tags_relation AS rel_tags1 WHERE rel_tags1.eid_from=_T.cw_eid AND rel_tags1.eid_to=_X.cw_eid)'''),
   456 
   456 
   457     # must not use a relation in EXISTS scope to inline a variable
   457     # must not use a relation in EXISTS scope to inline a variable
   458     ('Any U WHERE U eid IN (1,2), EXISTS(X owned_by U)',
   458     ('Any U WHERE U eid IN (1,2), EXISTS(X owned_by U)',
   459      '''SELECT _U.cw_eid
   459      '''SELECT _U.cw_eid
   460 FROM cw_CWUser AS _U
   460 FROM cw_CWUser AS _U
   466 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)'''),
   466 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)'''),
   467 
   467 
   468     ('Any COUNT(U) WHERE EXISTS (P owned_by U, P is IN (Note, Affaire))',
   468     ('Any COUNT(U) WHERE EXISTS (P owned_by U, P is IN (Note, Affaire))',
   469      '''SELECT COUNT(_U.cw_eid)
   469      '''SELECT COUNT(_U.cw_eid)
   470 FROM cw_CWUser AS _U
   470 FROM cw_CWUser AS _U
   471 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)'''),
   471 WHERE EXISTS(SELECT 1 FROM cw_Affaire AS _P, owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=_U.cw_eid UNION SELECT 1 FROM cw_Note AS _P, owned_by_relation AS rel_owned_by1 WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=_U.cw_eid)'''),
   472 
   472 
   473     ('Any MAX(X)',
   473     ('Any MAX(X)',
   474      '''SELECT MAX(_X.eid)
   474      '''SELECT MAX(_X.eid)
   475 FROM entities AS _X'''),
   475 FROM entities AS _X'''),
   476 
   476 
   565 
   565 
   566 ADVANCED_WITH_LIMIT_OR_ORDERBY = [
   566 ADVANCED_WITH_LIMIT_OR_ORDERBY = [
   567     ('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"))',
   567     ('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"))',
   568      '''SELECT COUNT(rel_concerne0.eid_from), _C.cw_nom
   568      '''SELECT COUNT(rel_concerne0.eid_from), _C.cw_nom
   569 FROM concerne_relation AS rel_concerne0, cw_Societe AS _C
   569 FROM concerne_relation AS rel_concerne0, cw_Societe AS _C
   570 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)))
   570 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 cw_Card AS _N, documented_by_relation AS rel_documented_by2 WHERE rel_concerne0.eid_from=rel_documented_by2.eid_from AND rel_documented_by2.eid_to=_N.cw_eid AND _N.cw_title=published)))
   571 GROUP BY _C.cw_nom
   571 GROUP BY _C.cw_nom
   572 ORDER BY 1 DESC
   572 ORDER BY 1 DESC
   573 LIMIT 10'''),
   573 LIMIT 10'''),
   574     ('DISTINCT Any S ORDERBY stockproc(SI) WHERE NOT S ecrit_par O, S para SI',
   574     ('DISTINCT Any S ORDERBY stockproc(SI) WHERE NOT S ecrit_par O, S para SI',
   575      '''SELECT T1.C0 FROM (SELECT DISTINCT _S.cw_eid AS C0, STOCKPROC(_S.cw_para) AS C1
   575      '''SELECT T1.C0 FROM (SELECT DISTINCT _S.cw_eid AS C0, STOCKPROC(_S.cw_para) AS C1
   721 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))'''),
   721 WHERE NOT (EXISTS(SELECT 1 FROM evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid))'''),
   722 
   722 
   723     ('Any X WHERE NOT Y evaluee X, Y is CWUser',
   723     ('Any X WHERE NOT Y evaluee X, Y is CWUser',
   724      '''SELECT _X.cw_eid
   724      '''SELECT _X.cw_eid
   725 FROM cw_Note AS _X
   725 FROM cw_Note AS _X
   726 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))'''),
   726 WHERE NOT (EXISTS(SELECT 1 FROM cw_CWUser AS _Y, evaluee_relation AS rel_evaluee0 WHERE rel_evaluee0.eid_from=_Y.cw_eid AND rel_evaluee0.eid_to=_X.cw_eid))'''),
   727 
   727 
   728     ('Any X,RT WHERE X relation_type RT, NOT X is CWAttribute',
   728     ('Any X,RT WHERE X relation_type RT, NOT X is CWAttribute',
   729      '''SELECT _X.cw_eid, _X.cw_relation_type
   729      '''SELECT _X.cw_eid, _X.cw_relation_type
   730 FROM cw_CWRelation AS _X
   730 FROM cw_CWRelation AS _X
   731 WHERE _X.cw_relation_type IS NOT NULL'''),
   731 WHERE _X.cw_relation_type IS NOT NULL'''),
   814 ORDER BY 4 DESC'''),
   814 ORDER BY 4 DESC'''),
   815 
   815 
   816     ('Any X WHERE X is Affaire, S is Societe, EXISTS(X owned_by U OR (X concerne S?, S owned_by U))',
   816     ('Any X WHERE X is Affaire, S is Societe, EXISTS(X owned_by U OR (X concerne S?, S owned_by U))',
   817      '''SELECT _X.cw_eid
   817      '''SELECT _X.cw_eid
   818 FROM cw_Affaire AS _X
   818 FROM cw_Affaire AS _X
   819 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_CWUser AS _U, cw_Affaire AS _A LEFT OUTER JOIN concerne_relation AS rel_concerne1 ON (rel_concerne1.eid_from=_A.cw_eid) LEFT OUTER JOIN cw_Societe AS _S ON (rel_concerne1.eid_to=_S.cw_eid), owned_by_relation AS rel_owned_by2 WHERE ((rel_owned_by0.eid_from=_A.cw_eid AND rel_owned_by0.eid_to=_U.cw_eid) OR (rel_owned_by2.eid_from=_S.cw_eid AND rel_owned_by2.eid_to=_U.cw_eid)) AND _X.cw_eid=_A.cw_eid)'''),
   819 WHERE EXISTS(SELECT 1 FROM cw_CWUser AS _U, owned_by_relation AS rel_owned_by0, owned_by_relation AS rel_owned_by2, 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) 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)'''),
   820 
   820 
   821     ('Any C,M WHERE C travaille G?, G evaluee M?, G is Societe',
   821     ('Any C,M WHERE C travaille G?, G evaluee M?, G is Societe',
   822      '''SELECT _C.cw_eid, rel_evaluee1.eid_to
   822      '''SELECT _C.cw_eid, rel_evaluee1.eid_to
   823 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)'''
   823 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)'''
   824      ),
   824      ),
   825 
   825 
   826     ('Any A,C WHERE A documented_by C?, (C is NULL) OR (EXISTS(C require_permission F, '
   826     ('Any A,C WHERE A documented_by C?, (C is NULL) OR (EXISTS(C require_permission F, '
   827      'F name "read", F require_group E, U in_group E)), U eid 1',
   827      'F name "read", F require_group E, U in_group E)), U eid 1',
   828      '''SELECT _A.cw_eid, rel_documented_by0.eid_to
   828      '''SELECT _A.cw_eid, rel_documented_by0.eid_to
   829 FROM cw_Affaire AS _A LEFT OUTER JOIN documented_by_relation AS rel_documented_by0 ON (rel_documented_by0.eid_from=_A.cw_eid)
   829 FROM cw_Affaire AS _A LEFT OUTER JOIN documented_by_relation AS rel_documented_by0 ON (rel_documented_by0.eid_from=_A.cw_eid)
   830 WHERE ((rel_documented_by0.eid_to IS NULL) OR (EXISTS(SELECT 1 FROM require_permission_relation AS rel_require_permission1, cw_CWPermission AS _F, require_group_relation AS rel_require_group2, in_group_relation AS rel_in_group3 WHERE rel_documented_by0.eid_to=rel_require_permission1.eid_from AND rel_require_permission1.eid_to=_F.cw_eid AND _F.cw_name=read AND rel_require_group2.eid_from=_F.cw_eid AND rel_in_group3.eid_to=rel_require_group2.eid_to AND rel_in_group3.eid_from=1)))'''),
   830 WHERE ((rel_documented_by0.eid_to IS NULL) OR (EXISTS(SELECT 1 FROM cw_CWPermission AS _F, in_group_relation AS rel_in_group3, require_group_relation AS rel_require_group2, require_permission_relation AS rel_require_permission1 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)))'''),
   831 
   831 
   832     ("Any X WHERE X eid 12, P? connait X",
   832     ("Any X WHERE X eid 12, P? connait X",
   833      '''SELECT _X.cw_eid
   833      '''SELECT _X.cw_eid
   834 FROM cw_Personne AS _X LEFT OUTER JOIN connait_relation AS rel_connait0 ON (rel_connait0.eid_to=12)
   834 FROM cw_Personne AS _X LEFT OUTER JOIN connait_relation AS rel_connait0 ON (rel_connait0.eid_to=_X.cw_eid)
   835 WHERE _X.cw_eid=12'''
   835 WHERE _X.cw_eid=12'''
       
   836     ),
       
   837     ("Any P WHERE X eid 12, P? concerne X, X todo_by S",
       
   838      '''SELECT rel_concerne0.eid_from
       
   839 FROM todo_by_relation AS rel_todo_by1 LEFT OUTER JOIN concerne_relation AS rel_concerne0 ON (rel_concerne0.eid_to=12)
       
   840 WHERE rel_todo_by1.eid_from=12'''
   836     ),
   841     ),
   837 
   842 
   838     ('Any GN, TN ORDERBY GN WHERE T tags G?, T name TN, G name GN',
   843     ('Any GN, TN ORDERBY GN WHERE T tags G?, T name TN, G name GN',
   839     '''
   844     '''
   840 SELECT _T0.C1, _T.cw_name
   845 SELECT _T0.C1, _T.cw_name
   897 UNION ALL
   902 UNION ALL
   898 SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   903 SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   899 FROM cw_CWUser AS _G LEFT OUTER JOIN cw_State AS _S ON (_G.cw_in_state=_S.cw_eid AND _S.cw_name=hop)
   904 FROM cw_CWUser AS _G LEFT OUTER JOIN cw_State AS _S ON (_G.cw_in_state=_S.cw_eid AND _S.cw_name=hop)
   900 UNION ALL
   905 UNION ALL
   901 SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   906 SELECT _G.cw_eid AS C0, _S.cw_eid AS C1
   902 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)'''),
   907 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)'''),
   903 
   908 
   904     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
   909     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
   905      '''SELECT _O.cw_eid, rel_todo_by0.eid_to
   910      '''SELECT _O.cw_eid, rel_todo_by0.eid_to
   906 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
   911 FROM cw_Note AS _S, cw_Affaire AS _O LEFT OUTER JOIN todo_by_relation AS rel_todo_by0 ON (rel_todo_by0.eid_from=_O.cw_eid)
   907 WHERE (_S.cw_inline1 IS NULL OR _S.cw_inline1!=_O.cw_eid) AND _S.cw_eid=123''')
   912 WHERE (_S.cw_inline1 IS NULL OR _S.cw_inline1!=_O.cw_eid) AND _S.cw_eid=123''')
   908     ]
   913     ]
   909 
   914 
   910 VIRTUAL_VARS = [
   915 VIRTUAL_VARS = [
   911 
   916 
  1119 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))'''),
  1124 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))'''),
  1120 
  1125 
  1121     ('Any PN WHERE NOT X travaille S, X nom PN, S is IN(Division, Societe)',
  1126     ('Any PN WHERE NOT X travaille S, X nom PN, S is IN(Division, Societe)',
  1122      '''SELECT _X.cw_nom
  1127      '''SELECT _X.cw_nom
  1123 FROM cw_Personne AS _X
  1128 FROM cw_Personne AS _X
  1124 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))'''),
  1129 WHERE NOT (EXISTS(SELECT 1 FROM cw_Division AS _S, travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid AND rel_travaille0.eid_to=_S.cw_eid UNION SELECT 1 FROM cw_Societe AS _S, travaille_relation AS rel_travaille1 WHERE rel_travaille1.eid_from=_X.cw_eid AND rel_travaille1.eid_to=_S.cw_eid))'''),
  1125 
  1130 
  1126     ('Any PN WHERE NOT X travaille S, S nom PN, S is IN(Division, Societe)',
  1131     ('Any PN WHERE NOT X travaille S, S nom PN, S is IN(Division, Societe)',
  1127      '''SELECT _S.cw_nom
  1132      '''SELECT _S.cw_nom
  1128 FROM cw_Division AS _S
  1133 FROM cw_Division AS _S
  1129 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid))
  1134 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_to=_S.cw_eid))
  1210                 except KeyError:
  1215                 except KeyError:
  1211                     print 'strange, missing substitution'
  1216                     print 'strange, missing substitution'
  1212                     print r, nargs
  1217                     print r, nargs
  1213                 print '!='
  1218                 print '!='
  1214                 print sql.strip()
  1219                 print sql.strip()
       
  1220             print 'RQL:', rql
  1215             raise
  1221             raise
  1216 
  1222 
  1217     def _parse(self, rqls):
  1223     def _parse(self, rqls):
  1218         for rql, sql in rqls:
  1224         for rql, sql in rqls:
  1219             yield self._check, rql, sql
  1225             yield self._check, rql, sql
  1400 FROM ((SELECT _X.cw_eid AS C0
  1406 FROM ((SELECT _X.cw_eid AS C0
  1401 FROM cw_Societe AS _X)
  1407 FROM cw_Societe AS _X)
  1402 UNION ALL
  1408 UNION ALL
  1403 (SELECT _X.cw_eid AS C0
  1409 (SELECT _X.cw_eid AS C0
  1404 FROM cw_Affaire AS _X
  1410 FROM cw_Affaire AS _X
  1405 WHERE ((EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_from=_X.cw_eid AND rel_owned_by0.eid_to=1)) OR (((EXISTS(SELECT 1 FROM cw_Affaire AS _D LEFT OUTER JOIN concerne_relation AS rel_concerne1 ON (rel_concerne1.eid_from=_D.cw_eid) LEFT OUTER JOIN cw_Note AS _B ON (rel_concerne1.eid_to=_B.cw_eid), owned_by_relation AS rel_owned_by2 WHERE rel_owned_by2.eid_from=_B.cw_eid AND rel_owned_by2.eid_to=1 AND _X.cw_eid=_D.cw_eid)) OR (EXISTS(SELECT 1 FROM cw_Affaire AS _F LEFT OUTER JOIN concerne_relation AS rel_concerne3 ON (rel_concerne3.eid_from=_F.cw_eid) LEFT OUTER JOIN cw_Societe AS _E ON (rel_concerne3.eid_to=_E.cw_eid), owned_by_relation AS rel_owned_by4 WHERE rel_owned_by4.eid_from=_E.cw_eid AND rel_owned_by4.eid_to=1 AND _X.cw_eid=_F.cw_eid))))))) AS _T0, cw_CWEType AS _ET, is_relation AS rel_is0
  1411 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 owned_by_relation AS rel_owned_by2, 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) 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 owned_by_relation AS rel_owned_by4, 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) WHERE rel_owned_by4.eid_from=_E.cw_eid AND rel_owned_by4.eid_to=1 AND _X.cw_eid=_F.cw_eid))))))) AS _T0, cw_CWEType AS _ET, is_relation AS rel_is0
  1406 WHERE rel_is0.eid_from=_T0.C0 AND rel_is0.eid_to=_ET.cw_eid
  1412 WHERE rel_is0.eid_from=_T0.C0 AND rel_is0.eid_to=_ET.cw_eid
  1407 GROUP BY _ET.cw_name'''),
  1413 GROUP BY _ET.cw_name'''),
  1408             )):
  1414             )):
  1409             yield t
  1415             yield t
  1410 
  1416 
  1519             yield t
  1525             yield t
  1520 
  1526 
  1521     def test_ambigous_exists_no_from_clause(self):
  1527     def test_ambigous_exists_no_from_clause(self):
  1522         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1528         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1523                     '''SELECT COUNT(1)
  1529                     '''SELECT COUNT(1)
  1524 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)''')
  1530 WHERE EXISTS(SELECT 1 FROM cw_Affaire AS _P, owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM cw_Note AS _P, owned_by_relation AS rel_owned_by1 WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=1)''')
  1525 
  1531 
  1526     def test_attr_map_sqlcb(self):
  1532     def test_attr_map_sqlcb(self):
  1527         def generate_ref(gen, linkedvar, rel):
  1533         def generate_ref(gen, linkedvar, rel):
  1528             linkedvar.accept(gen)
  1534             linkedvar.accept(gen)
  1529             return 'VERSION_DATA(%s)' % linkedvar._q_sql
  1535             return 'VERSION_DATA(%s)' % linkedvar._q_sql
  1568         # X without in_group relation, or some G without it.
  1574         # X without in_group relation, or some G without it.
  1569         self._check('Any 1 WHERE NOT X in_group G, X is CWUser',
  1575         self._check('Any 1 WHERE NOT X in_group G, X is CWUser',
  1570                     '''SELECT 1
  1576                     '''SELECT 1
  1571 WHERE NOT (EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group0))''')
  1577 WHERE NOT (EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group0))''')
  1572 
  1578 
       
  1579     def test_nonregr_subquery_missing_join(self):
       
  1580         self._check('Any COUNT(P1148),G GROUPBY G '
       
  1581                     'WHERE G owned_by D, D eid 1122, K1148 bookmarked_by P1148, '
       
  1582                     'K1148 eid 1148, P1148? in_group G',
       
  1583                     '''SELECT COUNT(rel_bookmarked_by1.eid_to), _G.cw_eid
       
  1584 FROM owned_by_relation AS rel_owned_by0, cw_CWGroup AS _G LEFT OUTER JOIN in_group_relation AS rel_in_group2 ON (rel_in_group2.eid_to=_G.cw_eid) LEFT OUTER JOIN bookmarked_by_relation AS rel_bookmarked_by1 ON (rel_in_group2.eid_from=rel_bookmarked_by1.eid_to)
       
  1585 WHERE rel_owned_by0.eid_from=_G.cw_eid AND rel_owned_by0.eid_to=1122 AND rel_bookmarked_by1.eid_from=1148
       
  1586 GROUP BY _G.cw_eid'''
       
  1587                     )
       
  1588 
       
  1589     def test_nonregr_subquery_missing_join2(self):
       
  1590         self._check('Any COUNT(P1148),G GROUPBY G '
       
  1591                     'WHERE G owned_by D, D eid 1122, K1148 bookmarked_by P1148?, '
       
  1592                     'K1148 eid 1148, P1148? in_group G',
       
  1593                     '''SELECT COUNT(rel_bookmarked_by1.eid_to), _G.cw_eid
       
  1594 FROM owned_by_relation AS rel_owned_by0, cw_CWGroup AS _G LEFT OUTER JOIN in_group_relation AS rel_in_group2 ON (rel_in_group2.eid_to=_G.cw_eid) LEFT OUTER JOIN bookmarked_by_relation AS rel_bookmarked_by1 ON (rel_bookmarked_by1.eid_from=1148 AND rel_in_group2.eid_from=rel_bookmarked_by1.eid_to)
       
  1595 WHERE rel_owned_by0.eid_from=_G.cw_eid AND rel_owned_by0.eid_to=1122
       
  1596 GROUP BY _G.cw_eid''')
       
  1597 
       
  1598 
  1573 class SqlServer2005SQLGeneratorTC(PostgresSQLGeneratorTC):
  1599 class SqlServer2005SQLGeneratorTC(PostgresSQLGeneratorTC):
  1574     backend = 'sqlserver2005'
  1600     backend = 'sqlserver2005'
  1575     def _norm_sql(self, sql):
  1601     def _norm_sql(self, sql):
  1576         return sql.strip().replace(' SUBSTR', ' SUBSTRING').replace(' || ', ' + ').replace(' ILIKE ', ' LIKE ')
  1602         return sql.strip().replace(' SUBSTR', ' SUBSTRING').replace(' || ', ' + ').replace(' ILIKE ', ' LIKE ')
  1577 
  1603 
  1623 SELECT
  1649 SELECT
  1624 _L01, _L02
  1650 _L01, _L02
  1625 , ROW_NUMBER() OVER (ORDER BY _L01 DESC) AS __RowNumber
  1651 , ROW_NUMBER() OVER (ORDER BY _L01 DESC) AS __RowNumber
  1626 FROM (
  1652 FROM (
  1627 SELECT COUNT(rel_concerne0.eid_from) AS _L01, _C.cw_nom AS _L02 FROM  concerne_relation AS rel_concerne0, cw_Societe AS _C
  1653 SELECT COUNT(rel_concerne0.eid_from) AS _L01, _C.cw_nom AS _L02 FROM  concerne_relation AS rel_concerne0, cw_Societe AS _C
  1628 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)))
  1654 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 cw_Card AS _N, documented_by_relation AS rel_documented_by2 WHERE rel_concerne0.eid_from=rel_documented_by2.eid_from AND rel_documented_by2.eid_to=_N.cw_eid AND _N.cw_title=published)))
  1629 GROUP BY _C.cw_nom
  1655 GROUP BY _C.cw_nom
  1630 ) AS _SQ1 )
  1656 ) AS _SQ1 )
  1631 SELECT
  1657 SELECT
  1632 _L01, _L02
  1658 _L01, _L02
  1633 FROM orderedrows WHERE
  1659 FROM orderedrows WHERE
  1872 
  1898 
  1873     def test_ambigous_exists_no_from_clause(self):
  1899     def test_ambigous_exists_no_from_clause(self):
  1874         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1900         self._check('Any COUNT(U) WHERE U eid 1, EXISTS (P owned_by U, P is IN (Note, Affaire))',
  1875                     '''SELECT COUNT(1)
  1901                     '''SELECT COUNT(1)
  1876 FROM (SELECT 1) AS _T
  1902 FROM (SELECT 1) AS _T
  1877 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)''')
  1903 WHERE EXISTS(SELECT 1 FROM cw_Affaire AS _P, owned_by_relation AS rel_owned_by0 WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM cw_Note AS _P, owned_by_relation AS rel_owned_by1 WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=1)''')
  1878 
  1904 
  1879     def test_groupby_multiple_outerjoins(self):
  1905     def test_groupby_multiple_outerjoins(self):
  1880         self._check('Any A,U,P,group_concat(TN) GROUPBY A,U,P WHERE A is Affaire, A concerne N, N todo_by U?, T? tags A, T name TN, A todo_by P?',
  1906         self._check('Any A,U,P,group_concat(TN) GROUPBY A,U,P WHERE A is Affaire, A concerne N, N todo_by U?, T? tags A, T name TN, A todo_by P?',
  1881                      '''SELECT _A.cw_eid, rel_todo_by1.eid_to, rel_todo_by3.eid_to, GROUP_CONCAT(_T.cw_name)
  1907                      '''SELECT _A.cw_eid, rel_todo_by1.eid_to, rel_todo_by3.eid_to, GROUP_CONCAT(_T.cw_name)
  1882 FROM concerne_relation AS rel_concerne0, cw_Affaire AS _A LEFT OUTER JOIN tags_relation AS rel_tags2 ON (rel_tags2.eid_to=_A.cw_eid) LEFT OUTER JOIN cw_Tag AS _T ON (rel_tags2.eid_from=_T.cw_eid) LEFT OUTER JOIN todo_by_relation AS rel_todo_by3 ON (rel_todo_by3.eid_from=_A.cw_eid), cw_Note AS _N LEFT OUTER JOIN todo_by_relation AS rel_todo_by1 ON (rel_todo_by1.eid_from=_N.cw_eid)
  1908 FROM concerne_relation AS rel_concerne0, cw_Affaire AS _A LEFT OUTER JOIN tags_relation AS rel_tags2 ON (rel_tags2.eid_to=_A.cw_eid) LEFT OUTER JOIN cw_Tag AS _T ON (rel_tags2.eid_from=_T.cw_eid) LEFT OUTER JOIN todo_by_relation AS rel_todo_by3 ON (rel_todo_by3.eid_from=_A.cw_eid), cw_Note AS _N LEFT OUTER JOIN todo_by_relation AS rel_todo_by1 ON (rel_todo_by1.eid_from=_N.cw_eid)