server/test/unittest_rql2sql.py
branchstable
changeset 8217 0a467663c3fe
parent 8109 67d540b7f8c8
child 8245 d53762ae5961
equal deleted inserted replaced
8215:4b32678c21a7 8217:0a467663c3fe
   158 UNION ALL
   158 UNION ALL
   159 SELECT rel_evaluee0.eid_to
   159 SELECT rel_evaluee0.eid_to
   160 FROM cw_SubDivision AS _X, evaluee_relation AS rel_evaluee0
   160 FROM cw_SubDivision AS _X, evaluee_relation AS rel_evaluee0
   161 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom IN(Logilab, Caesium)'''),
   161 WHERE rel_evaluee0.eid_from=_X.cw_eid AND _X.cw_nom IN(Logilab, Caesium)'''),
   162 
   162 
   163     ("Any X WHERE X creation_date TODAY, X is Affaire",
       
   164      '''SELECT _X.cw_eid
       
   165 FROM cw_Affaire AS _X
       
   166 WHERE DATE(_X.cw_creation_date)=CURRENT_DATE'''),
       
   167 
       
   168     ("Any N WHERE G is CWGroup, G name N, E eid 12, E read_permission G",
   163     ("Any N WHERE G is CWGroup, G name N, E eid 12, E read_permission G",
   169      '''SELECT _G.cw_name
   164      '''SELECT _G.cw_name
   170 FROM cw_CWGroup AS _G, read_permission_relation AS rel_read_permission0
   165 FROM cw_CWGroup AS _G, read_permission_relation AS rel_read_permission0
   171 WHERE rel_read_permission0.eid_from=12 AND rel_read_permission0.eid_to=_G.cw_eid'''),
   166 WHERE rel_read_permission0.eid_from=12 AND rel_read_permission0.eid_to=_G.cw_eid'''),
   172 
   167 
   681 
   676 
   682     ('Any X WHERE NOT X travaille S, X is Personne',
   677     ('Any X WHERE NOT X travaille S, X is Personne',
   683      '''SELECT _X.cw_eid
   678      '''SELECT _X.cw_eid
   684 FROM cw_Personne AS _X
   679 FROM cw_Personne AS _X
   685 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid))'''),
   680 WHERE NOT (EXISTS(SELECT 1 FROM travaille_relation AS rel_travaille0 WHERE rel_travaille0.eid_from=_X.cw_eid))'''),
   686 
       
   687     ("Personne P where not P datenaiss TODAY",
       
   688      '''SELECT _P.cw_eid
       
   689 FROM cw_Personne AS _P
       
   690 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
       
   691 
   681 
   692     ("Personne P where NOT P concerne A",
   682     ("Personne P where NOT P concerne A",
   693      '''SELECT _P.cw_eid
   683      '''SELECT _P.cw_eid
   694 FROM cw_Personne AS _P
   684 FROM cw_Personne AS _P
   695 WHERE NOT (EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=_P.cw_eid))'''),
   685 WHERE NOT (EXISTS(SELECT 1 FROM concerne_relation AS rel_concerne0 WHERE rel_concerne0.eid_from=_P.cw_eid))'''),
  1388         self.assertMultiLineEqual((r % args).strip(),
  1378         self.assertMultiLineEqual((r % args).strip(),
  1389                                '''SELECT _X.cw_eid
  1379                                '''SELECT _X.cw_eid
  1390 FROM cw_CWUser AS _X
  1380 FROM cw_CWUser AS _X
  1391 WHERE _X.cw_login IS NULL''')
  1381 WHERE _X.cw_login IS NULL''')
  1392 
  1382 
       
  1383     def test_today(self):
       
  1384         for t in self._parse([("Any X WHERE X creation_date TODAY, X is Affaire",
       
  1385                               '''SELECT _X.cw_eid
       
  1386 FROM cw_Affaire AS _X
       
  1387 WHERE DATE(_X.cw_creation_date)=CAST(clock_timestamp() AS DATE)'''),
       
  1388                              ("Personne P where not P datenaiss TODAY",
       
  1389                               '''SELECT _P.cw_eid
       
  1390 FROM cw_Personne AS _P
       
  1391 WHERE NOT (DATE(_P.cw_datenaiss)=CAST(clock_timestamp() AS DATE))'''),
       
  1392                              ]):
       
  1393             yield t
  1393 
  1394 
  1394     def test_date_extraction(self):
  1395     def test_date_extraction(self):
  1395         self._check("Any MONTH(D) WHERE P is Personne, P creation_date D",
  1396         self._check("Any MONTH(D) WHERE P is Personne, P creation_date D",
  1396                     '''SELECT CAST(EXTRACT(MONTH from _P.cw_creation_date) AS INTEGER)
  1397                     '''SELECT CAST(EXTRACT(MONTH from _P.cw_creation_date) AS INTEGER)
  1397 FROM cw_Personne AS _P''')
  1398 FROM cw_Personne AS _P''')
  1745 
  1746 
  1746 
  1747 
  1747 class SqlServer2005SQLGeneratorTC(PostgresSQLGeneratorTC):
  1748 class SqlServer2005SQLGeneratorTC(PostgresSQLGeneratorTC):
  1748     backend = 'sqlserver2005'
  1749     backend = 'sqlserver2005'
  1749     def _norm_sql(self, sql):
  1750     def _norm_sql(self, sql):
  1750         return sql.strip().replace(' SUBSTR', ' SUBSTRING').replace(' || ', ' + ').replace(' ILIKE ', ' LIKE ').replace('TRUE', '1').replace('FALSE', '0').replace('CURRENT_DATE', str(date.today()))
  1751         return sql.strip().replace(' SUBSTR', ' SUBSTRING').replace(' || ', ' + ').replace(' ILIKE ', ' LIKE ').replace('TRUE', '1').replace('FALSE', '0')
  1751 
  1752 
  1752     def test_has_text(self):
  1753     def test_has_text(self):
  1753         for t in self._parse(HAS_TEXT_LG_INDEXER):
  1754         for t in self._parse(HAS_TEXT_LG_INDEXER):
  1754             yield t
  1755             yield t
  1755 
  1756 
  1910                     'WHERE X creation_date XSCT, X modification_date XECT, '
  1911                     'WHERE X creation_date XSCT, X modification_date XECT, '
  1911                     'X ordernum XCE, X is CWAttribute',
  1912                     'X ordernum XCE, X is CWAttribute',
  1912                     '''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))
  1913                     '''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))
  1913 FROM cw_CWAttribute AS _X
  1914 FROM cw_CWAttribute AS _X
  1914 GROUP BY DATEPART(YEAR, _X.cw_modification_date),DATEPART(MONTH, _X.cw_modification_date)
  1915 GROUP BY DATEPART(YEAR, _X.cw_modification_date),DATEPART(MONTH, _X.cw_modification_date)
  1915 ORDER BY 1'''),
  1916 ORDER BY 1''')
       
  1917 
       
  1918     def test_today(self):
       
  1919         for t in self._parse([("Any X WHERE X creation_date TODAY, X is Affaire",
       
  1920                         '''SELECT _X.cw_eid
       
  1921 FROM cw_Affaire AS _X
       
  1922 WHERE DATE(_X.cw_creation_date)=CURRENT_DATE'''),
       
  1923 
       
  1924                        ("Personne P where not P datenaiss TODAY",
       
  1925                         '''SELECT _P.cw_eid
       
  1926 FROM cw_Personne AS _P
       
  1927 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
       
  1928                        ]):
       
  1929             yield t
  1916 
  1930 
  1917 
  1931 
  1918 class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC):
  1932 class SqliteSQLGeneratorTC(PostgresSQLGeneratorTC):
  1919     backend = 'sqlite'
  1933     backend = 'sqlite'
  1920 
  1934 
  2066                     '''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))
  2080                     '''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))
  2067 FROM cw_CWAttribute AS _X
  2081 FROM cw_CWAttribute AS _X
  2068 GROUP BY YEAR(_X.cw_modification_date),MONTH(_X.cw_modification_date)
  2082 GROUP BY YEAR(_X.cw_modification_date),MONTH(_X.cw_modification_date)
  2069 ORDER BY 1'''),
  2083 ORDER BY 1'''),
  2070 
  2084 
       
  2085     def test_today(self):
       
  2086         for t in self._parse([("Any X WHERE X creation_date TODAY, X is Affaire",
       
  2087                         '''SELECT _X.cw_eid
       
  2088 FROM cw_Affaire AS _X
       
  2089 WHERE DATE(_X.cw_creation_date)=CURRENT_DATE'''),
       
  2090 
       
  2091                        ("Personne P where not P datenaiss TODAY",
       
  2092                         '''SELECT _P.cw_eid
       
  2093 FROM cw_Personne AS _P
       
  2094 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
       
  2095                        ]):
       
  2096             yield t
  2071 
  2097 
  2072 
  2098 
  2073 class MySQLGenerator(PostgresSQLGeneratorTC):
  2099 class MySQLGenerator(PostgresSQLGeneratorTC):
  2074     backend = 'mysql'
  2100     backend = 'mysql'
  2075 
  2101 
  2189                     '''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))
  2215                     '''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))
  2190 FROM cw_CWAttribute AS _X
  2216 FROM cw_CWAttribute AS _X
  2191 GROUP BY EXTRACT(YEAR from _X.cw_modification_date),EXTRACT(MONTH from _X.cw_modification_date)
  2217 GROUP BY EXTRACT(YEAR from _X.cw_modification_date),EXTRACT(MONTH from _X.cw_modification_date)
  2192 ORDER BY 1'''),
  2218 ORDER BY 1'''),
  2193 
  2219 
       
  2220     def test_today(self):
       
  2221         for t in self._parse([("Any X WHERE X creation_date TODAY, X is Affaire",
       
  2222                         '''SELECT _X.cw_eid
       
  2223 FROM cw_Affaire AS _X
       
  2224 WHERE DATE(_X.cw_creation_date)=CURRENT_DATE'''),
       
  2225 
       
  2226                        ("Personne P where not P datenaiss TODAY",
       
  2227                         '''SELECT _P.cw_eid
       
  2228 FROM cw_Personne AS _P
       
  2229 WHERE NOT (DATE(_P.cw_datenaiss)=CURRENT_DATE)'''),
       
  2230                        ]):
       
  2231             yield t
  2194 
  2232 
  2195 class removeUnsusedSolutionsTC(TestCase):
  2233 class removeUnsusedSolutionsTC(TestCase):
  2196     def test_invariant_not_varying(self):
  2234     def test_invariant_not_varying(self):
  2197         rqlst = mock_object(defined_vars={})
  2235         rqlst = mock_object(defined_vars={})
  2198         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)
  2236         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)