diff -r 203d574c8a1d -r 08320697ca1a server/test/unittest_rql2sql.py --- a/server/test/unittest_rql2sql.py Fri Sep 30 18:10:28 2011 +0200 +++ b/server/test/unittest_rql2sql.py Tue Oct 04 12:23:52 2011 +0200 @@ -1396,6 +1396,11 @@ '''SELECT CAST(EXTRACT(MONTH from _P.cw_creation_date) AS INTEGER) FROM cw_Personne AS _P''') + def test_weekday_extraction(self): + self._check("Any WEEKDAY(D) WHERE P is Personne, P creation_date D", + '''SELECT (CAST(EXTRACT(DOW from _P.cw_creation_date) AS INTEGER) + 1) +FROM cw_Personne AS _P''') + def test_substring(self): self._check("Any SUBSTRING(N, 1, 1) WHERE P nom N, P is Personne", '''SELECT SUBSTR(_P.cw_nom, 1, 1) @@ -1524,6 +1529,12 @@ FROM (SELECT MAX(_A.cw_ordernum) AS C0 FROM cw_CWAttribute AS _A) AS _T0, cw_CWAttribute AS _A WHERE _A.cw_ordernum=_T0.C0'''), + + ('Any O1 HAVING O1=O2? WITH O1 BEING (Any MAX(O) WHERE A ordernum O, A is CWAttribute), O2 BEING (Any MAX(O) WHERE A ordernum O, A is CWRelation)', + '''SELECT _T0.C0 +FROM (SELECT MAX(_A.cw_ordernum) AS C0 +FROM cw_CWAttribute AS _A) AS _T0 LEFT OUTER JOIN (SELECT MAX(_A.cw_ordernum) AS C0 +FROM cw_CWRelation AS _A) AS _T1 ON (_T0.C0=_T1.C0)'''), )): yield t @@ -1749,11 +1760,16 @@ self._check('Any X WHERE X is CWUser, X creation_date D HAVING YEAR(D) = "2010" OR D = NULL', '''SELECT _X.cw_eid FROM cw_CWUser AS _X -WHERE ((YEAR(_X.cw_creation_date)=2010) OR (_X.cw_creation_date IS NULL))''') +WHERE ((DATEPART(YEAR, _X.cw_creation_date)=2010) OR (_X.cw_creation_date IS NULL))''') def test_date_extraction(self): self._check("Any MONTH(D) WHERE P is Personne, P creation_date D", - '''SELECT MONTH(_P.cw_creation_date) + '''SELECT DATEPART(MONTH, _P.cw_creation_date) +FROM cw_Personne AS _P''') + + def test_weekday_extraction(self): + self._check("Any WEEKDAY(D) WHERE P is Personne, P creation_date D", + '''SELECT DATEPART(WEEKDAY, _P.cw_creation_date) FROM cw_Personne AS _P''') def test_symmetric(self): @@ -1893,9 +1909,9 @@ 'GROUPBY YEAR(XECT),MONTH(XECT) ORDERBY 1 ' 'WHERE X creation_date XSCT, X modification_date XECT, ' 'X ordernum XCE, X is CWAttribute', - '''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)) + '''SELECT ((DATEPART(YEAR, _X.cw_modification_date) * 100) + DATEPART(MONTH, _X.cw_modification_date)), COUNT(_X.cw_eid), SUM(_X.cw_ordernum), AVG((_X.cw_creation_date - _X.cw_modification_date)) FROM cw_CWAttribute AS _X -GROUP BY YEAR(_X.cw_modification_date),MONTH(_X.cw_modification_date) +GROUP BY DATEPART(YEAR, _X.cw_modification_date),DATEPART(MONTH, _X.cw_modification_date) ORDER BY 1'''), @@ -1910,6 +1926,12 @@ '''SELECT MONTH(_P.cw_creation_date) FROM cw_Personne AS _P''') + def test_weekday_extraction(self): + # custom impl. in cw.server.sqlutils + self._check("Any WEEKDAY(D) WHERE P is Personne, P creation_date D", + '''SELECT WEEKDAY(_P.cw_creation_date) +FROM cw_Personne AS _P''') + def test_regexp(self): self._check("Any X WHERE X login REGEXP '[0-9].*'", '''SELECT _X.cw_eid @@ -2068,6 +2090,11 @@ '''SELECT EXTRACT(MONTH from _P.cw_creation_date) FROM cw_Personne AS _P''') + def test_weekday_extraction(self): + self._check("Any WEEKDAY(D) WHERE P is Personne, P creation_date D", + '''SELECT DAYOFWEEK(_P.cw_creation_date) +FROM cw_Personne AS _P''') + def test_cast(self): self._check("Any CAST(String, P) WHERE P is Personne", '''SELECT CAST(_P.cw_eid AS mediumtext)