diff roundup/backends/back_mysql.py @ 6179:a701c9c81597

Fix rev_multilink properties search/retrieval The code now only returns live (non-retired) items. Since for reverse multilinks the Link/Multilink property in the retired item cannot be changed, we now only return non-retired items in search (filter) and retrieve (get).
author Ralf Schlatterbeck <rsc@runtux.com>
date Tue, 19 May 2020 09:25:48 +0200
parents 546763f4ce44
children 75a53956cf13
line wrap: on
line diff
--- a/roundup/backends/back_mysql.py	Tue May 19 01:14:48 2020 -0400
+++ b/roundup/backends/back_mysql.py	Tue May 19 09:25:48 2020 +0200
@@ -606,11 +606,24 @@
         # TODO: AFAIK its version dependent for MySQL
         return False
 
-    def _subselect(self, classname, multilink_table, nodeid_name):
+    def _subselect(self, proptree):
         ''' "I can't believe it's not a toy RDBMS"
            see, even toy RDBMSes like gadfly and sqlite can do sub-selects...
         '''
-        self.db.sql('select %s from %s'%(nodeid_name, multilink_table))
+        classname       = proptree.parent.classname
+        multilink_table = proptree.propclass.table_name
+        nodeid_name     = proptree.propclass.nodeid_name
+        linkid_name     = proptree.propclass.linkid_name
+
+        w = ''
+        if proptree.need_retired:
+            w = ' where %s.__retired__=0'%(multilink_table)
+        if proptree.need_child_retired:
+            tn1 = multilink_table
+            tn2 = '_' + proptree.classname
+            w = ', %s where %s.%s=%s.id and %s.__retired__=0'%(tn2, tn1,
+                linkid_name, tn2, tn2)
+        self.db.sql('select %s from %s%s'%(nodeid_name, multilink_table, w))
         s = ','.join([str(x[0]) for x in self.db.sql_fetchall()])
         return '_%s.id not in (%s)'%(classname, s)
 

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