def preOptimize(self, free_vertexes, minset_map, minset, minset_num): _node = self.node_list[0] if _node.parent is None: minset_map[self] = 0 minset[0] = [self] else: prev = self.getPrevNoneSPOp() if isinstance(_node, node.SPNode): if isinstance(_node.child, node.TableNode): minset_map[self] = minset_map[prev] minset[minset_map[prev]].append(self) return self.child_list[0].preOptimize(free_vertexes, minset_map, minset, minset_num) return if Rule.__pk_compare__(self.pk_list, prev.pk_list): if isinstance(_node.parent, node.SPNode): minset_map[self.parent] = minset_map[prev] minset[minset_map[self.parent]].append(self.parent) minset_map[self] = minset_map[prev] minset[minset_map[prev]].append(self) else: if isinstance(_node.parent, node.SPNode): self.parent.is_free_vertex = True free_vertexes.append(self.parent) minset_num = minset_num + 1 minset_map[self] = minset_num minset[minset_num].append(self) for child in self.child_list: child.preOptimize(free_vertexes, minset_map, minset, minset_num)