From 868fe296fba60413135a8954feb3ece5e1afca6e Mon Sep 17 00:00:00 2001 From: Lee Miller Date: Wed, 11 Sep 2024 02:35:09 +0300 Subject: [PATCH] Set a row factory instead of nesting the iterator, iterate through the cursor --- minode/sql.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/minode/sql.py b/minode/sql.py index edaa587..68e6650 100644 --- a/minode/sql.py +++ b/minode/sql.py @@ -40,14 +40,16 @@ class Inventory(): cur.execute("INSERT INTO status VALUES ('lastvacuumtime', ?)", (now,)) self._db.commit() + @staticmethod + def __object(cursor, row): + vector, expires, obj_type, version, stream, tag, data, offset = row + return structure.Object( + expires, obj_type, version, stream, data, offset, + tag=tag, vector=vector) + def __objects(self, cur): - return ( - structure.Object( - expires, obj_type, version, stream, data, offset, - tag=tag, vector=vector) - for (vector, expires, obj_type, version, stream, tag, data, offset) - in cur.fetchall() - ) + cur.row_factory = self.__object + return cur def cleanup(self): with shared.objects_lock: @@ -79,7 +81,7 @@ class Inventory(): ' ORDER BY random()', (int(time.time()), stream or shared.stream) ) - return [v for v, in cur.fetchall()] + return [v for v, in cur] def get(self, vector, default=None): try: @@ -89,7 +91,7 @@ class Inventory(): def keys(self): cur = self._db.execute('SELECT vector FROM objects') - return (v for v, in cur.fetchall()) + return (v for v, in cur) def values(self): cur = self._db.execute('SELECT * FROM objects') @@ -113,14 +115,11 @@ class Inventory(): def __getitem__(self, vector): cur = self._db.execute( 'SELECT * FROM objects WHERE vector = ?', (vector,)) + cur.row_factory = self.__object item = cur.fetchone() if item is None: raise KeyError(vector) - vector, expires, obj_type, version, stream, tag, data, offset = item - return structure.Object( - expires, obj_type, version, stream, data, offset, - tag=tag, vector=vector - ) + return item def __delitem__(self, vector): with shared.objects_lock: # KeyError