server/test/unittest_rql2sql.py
changeset 5575 8a531340c3ef
parent 5426 0d4853a6e5ee
child 5590 a56eb02f9ce7
equal deleted inserted replaced
5574:e082a57c2207 5575:8a531340c3ef
    13 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    13 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    14 # details.
    14 # details.
    15 #
    15 #
    16 # You should have received a copy of the GNU Lesser General Public License along
    16 # You should have received a copy of the GNU Lesser General Public License along
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    18 """
       
    19 
       
    20 """
       
    21 
       
    22 """unit tests for module cubicweb.server.sources.rql2sql"""
    18 """unit tests for module cubicweb.server.sources.rql2sql"""
    23 
    19 
    24 import sys
    20 import sys
    25 
    21 
    26 from logilab.common.testlib import TestCase, unittest_main, mock_object
    22 from logilab.common.testlib import TestCase, unittest_main, mock_object
   427 SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   423 SELECT _X.cw_eid AS C0, _X.cw_name AS C1
   428 FROM cw_Tag AS _X) AS T1
   424 FROM cw_Tag AS _X) AS T1
   429 GROUP BY T1.C1'''),
   425 GROUP BY T1.C1'''),
   430 
   426 
   431     ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X data_name N, X data D, X data_format DF;',
   427     ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X data_name N, X data D, X data_format DF;',
   432      '''SELECT (MAX(T1.C1) + MIN(LENGTH(T1.C0))), T1.C2 FROM (SELECT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   428      '''SELECT (MAX(_X.cw_eid) + MIN(LENGTH(_X.cw_data))), _X.cw_data_name
   433 FROM cw_File AS _X
   429 FROM cw_File AS _X
   434 UNION ALL
   430 GROUP BY _X.cw_data_name,_X.cw_data_format
   435 SELECT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   431 ORDER BY 1,2,_X.cw_data_format'''),
   436 FROM cw_Image AS _X) AS T1
       
   437 GROUP BY T1.C2,T1.C3
       
   438 ORDER BY 1,2,T1.C3'''),
       
   439 
   432 
   440     ('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R',
   433     ('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R',
   441      '''SELECT T1.C0 FROM (SELECT DISTINCT _A.cw_sujet AS C0, _A.cw_ref AS C1
   434      '''SELECT T1.C0 FROM (SELECT DISTINCT _A.cw_sujet AS C0, _A.cw_ref AS C1
   442 FROM cw_Affaire AS _A
   435 FROM cw_Affaire AS _A
   443 ORDER BY 2) AS T1'''),
   436 ORDER BY 2) AS T1'''),
   444 
   437 
   445     ('DISTINCT Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 2, DF WHERE X data_name N, X data D, X data_format DF;',
   438     ('DISTINCT Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 2, DF WHERE X data_name N, X data D, X data_format DF;',
   446      '''SELECT T1.C0,T1.C1 FROM (SELECT DISTINCT (MAX(T1.C1) + MIN(LENGTH(T1.C0))) AS C0, T1.C2 AS C1, T1.C3 AS C2 FROM (SELECT DISTINCT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
   439      '''SELECT T1.C0,T1.C1 FROM (SELECT DISTINCT (MAX(_X.cw_eid) + MIN(LENGTH(_X.cw_data))) AS C0, _X.cw_data_name AS C1, _X.cw_data_format AS C2
   447 FROM cw_File AS _X
   440 FROM cw_File AS _X
   448 UNION
   441 GROUP BY _X.cw_data_name,_X.cw_data_format
   449 SELECT DISTINCT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3
       
   450 FROM cw_Image AS _X) AS T1
       
   451 GROUP BY T1.C2,T1.C3
       
   452 ORDER BY 2,3) AS T1
   442 ORDER BY 2,3) AS T1
   453 '''),
   443 '''),
   454 
   444 
   455     # ambiguity in EXISTS() -> should union the sub-query
   445     # ambiguity in EXISTS() -> should union the sub-query
   456     ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))',
   446     ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))',
   709 
   699 
   710     ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser',
   700     ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser',
   711      '''SELECT _S.cw_eid
   701      '''SELECT _S.cw_eid
   712 FROM cw_State AS _S
   702 FROM cw_State AS _S
   713 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename)'''),
   703 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename)'''),
   714    
   704 
   715 # XXXFIXME fail
   705 # XXXFIXME fail
   716 #         ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute',
   706 #         ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute',
   717 #      '''SELECT _X.cw_eid, _X.cw_relation_type
   707 #      '''SELECT _X.cw_eid, _X.cw_relation_type
   718 # FROM cw_CWRelation AS _X'''),
   708 # FROM cw_CWRelation AS _X'''),
   719 ]
   709 ]
  1642         self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1632         self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1643                                                           {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None),
  1633                                                           {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None),
  1644                           ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set())
  1634                           ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set())
  1645                           )
  1635                           )
  1646 
  1636 
       
  1637 
  1647 if __name__ == '__main__':
  1638 if __name__ == '__main__':
  1648     unittest_main()
  1639     unittest_main()