server/test/unittest_rql2sql.py
branchstable
changeset 7579 5a610b34d2d2
parent 7472 9833c09460f1
child 7580 328542c4fdc8
child 7587 c7c0f53062f5
equal deleted inserted replaced
7576:1b7fa4df1f83 7579:5a610b34d2d2
  1527 FROM appears AS appears0, entities AS _X
  1527 FROM appears AS appears0, entities AS _X
  1528 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=_X.eid AND _X.type='Personne'
  1528 WHERE appears0.words @@ to_tsquery('default', 'hip&hop&momo') AND appears0.uid=_X.eid AND _X.type='Personne'
  1529 ORDER BY ts_rank(appears0.words, to_tsquery('default', 'hip&hop&momo'))*appears0.weight"""),
  1529 ORDER BY ts_rank(appears0.words, to_tsquery('default', 'hip&hop&momo'))*appears0.weight"""),
  1530 
  1530 
  1531             ('Any X ORDERBY FTIRANK(X) WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1531             ('Any X ORDERBY FTIRANK(X) WHERE X has_text "toto tata", X name "tutu", X is IN (Basket,Folder)',
  1532              """SELECT T1.C0 FROM (SELECT _X.cw_eid AS C0, ts_rank(appears0.words, to_tsquery('default', 'toto&tata'))*appears0.weight AS C1
  1532              """SELECT _X.cw_eid
  1533 FROM appears AS appears0, cw_Basket AS _X
  1533 FROM appears AS appears0, cw_Basket AS _X
  1534 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1534 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1535 UNION ALL
  1535 UNION ALL
  1536 SELECT _X.cw_eid AS C0, ts_rank(appears0.words, to_tsquery('default', 'toto&tata'))*appears0.weight AS C1
  1536 SELECT _X.cw_eid
  1537 FROM appears AS appears0, cw_Folder AS _X
  1537 FROM appears AS appears0, cw_Folder AS _X
  1538 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1538 WHERE appears0.words @@ to_tsquery('default', 'toto&tata') AND appears0.uid=_X.cw_eid AND _X.cw_name=tutu
  1539 ORDER BY 2) AS T1"""),
  1539 ORDER BY ts_rank(appears0.words, to_tsquery('default', 'toto&tata'))*appears0.weight"""),
  1540 
  1540 
  1541             ('Personne X ORDERBY FTIRANK(X),FTIRANK(S) WHERE X has_text %(text)s, X travaille S, S has_text %(text)s',
  1541             ('Personne X ORDERBY FTIRANK(X),FTIRANK(S) WHERE X has_text %(text)s, X travaille S, S has_text %(text)s',
  1542              """SELECT _X.eid
  1542              """SELECT _X.eid
  1543 FROM appears AS appears0, appears AS appears2, entities AS _X, travaille_relation AS rel_travaille1
  1543 FROM appears AS appears0, appears AS appears2, entities AS _X, travaille_relation AS rel_travaille1
  1544 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')
  1544 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')
  1641                     '''SELECT COUNT(rel_bookmarked_by1.eid_to), _G.cw_eid
  1641                     '''SELECT COUNT(rel_bookmarked_by1.eid_to), _G.cw_eid
  1642 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)
  1642 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)
  1643 WHERE rel_owned_by0.eid_from=_G.cw_eid AND rel_owned_by0.eid_to=1122
  1643 WHERE rel_owned_by0.eid_from=_G.cw_eid AND rel_owned_by0.eid_to=1122
  1644 GROUP BY _G.cw_eid''')
  1644 GROUP BY _G.cw_eid''')
  1645 
  1645 
       
  1646     def test_groupby_orderby_insertion_dont_modify_intention(self):
       
  1647         self._check('Any YEAR(XECT)*100+MONTH(XECT), COUNT(X),SUM(XCE),AVG(XSCT-XECT) '
       
  1648                     'GROUPBY YEAR(XECT),MONTH(XECT) ORDERBY 1 '
       
  1649                     'WHERE X creation_date XSCT, X modification_date XECT, '
       
  1650                     'X ordernum XCE, X is CWAttribute',
       
  1651                     '''SELECT ((CAST(EXTRACT(YEAR from _X.cw_modification_date) AS INTEGER) * 100) + CAST(EXTRACT(MONTH from _X.cw_modification_date) AS INTEGER)), COUNT(_X.cw_eid), SUM(_X.cw_ordernum), AVG((_X.cw_creation_date - _X.cw_modification_date))
       
  1652 FROM cw_CWAttribute AS _X
       
  1653 GROUP BY CAST(EXTRACT(YEAR from _X.cw_modification_date) AS INTEGER),CAST(EXTRACT(MONTH from _X.cw_modification_date) AS INTEGER)
       
  1654 ORDER BY 1'''),
       
  1655 
  1646 
  1656 
  1647 class SqlServer2005SQLGeneratorTC(PostgresSQLGeneratorTC):
  1657 class SqlServer2005SQLGeneratorTC(PostgresSQLGeneratorTC):
  1648     backend = 'sqlserver2005'
  1658     backend = 'sqlserver2005'
  1649     def _norm_sql(self, sql):
  1659     def _norm_sql(self, sql):
  1650         return sql.strip().replace(' SUBSTR', ' SUBSTRING').replace(' || ', ' + ').replace(' ILIKE ', ' LIKE ')
  1660         return sql.strip().replace(' SUBSTR', ' SUBSTRING').replace(' || ', ' + ').replace(' ILIKE ', ' LIKE ')
  1747 ORDER BY 4 DESC'''),
  1757 ORDER BY 4 DESC'''),
  1748             ]
  1758             ]
  1749         for t in self._parse(WITH_LIMIT):# + ADVANCED_WITH_LIMIT_OR_ORDERBY):
  1759         for t in self._parse(WITH_LIMIT):# + ADVANCED_WITH_LIMIT_OR_ORDERBY):
  1750             yield t
  1760             yield t
  1751 
  1761 
       
  1762     def test_groupby_orderby_insertion_dont_modify_intention(self):
       
  1763         self._check('Any YEAR(XECT)*100+MONTH(XECT), COUNT(X),SUM(XCE),AVG(XSCT-XECT) '
       
  1764                     'GROUPBY YEAR(XECT),MONTH(XECT) ORDERBY 1 '
       
  1765                     'WHERE X creation_date XSCT, X modification_date XECT, '
       
  1766                     'X ordernum XCE, X is CWAttribute',
       
  1767                     '''SELECT ((YEAR(_X.cw_modification_date) * 100) + MONTH(_X.cw_modification_date)), COUNT(_X.cw_eid), SUM(_X.cw_ordernum), AVG((_X.cw_creation_date - _X.cw_modification_date))
       
  1768 FROM cw_CWAttribute AS _X
       
  1769 GROUP BY YEAR(_X.cw_modification_date),MONTH(_X.cw_modification_date)
       
  1770 ORDER BY 1'''),
  1752 
  1771 
  1753 
  1772 
  1754 class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC):
  1773 class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC):
  1755     backend = 'sqlite'
  1774     backend = 'sqlite'
  1756 
  1775 
  1877     def test_or_having_fake_terms(self):
  1896     def test_or_having_fake_terms(self):
  1878         self._check('Any X WHERE X is CWUser, X creation_date D HAVING YEAR(D) = "2010" OR D = NULL',
  1897         self._check('Any X WHERE X is CWUser, X creation_date D HAVING YEAR(D) = "2010" OR D = NULL',
  1879                     '''SELECT _X.cw_eid
  1898                     '''SELECT _X.cw_eid
  1880 FROM cw_CWUser AS _X
  1899 FROM cw_CWUser AS _X
  1881 WHERE ((YEAR(_X.cw_creation_date)=2010) OR (_X.cw_creation_date IS NULL))''')
  1900 WHERE ((YEAR(_X.cw_creation_date)=2010) OR (_X.cw_creation_date IS NULL))''')
       
  1901 
       
  1902     def test_groupby_orderby_insertion_dont_modify_intention(self):
       
  1903         self._check('Any YEAR(XECT)*100+MONTH(XECT), COUNT(X),SUM(XCE),AVG(XSCT-XECT) '
       
  1904                     'GROUPBY YEAR(XECT),MONTH(XECT) ORDERBY 1 '
       
  1905                     'WHERE X creation_date XSCT, X modification_date XECT, '
       
  1906                     'X ordernum XCE, X is CWAttribute',
       
  1907                     '''SELECT ((YEAR(_X.cw_modification_date) * 100) + MONTH(_X.cw_modification_date)), COUNT(_X.cw_eid), SUM(_X.cw_ordernum), AVG((_X.cw_creation_date - _X.cw_modification_date))
       
  1908 FROM cw_CWAttribute AS _X
       
  1909 GROUP BY YEAR(_X.cw_modification_date),MONTH(_X.cw_modification_date)
       
  1910 ORDER BY 1'''),
  1882 
  1911 
  1883 
  1912 
  1884 
  1913 
  1885 class MySQLGenerator(PostgresSQLGeneratorTC):
  1914 class MySQLGenerator(PostgresSQLGeneratorTC):
  1886     backend = 'mysql'
  1915     backend = 'mysql'
  1974         self._check('Any 1 WHERE NOT X in_group G, X is CWUser',
  2003         self._check('Any 1 WHERE NOT X in_group G, X is CWUser',
  1975                     '''SELECT 1
  2004                     '''SELECT 1
  1976 FROM (SELECT 1) AS _T
  2005 FROM (SELECT 1) AS _T
  1977 WHERE NOT (EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group0))''')
  2006 WHERE NOT (EXISTS(SELECT 1 FROM in_group_relation AS rel_in_group0))''')
  1978 
  2007 
       
  2008     def test_groupby_orderby_insertion_dont_modify_intention(self):
       
  2009         self._check('Any YEAR(XECT)*100+MONTH(XECT), COUNT(X),SUM(XCE),AVG(XSCT-XECT) '
       
  2010                     'GROUPBY YEAR(XECT),MONTH(XECT) ORDERBY 1 '
       
  2011                     'WHERE X creation_date XSCT, X modification_date XECT, '
       
  2012                     'X ordernum XCE, X is CWAttribute',
       
  2013                     '''SELECT ((EXTRACT(YEAR from _X.cw_modification_date) * 100) + EXTRACT(MONTH from _X.cw_modification_date)), COUNT(_X.cw_eid), SUM(_X.cw_ordernum), AVG((_X.cw_creation_date - _X.cw_modification_date))
       
  2014 FROM cw_CWAttribute AS _X
       
  2015 GROUP BY EXTRACT(YEAR from _X.cw_modification_date),EXTRACT(MONTH from _X.cw_modification_date)
       
  2016 ORDER BY 1'''),
       
  2017 
  1979 
  2018 
  1980 class removeUnsusedSolutionsTC(TestCase):
  2019 class removeUnsusedSolutionsTC(TestCase):
  1981     def test_invariant_not_varying(self):
  2020     def test_invariant_not_varying(self):
  1982         rqlst = mock_object(defined_vars={})
  2021         rqlst = mock_object(defined_vars={})
  1983         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)
  2022         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)