Mercurial > p > roundup > code
diff roundup/backends/rdbms_common.py @ 6402:619807d9a2df
Make rev multilink for Link work
Fix searching of retired items.
Fix implementation for anydbm.
| author | Ralf Schlatterbeck <rsc@runtux.com> |
|---|---|
| date | Sat, 08 May 2021 18:13:20 +0200 |
| parents | 8bc5faeb7677 |
| children | 9957d8d10783 |
line wrap: on
line diff
--- a/roundup/backends/rdbms_common.py Sat May 08 12:52:35 2021 +0200 +++ b/roundup/backends/rdbms_common.py Sat May 08 18:13:20 2021 +0200 @@ -2419,11 +2419,20 @@ # would be nice but this tricky: Think about the cases # where the multilink table does not have join values # needed in evaluation. - - stmnt = "SELECT c.id, m.%s FROM _%s c " \ - "LEFT OUTER JOIN %s m " \ - "ON c.id = m.%s ORDER BY c.id" % ( - lid, classname, multilink_table, nid) + w = j = '' + s = 'm.%s' % lid + if proptree.need_retired: + w = ' and m.__retired__=0' + elif proptree.need_child_retired: + tn2 = '_' + proptree.classname + j = ' LEFT OUTER JOIN %s ON %s.id = m.%s' % (tn2, tn2, lid) + w = ' and %s.__retired__=0'%(tn2) + s = '%s.id' % tn2 + + stmnt = "SELECT c.id, %s FROM _%s as c " \ + "LEFT OUTER JOIN %s as m " \ + "ON c.id = m.%s%s%s ORDER BY c.id" % ( + s, classname, multilink_table, nid, j, w) self.db.sql(stmnt) # collect all multilink items for a class item @@ -2467,9 +2476,18 @@ return self._filter_multilink_expression_fallback( proptree, expr) + w = j = '' + if proptree.need_retired: + w = ' and %s.__retired__=0'%(multilink_table) + elif proptree.need_child_retired: + tn1 = multilink_table + tn2 = '_' + proptree.classname + j = ', %s' % tn2 + w = ' and %s.%s=%s.id and %s.__retired__=0'%(tn1, lid, tn2, tn2) + atom = \ - "%s IN(SELECT %s FROM %s WHERE %s=a.id)" % ( - self.db.arg, lid, multilink_table, nid) + "%s IN(SELECT %s FROM %s%s WHERE %s=a.id%s)" % ( + self.db.arg, lid, multilink_table, j, nid, w) atom_nil = self._subselect(proptree, 'a') lambda_atom = lambda n: atom if n.x >= 0 else atom_nil
