Skip to content

Commit 12da456

Browse files
committed
fixup! [ADD] pg.query_ids: query large numbers of ids memory-safely
1 parent ffc872a commit 12da456

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/util/pg.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,7 +1934,7 @@ def bulk_update_table(cr, table, columns, mapping, key_col="id"):
19341934
cr.execute(query, [Json(mapping)])
19351935

19361936

1937-
class query_ids(named_cursor):
1937+
class query_ids(object):
19381938
def __init__(self, cr, query, itersize=None):
19391939
self._cr = cr
19401940
self._tmp_tbl = "_upgrade_query_ids_{}".format(uuid.uuid4().hex)
@@ -1952,21 +1952,24 @@ def __init__(self, cr, query, itersize=None):
19521952
cr, "ALTER TABLE {} ADD CONSTRAINT {} PRIMARY KEY (id)", self._tmp_tbl, "pk_{}_id".format(self._tmp_tbl)
19531953
)
19541954
)
1955-
super(query_ids, self).__init__(cr, itersize)
1956-
self.execute(format_query(cr, "SELECT id FROM {} ORDER BY id", self._tmp_tbl))
1955+
self._ncr = named_cursor(cr, itersize)
1956+
self._ncr.execute(format_query(cr, "SELECT id FROM {} ORDER BY id", self._tmp_tbl))
19571957

19581958
def __len__(self):
19591959
return self._len
19601960

19611961
def __iter__(self):
1962-
return (id_ for (id_,) in super(query_ids, self).__iter__())
1962+
return (id_ for (id_,) in self._ncr)
1963+
1964+
def __enter__(self):
1965+
return self
19631966

19641967
def __exit__(self, exc_type, exc_value, traceback):
19651968
self._cr.execute(format_query(self._cr, "DROP TABLE IF EXISTS {}", self._tmp_tbl))
19661969
self._cr = None
1967-
return super(query_ids, self).__exit__(exc_type, exc_value, traceback)
1970+
return self._ncr.__exit__(exc_type, exc_value, traceback)
19681971

19691972
def __del__(self):
19701973
if self._cr:
19711974
self._cr.execute(format_query(self._cr, "DROP TABLE IF EXISTS {}", self._tmp_tbl))
1972-
return super(query_ids, self).__del__()
1975+
return self._ncr.__del__()

0 commit comments

Comments
 (0)