comparison test/db_test_base.py @ 4850:6998ad77841e

Fix bug in SQL generation Fix subtle bug when sorting by a Link that contains a Multilink from which we also search for an attribute. In that case the LEFT OUTER JOIN clause was missing in generated SQL.
author Ralf Schlatterbeck <rsc@runtux.com>
date Wed, 18 Dec 2013 09:02:40 +0100
parents e68920390aad
children 74b24b14071a
comparison
equal deleted inserted replaced
4849:e68920390aad 4850:6998ad77841e
71 init.write_select_db(dirname, backend) 71 init.write_select_db(dirname, backend)
72 tracker.init(password.Password('sekrit')) 72 tracker.init(password.Password('sekrit'))
73 return tracker 73 return tracker
74 74
75 def setupSchema(db, create, module): 75 def setupSchema(db, create, module):
76 status = module.Class(db, "status", name=String()) 76 mls = module.Class(db, "mls", name=String())
77 mls.setkey("name")
78 status = module.Class(db, "status", name=String(), mls=Multilink("mls"))
77 status.setkey("name") 79 status.setkey("name")
78 priority = module.Class(db, "priority", name=String(), order=String()) 80 priority = module.Class(db, "priority", name=String(), order=String())
79 priority.setkey("name") 81 priority.setkey("name")
80 user = module.Class(db, "user", username=String(), password=Password(), 82 user = module.Class(db, "user", username=String(), password=Password(),
81 assignable=Boolean(), age=Number(), roles=String(), address=String(), 83 assignable=Boolean(), age=Number(), roles=String(), address=String(),
102 if create: 104 if create:
103 user.create(username="admin", roles='Admin', 105 user.create(username="admin", roles='Admin',
104 password=password.Password('sekrit')) 106 password=password.Password('sekrit'))
105 user.create(username="fred", roles='User', 107 user.create(username="fred", roles='User',
106 password=password.Password('sekrit'), address='fred@example.com') 108 password=password.Password('sekrit'), address='fred@example.com')
107 status.create(name="unread") 109 u1 = mls.create(name="unread_1")
110 u2 = mls.create(name="unread_2")
111 status.create(name="unread",mls=[u1, u2])
108 status.create(name="in-progress") 112 status.create(name="in-progress")
109 status.create(name="testing") 113 status.create(name="testing")
110 status.create(name="resolved") 114 status.create(name="resolved")
111 priority.create(name="feature", order="2") 115 priority.create(name="feature", order="2")
112 priority.create(name="wish", order="3") 116 priority.create(name="wish", order="3")
1277 ae(filt(None, {a: '-1'}, ('+','id'), grp), ['3','4']) 1281 ae(filt(None, {a: '-1'}, ('+','id'), grp), ['3','4'])
1278 ae(filt(None, {a: None}, ('+','id'), grp), ['3','4']) 1282 ae(filt(None, {a: None}, ('+','id'), grp), ['3','4'])
1279 ae(filt(None, {a: [None]}, ('+','id'), grp), ['3','4']) 1283 ae(filt(None, {a: [None]}, ('+','id'), grp), ['3','4'])
1280 ae(filt(None, {a: ['-1', None]}, ('+','id'), grp), ['3','4']) 1284 ae(filt(None, {a: ['-1', None]}, ('+','id'), grp), ['3','4'])
1281 ae(filt(None, {a: ['1', None]}, ('+','id'), grp), ['1', '3','4']) 1285 ae(filt(None, {a: ['1', None]}, ('+','id'), grp), ['1', '3','4'])
1286
1287 def testFilteringLinkSortSearchMultilink(self):
1288 ae, filter, filter_iter = self.filteringSetup()
1289 a = 'assignedto'
1290 grp = (None, None)
1291 for filt in filter, filter_iter:
1292 ae(filt(None, {'status.mls': '1'}, ('+','status')), ['2','3'])
1293 ae(filt(None, {'status.mls': '2'}, ('+','status')), ['2','3'])
1282 1294
1283 def testFilteringMultilinkAndGroup(self): 1295 def testFilteringMultilinkAndGroup(self):
1284 """testFilteringMultilinkAndGroup: 1296 """testFilteringMultilinkAndGroup:
1285 See roundup Bug 1541128: apparently grouping by something and 1297 See roundup Bug 1541128: apparently grouping by something and
1286 searching a Multilink failed with MySQL 5.0 1298 searching a Multilink failed with MySQL 5.0

Roundup Issue Tracker: http://roundup-tracker.org/