server/test/unittest_querier.py
changeset 5174 78438ad513ca
parent 4848 41f84eea63c9
child 5423 e15abfdcce38
equal deleted inserted replaced
5173:73760bbb66bd 5174:78438ad513ca
   218         # should return an empty result set
   218         # should return an empty result set
   219         self.failIf(self.execute('Any X WHERE X eid 99999999'))
   219         self.failIf(self.execute('Any X WHERE X eid 99999999'))
   220 
   220 
   221     def test_typed_eid(self):
   221     def test_typed_eid(self):
   222         # should return an empty result set
   222         # should return an empty result set
   223         rset = self.execute('Any X WHERE X eid %(x)s', {'x': '1'}, 'x')
   223         rset = self.execute('Any X WHERE X eid %(x)s', {'x': '1'})
   224         self.assertIsInstance(rset[0][0], (int, long))
   224         self.assertIsInstance(rset[0][0], (int, long))
   225 
   225 
   226     def test_bytes_storage(self):
   226     def test_bytes_storage(self):
   227         feid = self.execute('INSERT File X: X data_name "foo.pdf", X data_format "text/plain", X data %(data)s',
   227         feid = self.execute('INSERT File X: X data_name "foo.pdf", X data_format "text/plain", X data %(data)s',
   228                             {'data': Binary("xxx")})[0][0]
   228                             {'data': Binary("xxx")})[0][0]
   229         fdata = self.execute('Any D WHERE X data D, X eid %(x)s', {'x': feid}, 'x')[0][0]
   229         fdata = self.execute('Any D WHERE X data D, X eid %(x)s', {'x': feid})[0][0]
   230         self.assertIsInstance(fdata, Binary)
   230         self.assertIsInstance(fdata, Binary)
   231         self.assertEquals(fdata.getvalue(), 'xxx')
   231         self.assertEquals(fdata.getvalue(), 'xxx')
   232 
   232 
   233     # selection queries tests #################################################
   233     # selection queries tests #################################################
   234 
   234 
   354         rset = self.execute('Any S,X ORDERBY S WHERE X? travaille S')
   354         rset = self.execute('Any S,X ORDERBY S WHERE X? travaille S')
   355         self.assertEquals(rset.rows, [[seid1, peid1], [seid2, None]])
   355         self.assertEquals(rset.rows, [[seid1, peid1], [seid2, None]])
   356 
   356 
   357     def test_select_outer_join_optimized(self):
   357     def test_select_outer_join_optimized(self):
   358         peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   358         peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   359         rset = self.execute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1}, 'x')
   359         rset = self.execute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1})
   360         self.assertEquals(rset.rows, [[peid1]])
   360         self.assertEquals(rset.rows, [[peid1]])
   361         rset = self.execute('Any X WHERE X eid %(x)s, X require_permission P?',
   361         rset = self.execute('Any X WHERE X eid %(x)s, X require_permission P?',
   362                             {'x':peid1}, 'x')
   362                             {'x':peid1})
   363         self.assertEquals(rset.rows, [[peid1]])
   363         self.assertEquals(rset.rows, [[peid1]])
   364 
   364 
   365     def test_select_left_outer_join(self):
   365     def test_select_left_outer_join(self):
   366         rset = self.execute('DISTINCT Any G WHERE U? in_group G')
   366         rset = self.execute('DISTINCT Any G WHERE U? in_group G')
   367         self.assertEquals(len(rset), 4)
   367         self.assertEquals(len(rset), 4)
   368         rset = self.execute('DISTINCT Any G WHERE U? in_group G, U eid %(x)s',
   368         rset = self.execute('DISTINCT Any G WHERE U? in_group G, U eid %(x)s',
   369                             {'x': self.session.user.eid}, 'x')
   369                             {'x': self.session.user.eid})
   370         self.assertEquals(len(rset), 4)
   370         self.assertEquals(len(rset), 4)
   371 
   371 
   372     def test_select_ambigous_outer_join(self):
   372     def test_select_ambigous_outer_join(self):
   373         teid = self.execute("INSERT Tag X: X name 'tag'")[0][0]
   373         teid = self.execute("INSERT Tag X: X name 'tag'")[0][0]
   374         self.execute("INSERT Tag X: X name 'tagbis'")[0][0]
   374         self.execute("INSERT Tag X: X name 'tagbis'")[0][0]
   375         geid = self.execute("CWGroup G WHERE G name 'users'")[0][0]
   375         geid = self.execute("CWGroup G WHERE G name 'users'")[0][0]
   376         self.execute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s",
   376         self.execute("SET X tags Y WHERE X eid %(t)s, Y eid %(g)s",
   377                      {'g': geid, 't': teid}, 'g')
   377                      {'g': geid, 't': teid})
   378         rset = self.execute("Any GN,TN ORDERBY GN WHERE T? tags G, T name TN, G name GN")
   378         rset = self.execute("Any GN,TN ORDERBY GN WHERE T? tags G, T name TN, G name GN")
   379         self.failUnless(['users', 'tag'] in rset.rows)
   379         self.failUnless(['users', 'tag'] in rset.rows)
   380         self.failUnless(['activated', None] in rset.rows)
   380         self.failUnless(['activated', None] in rset.rows)
   381         rset = self.execute("Any GN,TN ORDERBY GN WHERE T tags G?, T name TN, G name GN")
   381         rset = self.execute("Any GN,TN ORDERBY GN WHERE T tags G?, T name TN, G name GN")
   382         self.assertEquals(rset.rows, [[None, 'tagbis'], ['users', 'tag']])
   382         self.assertEquals(rset.rows, [[None, 'tagbis'], ['users', 'tag']])
   880         self.assertEquals(rset.description, [('Personne', 'Societe',)])
   880         self.assertEquals(rset.description, [('Personne', 'Societe',)])
   881 
   881 
   882     def test_insert_5bis(self):
   882     def test_insert_5bis(self):
   883         peid = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   883         peid = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   884         self.execute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s",
   884         self.execute("INSERT Societe Y: Y nom 'toto', X travaille Y WHERE X eid %(x)s",
   885                      {'x': peid}, 'x')
   885                      {'x': peid})
   886         rset = self.execute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y')
   886         rset = self.execute('Any X, Y WHERE X nom "bidule", Y nom "toto", X travaille Y')
   887         self.assert_(rset.rows)
   887         self.assert_(rset.rows)
   888         self.assertEquals(rset.description, [('Personne', 'Societe',)])
   888         self.assertEquals(rset.description, [('Personne', 'Societe',)])
   889 
   889 
   890     def test_insert_6(self):
   890     def test_insert_6(self):
   998 
   998 
   999     def test_nonregr_delete_cache2(self):
   999     def test_nonregr_delete_cache2(self):
  1000         eid = self.execute("INSERT Folder T: T name 'toto'")[0][0]
  1000         eid = self.execute("INSERT Folder T: T name 'toto'")[0][0]
  1001         self.commit()
  1001         self.commit()
  1002         # fill the cache
  1002         # fill the cache
  1003         self.execute("Any X WHERE X eid %(x)s", {'x': eid}, 'x')
  1003         self.execute("Any X WHERE X eid %(x)s", {'x': eid})
  1004         self.execute("Any X WHERE X eid %s" %eid)
  1004         self.execute("Any X WHERE X eid %s" %eid)
  1005         self.execute("Folder X WHERE X eid %(x)s", {'x': eid}, 'x')
  1005         self.execute("Folder X WHERE X eid %(x)s", {'x': eid})
  1006         self.execute("Folder X WHERE X eid %s" %eid)
  1006         self.execute("Folder X WHERE X eid %s" %eid)
  1007         self.execute("DELETE Folder T WHERE T eid %s"%eid)
  1007         self.execute("DELETE Folder T WHERE T eid %s"%eid)
  1008         self.commit()
  1008         self.commit()
  1009         rset = self.execute("Any X WHERE X eid %(x)s", {'x': eid}, 'x')
  1009         rset = self.execute("Any X WHERE X eid %(x)s", {'x': eid})
  1010         self.assertEquals(rset.rows, [])
  1010         self.assertEquals(rset.rows, [])
  1011         rset = self.execute("Any X WHERE X eid %s" %eid)
  1011         rset = self.execute("Any X WHERE X eid %s" %eid)
  1012         self.assertEquals(rset.rows, [])
  1012         self.assertEquals(rset.rows, [])
  1013         rset = self.execute("Folder X WHERE X eid %(x)s", {'x': eid}, 'x')
  1013         rset = self.execute("Folder X WHERE X eid %(x)s", {'x': eid})
  1014         self.assertEquals(rset.rows, [])
  1014         self.assertEquals(rset.rows, [])
  1015         rset = self.execute("Folder X WHERE X eid %s" %eid)
  1015         rset = self.execute("Folder X WHERE X eid %s" %eid)
  1016         self.assertEquals(rset.rows, [])
  1016         self.assertEquals(rset.rows, [])
  1017 
  1017 
  1018     # update queries tests ####################################################
  1018     # update queries tests ####################################################
  1084         self.assertEquals(orders2, orders)
  1084         self.assertEquals(orders2, orders)
  1085 
  1085 
  1086     def test_update_string_concat(self):
  1086     def test_update_string_concat(self):
  1087         beid = self.execute("INSERT Bookmark Y: Y title 'toto', Y path '/view'")[0][0]
  1087         beid = self.execute("INSERT Bookmark Y: Y title 'toto', Y path '/view'")[0][0]
  1088         self.execute('SET X title XN + %(suffix)s WHERE X is Bookmark, X title XN', {'suffix': u'-moved'})
  1088         self.execute('SET X title XN + %(suffix)s WHERE X is Bookmark, X title XN', {'suffix': u'-moved'})
  1089         newname = self.execute('Any XN WHERE X eid %(x)s, X title XN', {'x': beid}, 'x')[0][0]
  1089         newname = self.execute('Any XN WHERE X eid %(x)s, X title XN', {'x': beid})[0][0]
  1090         self.assertEquals(newname, 'toto-moved')
  1090         self.assertEquals(newname, 'toto-moved')
  1091 
  1091 
  1092     def test_update_query_error(self):
  1092     def test_update_query_error(self):
  1093         self.execute("INSERT Personne Y: Y nom 'toto'")
  1093         self.execute("INSERT Personne Y: Y nom 'toto'")
  1094         self.assertRaises(Exception, self.execute, "SET X nom 'toto', X is Personne")
  1094         self.assertRaises(Exception, self.execute, "SET X nom 'toto', X is Personne")
  1201                        {'name': u'éname0',
  1201                        {'name': u'éname0',
  1202                         'modification_date': '2003/03/12 11:00',
  1202                         'modification_date': '2003/03/12 11:00',
  1203                         'creation_date': '2000/07/03 11:00'})
  1203                         'creation_date': '2000/07/03 11:00'})
  1204         rset = self.execute('Any lower(N) ORDERBY LOWER(N) WHERE X is Tag, X name N,'
  1204         rset = self.execute('Any lower(N) ORDERBY LOWER(N) WHERE X is Tag, X name N,'
  1205                             'X owned_by U, U eid %(x)s',
  1205                             'X owned_by U, U eid %(x)s',
  1206                             {'x':self.session.user.eid}, 'x')
  1206                             {'x':self.session.user.eid})
  1207         self.assertEquals(rset.rows, [[u'\xe9name0']])
  1207         self.assertEquals(rset.rows, [[u'\xe9name0']])
  1208 
  1208 
  1209 
  1209 
  1210     def test_nonregr_description(self):
  1210     def test_nonregr_description(self):
  1211         """check that a correct description is built in case where infered
  1211         """check that a correct description is built in case where infered
  1284 
  1284 
  1285     def test_nonregr_set_query(self):
  1285     def test_nonregr_set_query(self):
  1286         ueid = self.execute("INSERT CWUser X: X login 'bob', X upassword 'toto'")[0][0]
  1286         ueid = self.execute("INSERT CWUser X: X login 'bob', X upassword 'toto'")[0][0]
  1287         self.execute("SET E in_group G, E firstname %(firstname)s, E surname %(surname)s "
  1287         self.execute("SET E in_group G, E firstname %(firstname)s, E surname %(surname)s "
  1288                       "WHERE E eid %(x)s, G name 'users'",
  1288                       "WHERE E eid %(x)s, G name 'users'",
  1289                       {'x':ueid, 'firstname': u'jean', 'surname': u'paul'}, 'x')
  1289                       {'x':ueid, 'firstname': u'jean', 'surname': u'paul'})
  1290 
  1290 
  1291     def test_nonregr_u_owned_by_u(self):
  1291     def test_nonregr_u_owned_by_u(self):
  1292         ueid = self.execute("INSERT CWUser X: X login 'bob', X upassword 'toto', X in_group G "
  1292         ueid = self.execute("INSERT CWUser X: X login 'bob', X upassword 'toto', X in_group G "
  1293                              "WHERE G name 'users'")[0][0]
  1293                              "WHERE G name 'users'")[0][0]
  1294         rset = self.execute("CWUser U")
  1294         rset = self.execute("CWUser U")