119 blog2.put() |
119 blog2.put() |
120 rset = self.req.execute('Any X WHERE X is Blog') |
120 rset = self.req.execute('Any X WHERE X is Blog') |
121 self.assertEquals(len(rset), 2) |
121 self.assertEquals(len(rset), 2) |
122 self.assertEquals(rset.description, [('Blog',), ('Blog',)]) |
122 self.assertEquals(rset.description, [('Blog',), ('Blog',)]) |
123 |
123 |
124 |
124 |
125 def test_2_attribute_selection_1(self): |
125 def test_2_attribute_selection_1(self): |
126 rset = self.req.execute('Any X,D,C WHERE X is Blog, X diem D, X content C') |
126 rset = self.req.execute('Any X,D,C WHERE X is Blog, X diem D, X content C') |
127 self._check_rset_size(rset, 1, 3) |
127 self._check_rset_size(rset, 1, 3) |
128 self.assertEquals(rset[0], [self.blog.eid, today(), u'hop']) |
128 self.assertEquals(rset[0], [self.blog.eid, today(), u'hop']) |
129 self.assertEquals(rset.description[0], ('Blog', 'Date', 'String')) |
129 self.assertEquals(rset.description[0], ('Blog', 'Date', 'String')) |
130 self.assertIsInstance(rset[0][1], DateTimeType) |
130 self.assertIsInstance(rset[0][1], DateTimeType) |
131 |
131 |
132 def test_2_attribute_selection_2(self): |
132 def test_2_attribute_selection_2(self): |
133 rset = self.req.execute('Any D,C WHERE X is Blog, X diem D, X content C') |
133 rset = self.req.execute('Any D,C WHERE X is Blog, X diem D, X content C') |
134 self._check_rset_size(rset, 1, 2) |
134 self._check_rset_size(rset, 1, 2) |
135 self.assertEquals(rset[0], [today(), u'hop']) |
135 self.assertEquals(rset[0], [today(), u'hop']) |
136 self.assertEquals(rset.description[0], ('Date', 'String')) |
136 self.assertEquals(rset.description[0], ('Date', 'String')) |
137 |
137 |
138 def test_2_attribute_selection_binary(self): |
138 def test_2_attribute_selection_binary(self): |
139 rset = self.req.execute('Any D WHERE X is Blog, X data D') |
139 rset = self.req.execute('Any D WHERE X is Blog, X data D') |
140 self._check_rset_size(rset, 1, 1) |
140 self._check_rset_size(rset, 1, 1) |
141 self.assertEquals(rset[0], [None]) |
141 self.assertEquals(rset[0], [None]) |
142 self.assertEquals(rset.description[0], ('Bytes',)) |
142 self.assertEquals(rset.description[0], ('Bytes',)) |
145 rset = self.req.execute('Any D WHERE X is Blog, X data D') |
145 rset = self.req.execute('Any D WHERE X is Blog, X data D') |
146 self._check_rset_size(rset, 1, 1) |
146 self._check_rset_size(rset, 1, 1) |
147 self.assertIsInstance(rset[0][0], Binary) |
147 self.assertIsInstance(rset[0][0], Binary) |
148 value = rset[0][0].getvalue() |
148 value = rset[0][0].getvalue() |
149 self.assertIsInstance(value, str) |
149 self.assertIsInstance(value, str) |
150 self.failIf(isinstance(value, Blob)) |
150 self.failIf(isinstance(value, Blob)) |
151 self.assertEquals(value, 'raw data') |
151 self.assertEquals(value, 'raw data') |
152 self.assertEquals(rset.description[0], ('Bytes',)) |
152 self.assertEquals(rset.description[0], ('Bytes',)) |
153 |
153 |
154 def test_2_attribute_selection_long_text(self): |
154 def test_2_attribute_selection_long_text(self): |
155 self.blog['content'] = text = 'a'*501 |
155 self.blog['content'] = text = 'a'*501 |
156 self.blog.put() |
156 self.blog.put() |
157 rset = self.req.execute('Any C WHERE X is Blog, X content C') |
157 rset = self.req.execute('Any C WHERE X is Blog, X content C') |
158 self._check_rset_size(rset, 1, 1) |
158 self._check_rset_size(rset, 1, 1) |
159 self.assertIsInstance(rset[0][0], unicode) |
159 self.assertIsInstance(rset[0][0], unicode) |
160 self.failIf(isinstance(rset[0][0], Text)) |
160 self.failIf(isinstance(rset[0][0], Text)) |
161 self.assertEquals(rset[0][0], text) |
161 self.assertEquals(rset[0][0], text) |
162 |
162 |
163 def test_2_attribute_selection_transformation(self): |
163 def test_2_attribute_selection_transformation(self): |
164 rset = self.req.execute('Any X,UPPER(C) WHERE X is Blog, X content C') |
164 rset = self.req.execute('Any X,UPPER(C) WHERE X is Blog, X content C') |
165 self._check_rset_size(rset, 1, 2) |
165 self._check_rset_size(rset, 1, 2) |
166 self.assertEquals(rset[0], [self.blog.eid, u'HOP']) |
166 self.assertEquals(rset[0], [self.blog.eid, u'HOP']) |
167 self.assertEquals(rset.description[0], ('Blog', 'String',)) |
167 self.assertEquals(rset.description[0], ('Blog', 'String',)) |
232 |
232 |
233 def test_3_like(self): |
233 def test_3_like(self): |
234 repo = self.config.repository() |
234 repo = self.config.repository() |
235 versions = repo.get_versions() |
235 versions = repo.get_versions() |
236 self.assertEquals(versions.keys(), ['cubicweb']) |
236 self.assertEquals(versions.keys(), ['cubicweb']) |
237 |
237 |
238 def _setup_relation_description(self): |
238 def _setup_relation_description(self): |
239 self.article2 = self.add_entity('Article', content=u'hop') |
239 self.article2 = self.add_entity('Article', content=u'hop') |
240 self.blog2 = self.add_entity('Blog', itemtype=u'personal', content=u'hip') |
240 self.blog2 = self.add_entity('Blog', itemtype=u'personal', content=u'hip') |
241 self.execute('SET X talks_about Y WHERE X eid %(x)s, Y eid %(y)s', |
241 self.execute('SET X talks_about Y WHERE X eid %(x)s, Y eid %(y)s', |
242 {'x': self.blog2.eid, 'y': self.article2.eid}) |
242 {'x': self.blog2.eid, 'y': self.article2.eid}) |
243 self.blog3 = self.add_entity('Blog', itemtype=u'business', content=u'hep') |
243 self.blog3 = self.add_entity('Blog', itemtype=u'business', content=u'hep') |
244 self.commit() |
244 self.commit() |
245 |
245 |
246 def test_4_relation_restriction_1(self): |
246 def test_4_relation_restriction_1(self): |
247 self._setup_relation_description() |
247 self._setup_relation_description() |
248 rset = self.req.execute('Any X WHERE X talks_about Y') |
248 rset = self.req.execute('Any X WHERE X talks_about Y') |
249 self._check_rset_size(rset, 2, 1) |
249 self._check_rset_size(rset, 2, 1) |
250 self.assertUnorderedIterableEquals([r[0] for r in rset], |
250 self.assertUnorderedIterableEquals([r[0] for r in rset], |
251 [self.blog.eid, self.blog2.eid]) |
251 [self.blog.eid, self.blog2.eid]) |
252 self.assertUnorderedIterableEquals([r[0] for r in rset.description], ['Blog', 'Blog']) |
252 self.assertUnorderedIterableEquals([r[0] for r in rset.description], ['Blog', 'Blog']) |
253 |
253 |
254 def test_4_relation_restriction_2(self): |
254 def test_4_relation_restriction_2(self): |
255 self._setup_relation_description() |
255 self._setup_relation_description() |
256 rset = self.req.execute('Any Y WHERE X talks_about Y') |
256 rset = self.req.execute('Any Y WHERE X talks_about Y') |
257 self._check_rset_size(rset, 2, 1) |
257 self._check_rset_size(rset, 2, 1) |
258 self.assertUnorderedIterableEquals([r[0] for r in rset], |
258 self.assertUnorderedIterableEquals([r[0] for r in rset], |
259 [self.article.eid, self.article2.eid]) |
259 [self.article.eid, self.article2.eid]) |
260 self.assertUnorderedIterableEquals([r[0] for r in rset.description], |
260 self.assertUnorderedIterableEquals([r[0] for r in rset.description], |
261 ['Article', 'Article']) |
261 ['Article', 'Article']) |
262 |
262 |
263 def test_4_relation_restriction_3(self): |
263 def test_4_relation_restriction_3(self): |
264 self._setup_relation_description() |
264 self._setup_relation_description() |
265 rset = self.req.execute('Any X,Y WHERE X talks_about Y') |
265 rset = self.req.execute('Any X,Y WHERE X talks_about Y') |
266 self._check_rset_size(rset, 2, 2) |
266 self._check_rset_size(rset, 2, 2) |
267 self.assertUnorderedIterableEquals([tuple(r) for r in rset], |
267 self.assertUnorderedIterableEquals([tuple(r) for r in rset], |
268 [(self.blog.eid, self.article.eid), |
268 [(self.blog.eid, self.article.eid), |
269 (self.blog2.eid, self.article2.eid)]) |
269 (self.blog2.eid, self.article2.eid)]) |
270 self.assertUnorderedIterableEquals([tuple(r) for r in rset.description], |
270 self.assertUnorderedIterableEquals([tuple(r) for r in rset.description], |
271 [('Blog', 'Article'), |
271 [('Blog', 'Article'), |
272 ('Blog', 'Article')]) |
272 ('Blog', 'Article')]) |
273 |
273 |
274 def test_4_relation_restriction_4(self): |
274 def test_4_relation_restriction_4(self): |
275 self._setup_relation_description() |
275 self._setup_relation_description() |
276 rset = self.req.execute('Any X,Y WHERE X talks_about Y, X eid %(x)s', |
276 rset = self.req.execute('Any X,Y WHERE X talks_about Y, X eid %(x)s', |
277 {'x': self.blog.eid}) |
277 {'x': self.blog.eid}) |
278 self._check_rset_size(rset, 1, 2) |
278 self._check_rset_size(rset, 1, 2) |
279 self.assertEquals(rset[0], [self.blog.eid, self.article.eid]) |
279 self.assertEquals(rset[0], [self.blog.eid, self.article.eid]) |
280 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'Article']) |
280 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'Article']) |
281 |
281 |
282 def test_4_relation_restriction_5(self): |
282 def test_4_relation_restriction_5(self): |
283 self._setup_relation_description() |
283 self._setup_relation_description() |
284 rset = self.req.execute('Any X,Y WHERE X talks_about Y, Y eid %(x)s', |
284 rset = self.req.execute('Any X,Y WHERE X talks_about Y, Y eid %(x)s', |
285 {'x': self.article.eid}) |
285 {'x': self.article.eid}) |
286 self._check_rset_size(rset, 1, 2) |
286 self._check_rset_size(rset, 1, 2) |
287 self.assertEquals(rset[0], [self.blog.eid, self.article.eid]) |
287 self.assertEquals(rset[0], [self.blog.eid, self.article.eid]) |
288 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'Article']) |
288 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'Article']) |
289 |
289 |
290 def test_4_relation_subject_restriction(self): |
290 def test_4_relation_subject_restriction(self): |
291 self._setup_relation_description() |
291 self._setup_relation_description() |
292 rset = self.req.execute('Any X,Y WHERE X talks_about Y, X content %(c)s', |
292 rset = self.req.execute('Any X,Y WHERE X talks_about Y, X content %(c)s', |
293 {'c': 'hop'}) |
293 {'c': 'hop'}) |
294 self._check_rset_size(rset, 1, 2) |
294 self._check_rset_size(rset, 1, 2) |
295 self.assertEquals(rset[0], [self.blog.eid, self.article.eid]) |
295 self.assertEquals(rset[0], [self.blog.eid, self.article.eid]) |
296 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'Article']) |
296 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'Article']) |
297 |
297 |
298 def test_4_relation_object_restriction(self): |
298 def test_4_relation_object_restriction(self): |
299 self._setup_relation_description() |
299 self._setup_relation_description() |
300 rset = self.req.execute('Any X WHERE X is Blog, X talks_about Y, Y content %(c)s', |
300 rset = self.req.execute('Any X WHERE X is Blog, X talks_about Y, Y content %(c)s', |
301 {'c': 'very interesting'}) |
301 {'c': 'very interesting'}) |
302 self._check_rset_size(rset, 1, 1) |
302 self._check_rset_size(rset, 1, 1) |
303 self.assertEquals(rset[0], [self.blog.eid]) |
303 self.assertEquals(rset[0], [self.blog.eid]) |
304 self.assertUnorderedIterableEquals(rset.description[0], ['Blog']) |
304 self.assertUnorderedIterableEquals(rset.description[0], ['Blog']) |
305 |
305 |
306 def test_4_relation_subject_object_restriction(self): |
306 def test_4_relation_subject_object_restriction(self): |
307 article2 = self.add_entity('Article', content=u'very interesting') |
307 article2 = self.add_entity('Article', content=u'very interesting') |
308 rset = self.req.execute('Any X,XC WHERE X is Blog, X content XC, X content %(xc)s, ' |
308 rset = self.req.execute('Any X,XC WHERE X is Blog, X content XC, X content %(xc)s, ' |
309 'X talks_about Y, Y content %(c)s', |
309 'X talks_about Y, Y content %(c)s', |
310 {'xc': 'hop', 'c': 'very interesting'}) |
310 {'xc': 'hop', 'c': 'very interesting'}) |
311 self._check_rset_size(rset, 1, 2) |
311 self._check_rset_size(rset, 1, 2) |
312 self.assertEquals(rset[0], [self.blog.eid, self.blog.content]) |
312 self.assertEquals(rset[0], [self.blog.eid, self.blog.content]) |
313 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'String']) |
313 self.assertUnorderedIterableEquals(rset.description[0], ['Blog', 'String']) |
314 |
314 |
315 def test_4_relation_subject_object_restriction_no_res(self): |
315 def test_4_relation_subject_object_restriction_no_res(self): |
316 article2 = self.add_entity('Article', content=u'very interesting') |
316 article2 = self.add_entity('Article', content=u'very interesting') |
317 rset = self.req.execute('Any X,XC WHERE X is Blog, X content XC, X content %(xc)s, ' |
317 rset = self.req.execute('Any X,XC WHERE X is Blog, X content XC, X content %(xc)s, ' |
318 'X talks_about Y, Y content %(c)s', |
318 'X talks_about Y, Y content %(c)s', |
319 {'xc': 'hip', 'c': 'very interesting'}) |
319 {'xc': 'hip', 'c': 'very interesting'}) |
320 self.assertEquals(len(rset), 0) |
320 self.assertEquals(len(rset), 0) |
321 |
321 |
322 def test_4_relation_subject_object_restriction_no_res_2(self): |
322 def test_4_relation_subject_object_restriction_no_res_2(self): |
323 rset = self.req.execute('Any X,XC WHERE X is Blog, X content XC, X content %(xc)s, ' |
323 rset = self.req.execute('Any X,XC WHERE X is Blog, X content XC, X content %(xc)s, ' |
324 'X talks_about Y, Y content %(c)s', |
324 'X talks_about Y, Y content %(c)s', |
325 {'xc': 'hop', 'c': 'not interesting'}) |
325 {'xc': 'hop', 'c': 'not interesting'}) |
326 self.assertEquals(len(rset), 0) |
326 self.assertEquals(len(rset), 0) |
327 |
327 |
328 def test_4_relation_restriction_7(self): |
328 def test_4_relation_restriction_7(self): |
329 self._setup_relation_description() |
329 self._setup_relation_description() |
330 rset = self.req.execute('Any XC,XD,YC WHERE X talks_about Y, Y eid %(x)s,' |
330 rset = self.req.execute('Any XC,XD,YC WHERE X talks_about Y, Y eid %(x)s,' |
331 'X content XC, X diem XD, Y content YC', |
331 'X content XC, X diem XD, Y content YC', |
332 {'x': self.article.eid}) |
332 {'x': self.article.eid}) |
333 self._check_rset_size(rset, 1, 3) |
333 self._check_rset_size(rset, 1, 3) |
334 self.assertEquals(rset[0], [self.blog.content, self.blog.diem, self.article.content]) |
334 self.assertEquals(rset[0], [self.blog.content, self.blog.diem, self.article.content]) |
335 self.assertUnorderedIterableEquals(rset.description[0], ['String', 'Date', 'String']) |
335 self.assertUnorderedIterableEquals(rset.description[0], ['String', 'Date', 'String']) |
336 |
336 |
337 def test_4_relation_restriction_8(self): |
337 def test_4_relation_restriction_8(self): |
338 self._setup_relation_description() |
338 self._setup_relation_description() |
339 rset = self.req.execute('Any X,Y WHERE X cites Y, Y eid %(x)s', {'x': self.blog.eid}) |
339 rset = self.req.execute('Any X,Y WHERE X cites Y, Y eid %(x)s', {'x': self.blog.eid}) |
340 self.assertEquals(len(rset), 0) |
340 self.assertEquals(len(rset), 0) |
341 |
341 |
447 self.assertEquals(rset.rows, [[blog2.eid], [self.blog.eid]]) |
447 self.assertEquals(rset.rows, [[blog2.eid], [self.blog.eid]]) |
448 rset = self.req.execute('Any X ORDERBY ITEMTYPE_SORT_VALUE(XIT) DESC' |
448 rset = self.req.execute('Any X ORDERBY ITEMTYPE_SORT_VALUE(XIT) DESC' |
449 'WHERE X is Blog, X itemtype XIT') |
449 'WHERE X is Blog, X itemtype XIT') |
450 self._check_rset_size(rset, 2, 1) |
450 self._check_rset_size(rset, 2, 1) |
451 self.assertEquals(rset.rows, [[self.blog.eid], [blog2.eid]]) |
451 self.assertEquals(rset.rows, [[self.blog.eid], [blog2.eid]]) |
452 |
452 |
453 |
453 |
454 def test_6_limit(self): |
454 def test_6_limit(self): |
455 self._setup_relation_description() |
455 self._setup_relation_description() |
456 rset = self.req.execute('Any X LIMIT 2 WHERE X is Blog') |
456 rset = self.req.execute('Any X LIMIT 2 WHERE X is Blog') |
457 self._check_rset_size(rset, 2, 1) |
457 self._check_rset_size(rset, 2, 1) |
458 |
458 |
459 def test_6_offset(self): |
459 def test_6_offset(self): |
460 self._setup_relation_description() |
460 self._setup_relation_description() |
461 rset = self.req.execute('Any XC ORDERBY XC DESC OFFSET 1 WHERE X is Blog, X content XC') |
461 rset = self.req.execute('Any XC ORDERBY XC DESC OFFSET 1 WHERE X is Blog, X content XC') |
462 self._check_rset_size(rset, 2, 1) |
462 self._check_rset_size(rset, 2, 1) |
463 self.assertEquals(rset.rows, [['hip'], ['hep']]) |
463 self.assertEquals(rset.rows, [['hip'], ['hep']]) |
464 |
464 |
465 def test_6_limit_and_orderby(self): |
465 def test_6_limit_and_orderby(self): |
466 self._setup_relation_description() |
466 self._setup_relation_description() |
467 rset = self.req.execute('Any XC ORDERBY XC LIMIT 2 WHERE X is Blog, X content XC') |
467 rset = self.req.execute('Any XC ORDERBY XC LIMIT 2 WHERE X is Blog, X content XC') |
468 self._check_rset_size(rset, 2, 1) |
468 self._check_rset_size(rset, 2, 1) |
469 self.assertEquals(rset.rows, [['hep'], ['hip']]) |
469 self.assertEquals(rset.rows, [['hep'], ['hip']]) |
470 |
470 |
471 def test_6_limit_offset_and_orderby(self): |
471 def test_6_limit_offset_and_orderby(self): |
472 self._setup_relation_description() |
472 self._setup_relation_description() |
473 rset = self.req.execute('Any XC ORDERBY XC LIMIT 2 OFFSET 0 WHERE X is Blog, X content XC') |
473 rset = self.req.execute('Any XC ORDERBY XC LIMIT 2 OFFSET 0 WHERE X is Blog, X content XC') |
474 self._check_rset_size(rset, 2, 1) |
474 self._check_rset_size(rset, 2, 1) |
475 self.assertEquals(rset.rows, [['hep'], ['hip']]) |
475 self.assertEquals(rset.rows, [['hep'], ['hip']]) |
507 self.assertEquals(rset.rows, [[self.user.eid]]) |
507 self.assertEquals(rset.rows, [[self.user.eid]]) |
508 blog2 = self.add_entity('Blog', itemtype=u'personal', content=u'hip') |
508 blog2 = self.add_entity('Blog', itemtype=u'personal', content=u'hip') |
509 rset = self.req.execute('Any X WHERE X identity Y, X eid %(x)s, Y eid %(y)s', |
509 rset = self.req.execute('Any X WHERE X identity Y, X eid %(x)s, Y eid %(y)s', |
510 {'x': self.blog.eid, 'y': blog2.eid}) |
510 {'x': self.blog.eid, 'y': blog2.eid}) |
511 self.failIf(rset) |
511 self.failIf(rset) |
512 |
512 |
513 def test_8_not_relation_1(self): |
513 def test_8_not_relation_1(self): |
514 rset = self.req.execute('Any X WHERE X identity U, NOT U in_group G, ' |
514 rset = self.req.execute('Any X WHERE X identity U, NOT U in_group G, ' |
515 'G name "guests", X eid %(x)s, U eid %(u)s', |
515 'G name "guests", X eid %(x)s, U eid %(u)s', |
516 {'x': self.user.eid, 'u': self.user.eid}) |
516 {'x': self.user.eid, 'u': self.user.eid}) |
517 self._check_rset_size(rset, 1, 1) |
517 self._check_rset_size(rset, 1, 1) |
518 self.assertEquals(rset.rows, [[self.user.eid]]) |
518 self.assertEquals(rset.rows, [[self.user.eid]]) |
519 |
519 |
520 def test_8_not_relation_linked_subject(self): |
520 def test_8_not_relation_linked_subject(self): |
521 rset = self.req.execute('Any X WHERE NOT X talks_about Y, Y eid %(y)s', |
521 rset = self.req.execute('Any X WHERE NOT X talks_about Y, Y eid %(y)s', |
522 {'y': self.article.eid}) |
522 {'y': self.article.eid}) |
523 self.failIf(rset) |
523 self.failIf(rset) |
524 blog2 = self.add_entity('Blog', content=u'hop', itemtype=u'personal') |
524 blog2 = self.add_entity('Blog', content=u'hop', itemtype=u'personal') |
525 self.commit() |
525 self.commit() |
526 rset = self.req.execute('Any X WHERE NOT X talks_about Y, Y eid %(y)s', |
526 rset = self.req.execute('Any X WHERE NOT X talks_about Y, Y eid %(y)s', |
527 {'y': self.article.eid}) |
527 {'y': self.article.eid}) |
528 self._check_rset_size(rset, 1, 1) |
528 self._check_rset_size(rset, 1, 1) |
529 self.assertEquals(rset.rows, [[blog2.eid]]) |
529 self.assertEquals(rset.rows, [[blog2.eid]]) |
530 |
530 |
531 def test_8_not_relation_linked_object(self): |
531 def test_8_not_relation_linked_object(self): |
532 rset = self.req.execute('Any Y WHERE NOT X talks_about Y, X eid %(x)s', |
532 rset = self.req.execute('Any Y WHERE NOT X talks_about Y, X eid %(x)s', |