server/test/unittest_rql2sql.py
changeset 2968 0e3460341023
parent 2920 64322aa83a1d
child 3238 988a72e59b2b
equal deleted inserted replaced
2902:dd9f2dd02f85 2968:0e3460341023
   337 FROM cw_CWUser AS X LEFT OUTER JOIN cw_CWUser AS Y ON (X.cw_eid=Y.cw_eid)
   337 FROM cw_CWUser AS X LEFT OUTER JOIN cw_CWUser AS Y ON (X.cw_eid=Y.cw_eid)
   338 WHERE X.cw_login=admin'''),
   338 WHERE X.cw_login=admin'''),
   339 
   339 
   340     ('Any XN ORDERBY XN WHERE X name XN',
   340     ('Any XN ORDERBY XN WHERE X name XN',
   341      '''SELECT X.cw_name
   341      '''SELECT X.cw_name
       
   342 FROM cw_BaseTransition AS X
       
   343 UNION ALL
       
   344 SELECT X.cw_name
   342 FROM cw_Basket AS X
   345 FROM cw_Basket AS X
   343 UNION ALL
   346 UNION ALL
   344 SELECT X.cw_name
   347 SELECT X.cw_name
   345 FROM cw_CWCache AS X
   348 FROM cw_CWCache AS X
   346 UNION ALL
   349 UNION ALL
   374 SELECT X.cw_name
   377 SELECT X.cw_name
   375 FROM cw_Tag AS X
   378 FROM cw_Tag AS X
   376 UNION ALL
   379 UNION ALL
   377 SELECT X.cw_name
   380 SELECT X.cw_name
   378 FROM cw_Transition AS X
   381 FROM cw_Transition AS X
       
   382 UNION ALL
       
   383 SELECT X.cw_name
       
   384 FROM cw_Workflow AS X
       
   385 UNION ALL
       
   386 SELECT X.cw_name
       
   387 FROM cw_WorkflowTransition AS X
   379 ORDER BY 1'''),
   388 ORDER BY 1'''),
   380 
   389 
   381 #    ('Any XN WHERE X name XN GROUPBY XN',
   390     # DISTINCT, can use relation under exists scope as principal
   382 #     ''''''),
       
   383 #    ('Any XN, COUNT(X) WHERE X name XN GROUPBY XN',
       
   384 #     ''''''),
       
   385 
       
   386     # DISTINCT, can use relatin under exists scope as principal
       
   387     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), EXISTS(X read_permission Y)',
   391     ('DISTINCT Any X,Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), EXISTS(X read_permission Y)',
   388      '''SELECT DISTINCT X.cw_eid, rel_read_permission0.eid_to
   392      '''SELECT DISTINCT X.cw_eid, rel_read_permission0.eid_to
   389 FROM cw_CWEType AS X, read_permission_relation AS rel_read_permission0
   393 FROM cw_CWEType AS X, read_permission_relation AS rel_read_permission0
   390 WHERE X.cw_name=CWGroup AND rel_read_permission0.eid_to IN(1, 2, 3) AND EXISTS(SELECT 1 WHERE rel_read_permission0.eid_from=X.cw_eid)
   394 WHERE X.cw_name=CWGroup AND rel_read_permission0.eid_to IN(1, 2, 3) AND EXISTS(SELECT 1 WHERE rel_read_permission0.eid_from=X.cw_eid)
   391 UNION
   395 UNION
   465 FROM cw_CWRType AS X, cw_RQLExpression AS Y
   469 FROM cw_CWRType AS X, cw_RQLExpression AS Y
   466 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)'''),
   470 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)'''),
   467 
   471 
   468     ('Any MAX(X)+MIN(X), N GROUPBY N WHERE X name N;',
   472     ('Any MAX(X)+MIN(X), N GROUPBY N WHERE X name N;',
   469      '''SELECT (MAX(T1.C0) + MIN(T1.C0)), T1.C1 FROM (SELECT X.cw_eid AS C0, X.cw_name AS C1
   473      '''SELECT (MAX(T1.C0) + MIN(T1.C0)), T1.C1 FROM (SELECT X.cw_eid AS C0, X.cw_name AS C1
       
   474 FROM cw_BaseTransition AS X
       
   475 UNION ALL
       
   476 SELECT X.cw_eid AS C0, X.cw_name AS C1
   470 FROM cw_Basket AS X
   477 FROM cw_Basket AS X
   471 UNION ALL
   478 UNION ALL
   472 SELECT X.cw_eid AS C0, X.cw_name AS C1
   479 SELECT X.cw_eid AS C0, X.cw_name AS C1
   473 FROM cw_CWCache AS X
   480 FROM cw_CWCache AS X
   474 UNION ALL
   481 UNION ALL
   501 UNION ALL
   508 UNION ALL
   502 SELECT X.cw_eid AS C0, X.cw_name AS C1
   509 SELECT X.cw_eid AS C0, X.cw_name AS C1
   503 FROM cw_Tag AS X
   510 FROM cw_Tag AS X
   504 UNION ALL
   511 UNION ALL
   505 SELECT X.cw_eid AS C0, X.cw_name AS C1
   512 SELECT X.cw_eid AS C0, X.cw_name AS C1
   506 FROM cw_Transition AS X) AS T1
   513 FROM cw_Transition AS X
       
   514 UNION ALL
       
   515 SELECT X.cw_eid AS C0, X.cw_name AS C1
       
   516 FROM cw_Workflow AS X
       
   517 UNION ALL
       
   518 SELECT X.cw_eid AS C0, X.cw_name AS C1
       
   519 FROM cw_WorkflowTransition AS X) AS T1
   507 GROUP BY T1.C1'''),
   520 GROUP BY T1.C1'''),
   508 
   521 
   509     ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X name N, X data D, X data_format DF;',
   522     ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X name N, X data D, X data_format DF;',
   510      '''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
   523      '''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
   511 FROM cw_File AS X
   524 FROM cw_File AS X
   758 
   771 
   759 OUTER_JOIN = [
   772 OUTER_JOIN = [
   760     ('Any X,S WHERE X travaille S?',
   773     ('Any X,S WHERE X travaille S?',
   761      '''SELECT X.cw_eid, rel_travaille0.eid_to
   774      '''SELECT X.cw_eid, rel_travaille0.eid_to
   762 FROM cw_Personne AS X LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_from=X.cw_eid)'''
   775 FROM cw_Personne AS X LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_from=X.cw_eid)'''
   763 #SELECT X.cw_eid, S.cw_eid
       
   764 #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)'''
       
   765     ),
   776     ),
   766     ('Any S,X WHERE X? travaille S, S is Societe',
   777     ('Any S,X WHERE X? travaille S, S is Societe',
   767      '''SELECT S.cw_eid, rel_travaille0.eid_from
   778      '''SELECT S.cw_eid, rel_travaille0.eid_from
   768 FROM cw_Societe AS S LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_to=S.cw_eid)'''
   779 FROM cw_Societe AS S LEFT OUTER JOIN travaille_relation AS rel_travaille0 ON (rel_travaille0.eid_to=S.cw_eid)'''
   769 #SELECT S.cw_eid, X.cw_eid
       
   770 #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)'''
       
   771     ),
   780     ),
   772 
   781 
   773     ('Any N,A WHERE N inline1 A?',
   782     ('Any N,A WHERE N inline1 A?',
   774      '''SELECT N.cw_eid, N.cw_inline1
   783      '''SELECT N.cw_eid, N.cw_inline1
   775 FROM cw_Note AS N'''),
   784 FROM cw_Note AS N'''),
   801 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)'''),
   810 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)'''),
   802 
   811 
   803     ('Any C,M WHERE C travaille G?, G evaluee M?, G is Societe',
   812     ('Any C,M WHERE C travaille G?, G evaluee M?, G is Societe',
   804      '''SELECT C.cw_eid, rel_evaluee1.eid_to
   813      '''SELECT C.cw_eid, rel_evaluee1.eid_to
   805 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)'''
   814 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)'''
   806 #SELECT C.cw_eid, M.cw_eid
       
   807 #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)'''
       
   808      ),
   815      ),
   809 
   816 
   810     ('Any A,C WHERE A documented_by C?, (C is NULL) OR (EXISTS(C require_permission F, '
   817     ('Any A,C WHERE A documented_by C?, (C is NULL) OR (EXISTS(C require_permission F, '
   811      'F name "read", F require_group E, U in_group E)), U eid 1',
   818      'F name "read", F require_group E, U in_group E)), U eid 1',
   812      '''SELECT A.cw_eid, rel_documented_by0.eid_to
   819      '''SELECT A.cw_eid, rel_documented_by0.eid_to
   815 
   822 
   816     ("Any X WHERE X eid 12, P? connait X",
   823     ("Any X WHERE X eid 12, P? connait X",
   817      '''SELECT X.cw_eid
   824      '''SELECT X.cw_eid
   818 FROM cw_Personne AS X LEFT OUTER JOIN connait_relation AS rel_connait0 ON (rel_connait0.eid_to=12)
   825 FROM cw_Personne AS X LEFT OUTER JOIN connait_relation AS rel_connait0 ON (rel_connait0.eid_to=12)
   819 WHERE X.cw_eid=12'''
   826 WHERE X.cw_eid=12'''
   820 #SELECT 12
       
   821 #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)
       
   822 #WHERE X.cw_eid=12'''
       
   823     ),
   827     ),
   824 
   828 
   825     ('Any GN, TN ORDERBY GN WHERE T tags G?, T name TN, G name GN',
   829     ('Any GN, TN ORDERBY GN WHERE T tags G?, T name TN, G name GN',
   826     '''
   830     '''
   827 SELECT _T0.C1, T.cw_name
   831 SELECT _T0.C1, T.cw_name
   878     # two optional variables with additional restriction on an ambigous inlined relation
   882     # two optional variables with additional restriction on an ambigous inlined relation
   879     ('Any T,G,S WHERE T tags G?, G in_state S?, S name "hop"',
   883     ('Any T,G,S WHERE T tags G?, G in_state S?, S name "hop"',
   880      '''
   884      '''
   881 SELECT T.cw_eid, _T0.C0, _T0.C1
   885 SELECT T.cw_eid, _T0.C0, _T0.C1
   882 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
   886 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
   883 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) 
   887 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)
   884 UNION ALL
   888 UNION ALL
   885 SELECT G.cw_eid AS C0, S.cw_eid AS C1
   889 SELECT G.cw_eid AS C0, S.cw_eid AS C1
   886 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) 
   890 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)
   887 UNION ALL
   891 UNION ALL
   888 SELECT G.cw_eid AS C0, S.cw_eid AS C1
   892 SELECT G.cw_eid AS C0, S.cw_eid AS C1
   889 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)'''),
   893 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)'''),
   890 
   894 
       
   895     ('Any O,AD  WHERE NOT S inline1 O, S eid 123, O todo_by AD?',
       
   896      '''SELECT O.cw_eid, rel_todo_by0.eid_to
       
   897 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
       
   898 WHERE NOT EXISTS(SELECT 1 WHERE S.cw_inline1=O.cw_eid) AND S.cw_eid=123''')
   891     ]
   899     ]
   892 
   900 
   893 VIRTUAL_VARS = [
   901 VIRTUAL_VARS = [
   894     ("Personne P WHERE P travaille S, S tel T, S fax T, S is Societe;",
   902     ("Personne P WHERE P travaille S, S tel T, S fax T, S is Societe;",
   895      '''SELECT rel_travaille0.eid_from
   903      '''SELECT rel_travaille0.eid_from
   947 
   955 
   948 FUNCS = [
   956 FUNCS = [
   949     ("Any COUNT(P) WHERE P is Personne",
   957     ("Any COUNT(P) WHERE P is Personne",
   950      '''SELECT COUNT(P.cw_eid)
   958      '''SELECT COUNT(P.cw_eid)
   951 FROM cw_Personne AS P'''),
   959 FROM cw_Personne AS P'''),
   952 ##     ("Personne X where X nom upper('TOTO')",
       
   953 ##      '''SELECT X.cw_eid\nFROM cw_Personne AS X\nWHERE UPPER(X.cw_nom) = TOTO'''),
       
   954 ##     ("Personne X where X nom Y, UPPER(X) prenom upper(Y)",
       
   955 ##      '''SELECT X.cw_eid\nFROM cw_Personne AS X\nWHERE UPPER(X.cw_prenom) = UPPER(X.cw_nom)'''),
       
   956     ]
   960     ]
   957 
   961 
   958 SYMETRIC = [
   962 SYMETRIC = [
   959     ('Any P WHERE X eid 0, X connait P',
   963     ('Any P WHERE X eid 0, X connait P',
   960      '''SELECT DISTINCT P.cw_eid
   964      '''SELECT DISTINCT P.cw_eid
   961 FROM connait_relation AS rel_connait0, cw_Personne AS P
   965 FROM connait_relation AS rel_connait0, cw_Personne AS P
   962 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)'''
   966 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)'''
   963 #      '''SELECT rel_connait0.eid_to
       
   964 # FROM connait_relation AS rel_connait0
       
   965 # WHERE rel_connait0.eid_from=0
       
   966 # UNION
       
   967 # SELECT rel_connait0.eid_from
       
   968 # FROM connait_relation AS rel_connait0
       
   969 # WHERE rel_connait0.eid_to=0'''
       
   970      ),
   967      ),
   971 
   968 
   972     ('Any P WHERE X connait P',
   969     ('Any P WHERE X connait P',
   973     '''SELECT DISTINCT P.cw_eid
   970     '''SELECT DISTINCT P.cw_eid
   974 FROM connait_relation AS rel_connait0, cw_Personne AS P
   971 FROM connait_relation AS rel_connait0, cw_Personne AS P
  1048 FROM cw_Note AS N, cw_Personne AS P
  1045 FROM cw_Note AS N, cw_Personne AS P
  1049 WHERE NOT EXISTS(SELECT 1 WHERE N.cw_ecrit_par=P.cw_eid) AND N.cw_eid=512'''),
  1046 WHERE NOT EXISTS(SELECT 1 WHERE N.cw_ecrit_par=P.cw_eid) AND N.cw_eid=512'''),
  1050 
  1047 
  1051     ('Any S,ES,T WHERE S state_of ET, ET name "CWUser", ES allowed_transition T, T destination_state S',
  1048     ('Any S,ES,T WHERE S state_of ET, ET name "CWUser", ES allowed_transition T, T destination_state S',
  1052      '''SELECT T.cw_destination_state, rel_allowed_transition1.eid_from, T.cw_eid
  1049      '''SELECT T.cw_destination_state, rel_allowed_transition1.eid_from, T.cw_eid
  1053 FROM allowed_transition_relation AS rel_allowed_transition1, cw_CWEType AS ET, cw_Transition AS T, state_of_relation AS rel_state_of0
  1050 FROM allowed_transition_relation AS rel_allowed_transition1, cw_Transition AS T, cw_Workflow AS ET, state_of_relation AS rel_state_of0
  1054 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'''),
  1051 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'''),
       
  1052 
  1055     ('Any O WHERE S eid 0, S in_state O',
  1053     ('Any O WHERE S eid 0, S in_state O',
  1056      '''SELECT S.cw_in_state
  1054      '''SELECT S.cw_in_state
  1057 FROM cw_Affaire AS S
  1055 FROM cw_Affaire AS S
  1058 WHERE S.cw_eid=0 AND S.cw_in_state IS NOT NULL
  1056 WHERE S.cw_eid=0 AND S.cw_in_state IS NOT NULL
  1059 UNION ALL
  1057 UNION ALL
  1125 
  1123 
  1126     def test_nonregr_sol(self):
  1124     def test_nonregr_sol(self):
  1127         delete = self.rqlhelper.parse(
  1125         delete = self.rqlhelper.parse(
  1128             'DELETE X read_permission READ_PERMISSIONSUBJECT,X add_permission ADD_PERMISSIONSUBJECT,'
  1126             'DELETE X read_permission READ_PERMISSIONSUBJECT,X add_permission ADD_PERMISSIONSUBJECT,'
  1129             'X in_basket IN_BASKETSUBJECT,X delete_permission DELETE_PERMISSIONSUBJECT,'
  1127             'X in_basket IN_BASKETSUBJECT,X delete_permission DELETE_PERMISSIONSUBJECT,'
  1130             'X initial_state INITIAL_STATESUBJECT,X update_permission UPDATE_PERMISSIONSUBJECT,'
  1128             'X update_permission UPDATE_PERMISSIONSUBJECT,'
  1131             'X created_by CREATED_BYSUBJECT,X is ISSUBJECT,X is_instance_of IS_INSTANCE_OFSUBJECT,'
  1129             'X created_by CREATED_BYSUBJECT,X is ISSUBJECT,X is_instance_of IS_INSTANCE_OFSUBJECT,'
  1132             'X owned_by OWNED_BYSUBJECT,X specializes SPECIALIZESSUBJECT,ISOBJECT is X,'
  1130             'X owned_by OWNED_BYSUBJECT,X specializes SPECIALIZESSUBJECT,ISOBJECT is X,'
  1133             'SPECIALIZESOBJECT specializes X,STATE_OFOBJECT state_of X,IS_INSTANCE_OFOBJECT is_instance_of X,'
  1131             'SPECIALIZESOBJECT specializes X,IS_INSTANCE_OFOBJECT is_instance_of X,'
  1134             'TO_ENTITYOBJECT to_entity X,TRANSITION_OFOBJECT transition_of X,FROM_ENTITYOBJECT from_entity X '
  1132             'TO_ENTITYOBJECT to_entity X,FROM_ENTITYOBJECT from_entity X '
  1135             'WHERE X is CWEType')
  1133             'WHERE X is CWEType')
  1136         self.rqlhelper.compute_solutions(delete)
  1134         self.rqlhelper.compute_solutions(delete)
  1137         def var_sols(var):
  1135         def var_sols(var):
  1138             s = set()
  1136             s = set()
  1139             for sol in delete.solutions:
  1137             for sol in delete.solutions:
  1169         try:
  1167         try:
  1170             union = self._prepare(rql)
  1168             union = self._prepare(rql)
  1171             r, nargs = self.o.generate(union, args,
  1169             r, nargs = self.o.generate(union, args,
  1172                                       varmap=varmap)
  1170                                       varmap=varmap)
  1173             args.update(nargs)
  1171             args.update(nargs)
  1174             self.assertLinesEquals((r % args).strip(), self._norm_sql(sql))
  1172             self.assertLinesEquals((r % args).strip(), self._norm_sql(sql), striplines=True)
  1175         except Exception, ex:
  1173         except Exception, ex:
  1176             if 'r' in locals():
  1174             if 'r' in locals():
  1177                 try:
  1175                 try:
  1178                     print (r%args).strip()
  1176                     print (r%args).strip()
  1179                 except KeyError:
  1177                 except KeyError:
  1198                 print r.strip()
  1196                 print r.strip()
  1199                 print '!='
  1197                 print '!='
  1200                 print sql[0].strip()
  1198                 print sql[0].strip()
  1201             raise
  1199             raise
  1202         return
  1200         return
  1203 #         rqlst, solutions = self._prepare(rql)
       
  1204 #         for i, sol in enumerate(solutions):
       
  1205 #             try:
       
  1206 #                 r, args = self.o.generate([(rqlst, sol)])
       
  1207 #                 self.assertEqual((r.strip(), args), sqls[i])
       
  1208 #             except Exception, ex:
       
  1209 #                 print rql
       
  1210 #                 raise
       
  1211 
  1201 
  1212     def test1(self):
  1202     def test1(self):
  1213         self._checkall('Any count(RDEF) WHERE RDEF relation_type X, X eid %(x)s',
  1203         self._checkall('Any count(RDEF) WHERE RDEF relation_type X, X eid %(x)s',
  1214                        ("""SELECT COUNT(T1.C0) FROM (SELECT RDEF.cw_eid AS C0
  1204                        ("""SELECT COUNT(T1.C0) FROM (SELECT RDEF.cw_eid AS C0
  1215 FROM cw_CWAttribute AS RDEF
  1205 FROM cw_CWAttribute AS RDEF
  1406             ('Personne X WHERE X has_text %(text)s',
  1396             ('Personne X WHERE X has_text %(text)s',
  1407              """SELECT X.eid
  1397              """SELECT X.eid
  1408 FROM appears AS appears0, entities AS X
  1398 FROM appears AS appears0, entities AS X
  1409 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=X.eid AND X.type='Personne'"""),
  1399 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=X.eid AND X.type='Personne'"""),
  1410 
  1400 
  1411             ('Any X WHERE X has_text "toto tata", X name "tutu"',
  1401             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,File,Folder)',
  1412              """SELECT X.cw_eid
  1402              """SELECT X.cw_eid
  1413 FROM appears AS appears0, cw_Basket AS X
  1403 FROM appears AS appears0, cw_Basket AS X
  1414 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1404 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1415 UNION ALL
  1405 UNION ALL
  1416 SELECT X.cw_eid
  1406 SELECT X.cw_eid
  1418 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1408 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1419 UNION ALL
  1409 UNION ALL
  1420 SELECT X.cw_eid
  1410 SELECT X.cw_eid
  1421 FROM appears AS appears0, cw_Folder AS X
  1411 FROM appears AS appears0, cw_Folder AS X
  1422 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1412 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1423 UNION ALL
  1413 """),
  1424 SELECT X.cw_eid
       
  1425 FROM appears AS appears0, cw_Image AS X
       
  1426 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
       
  1427 UNION ALL
       
  1428 SELECT X.cw_eid
       
  1429 FROM appears AS appears0, cw_State AS X
       
  1430 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
       
  1431 UNION ALL
       
  1432 SELECT X.cw_eid
       
  1433 FROM appears AS appears0, cw_Tag AS X
       
  1434 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu
       
  1435 UNION ALL
       
  1436 SELECT X.cw_eid
       
  1437 FROM appears AS appears0, cw_Transition AS X
       
  1438 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=X.cw_eid AND X.cw_name=tutu"""),
       
  1439 
  1414 
  1440             ('Personne X where X has_text %(text)s, X travaille S, S has_text %(text)s',
  1415             ('Personne X where X has_text %(text)s, X travaille S, S has_text %(text)s',
  1441              """SELECT X.eid
  1416              """SELECT X.eid
  1442 FROM appears AS appears0, appears AS appears2, entities AS X, travaille_relation AS rel_travaille1
  1417 FROM appears AS appears0, appears AS appears2, entities AS X, travaille_relation AS rel_travaille1
  1443 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')"""),
  1418 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')"""),
  1570             ('Personne X WHERE X has_text "toto tata"',
  1545             ('Personne X WHERE X has_text "toto tata"',
  1571              """SELECT X.eid
  1546              """SELECT X.eid
  1572 FROM appears AS appears0, entities AS X
  1547 FROM appears AS appears0, entities AS X
  1573 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1548 WHERE appears0.word_id IN (SELECT word_id FROM word WHERE word in ('toto', 'tata')) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1574 
  1549 
  1575             ('Any X WHERE X has_text "toto tata", X name "tutu"',
  1550             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,File,Folder)',
  1576              """SELECT X.cw_eid
  1551              """SELECT X.cw_eid
  1577 FROM appears AS appears0, cw_Basket AS X
  1552 FROM appears AS appears0, cw_Basket AS X
  1578 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
  1553 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
  1579 UNION ALL
  1554 UNION ALL
  1580 SELECT X.cw_eid
  1555 SELECT X.cw_eid
  1582 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
  1557 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
  1583 UNION ALL
  1558 UNION ALL
  1584 SELECT X.cw_eid
  1559 SELECT X.cw_eid
  1585 FROM appears AS appears0, cw_Folder AS X
  1560 FROM appears AS appears0, cw_Folder AS X
  1586 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
  1561 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
  1587 UNION ALL
  1562 """),
  1588 SELECT X.cw_eid
       
  1589 FROM appears AS appears0, cw_Image AS X
       
  1590 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
       
  1591 UNION ALL
       
  1592 SELECT X.cw_eid
       
  1593 FROM appears AS appears0, cw_State AS X
       
  1594 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
       
  1595 UNION ALL
       
  1596 SELECT X.cw_eid
       
  1597 FROM appears AS appears0, cw_Tag AS X
       
  1598 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
       
  1599 UNION ALL
       
  1600 SELECT X.cw_eid
       
  1601 FROM appears AS appears0, cw_Transition AS X
       
  1602 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"""),
       
  1603             )):
  1563             )):
  1604             yield t
  1564             yield t
  1605 
  1565 
  1606 
  1566 
  1607 
  1567 
  1646 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1606 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1647             ('Personne X WHERE X has_text %(text)s',
  1607             ('Personne X WHERE X has_text %(text)s',
  1648              """SELECT X.eid
  1608              """SELECT X.eid
  1649 FROM appears AS appears0, entities AS X
  1609 FROM appears AS appears0, entities AS X
  1650 WHERE MATCH (appears0.words) AGAINST ('hip hop momo' IN BOOLEAN MODE) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1610 WHERE MATCH (appears0.words) AGAINST ('hip hop momo' IN BOOLEAN MODE) AND appears0.uid=X.eid AND X.type='Personne'"""),
  1651             ('Any X WHERE X has_text "toto tata", X name "tutu"',
  1611             ('Any X WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,File,Folder)',
  1652              """SELECT X.cw_eid
  1612              """SELECT X.cw_eid
  1653 FROM appears AS appears0, cw_Basket AS X
  1613 FROM appears AS appears0, cw_Basket AS X
  1654 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1614 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1655 UNION ALL
  1615 UNION ALL
  1656 SELECT X.cw_eid
  1616 SELECT X.cw_eid
  1658 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1618 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1659 UNION ALL
  1619 UNION ALL
  1660 SELECT X.cw_eid
  1620 SELECT X.cw_eid
  1661 FROM appears AS appears0, cw_Folder AS X
  1621 FROM appears AS appears0, cw_Folder AS X
  1662 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1622 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
  1663 UNION ALL
  1623 """)
  1664 SELECT X.cw_eid
       
  1665 FROM appears AS appears0, cw_Image AS X
       
  1666 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
       
  1667 UNION ALL
       
  1668 SELECT X.cw_eid
       
  1669 FROM appears AS appears0, cw_State AS X
       
  1670 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
       
  1671 UNION ALL
       
  1672 SELECT X.cw_eid
       
  1673 FROM appears AS appears0, cw_Tag AS X
       
  1674 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu
       
  1675 UNION ALL
       
  1676 SELECT X.cw_eid
       
  1677 FROM appears AS appears0, cw_Transition AS X
       
  1678 WHERE MATCH (appears0.words) AGAINST ('toto tata' IN BOOLEAN MODE) AND appears0.uid=X.cw_eid AND X.cw_name=tutu""")
       
  1679             ]
  1624             ]
  1680         for t in self._parse(queries):
  1625         for t in self._parse(queries):
  1681             yield t
  1626             yield t
  1682 
  1627 
  1683 
  1628