minor improvement of HashDB

This commit is contained in:
Miroslav Stampar 2011-10-10 14:23:17 +00:00
parent 323aa7bf2f
commit 47b27a5988

View File

@ -21,7 +21,7 @@ class HashDB(object):
threadData = getCurrentThreadData() threadData = getCurrentThreadData()
if threadData.hashDBCursor is None: if threadData.hashDBCursor is None:
connection = sqlite3.connect(self.filepath, isolation_level=None) connection = sqlite3.connect(self.filepath, timeout=3, isolation_level=None)
threadData.hashDBCursor = connection.cursor() threadData.hashDBCursor = connection.cursor()
threadData.hashDBCursor.execute("CREATE TABLE IF NOT EXISTS storage (id INTEGER PRIMARY KEY, value TEXT)") threadData.hashDBCursor.execute("CREATE TABLE IF NOT EXISTS storage (id INTEGER PRIMARY KEY, value TEXT)")
@ -34,7 +34,6 @@ class HashDB(object):
def close(self): def close(self):
try: try:
self.endTransaction()
self.cursor.connection.close() self.cursor.connection.close()
except: except:
pass pass
@ -48,14 +47,28 @@ class HashDB(object):
retVal = None retVal = None
if key: if key:
hash_ = self.hashKey(key) hash_ = self.hashKey(key)
for row in self.cursor.execute("SELECT value FROM storage WHERE id=?", (hash_,)): while True:
retVal = row[0] try:
for row in self.cursor.execute("SELECT value FROM storage WHERE id=?", (hash_,)):
retVal = row[0]
except sqlite3.OperationalError, ex:
if not 'locked' in ex.message:
raise
else:
break
return retVal return retVal
def write(self, key, value): def write(self, key, value):
if key: if key:
hash_ = self.hashKey(key) hash_ = self.hashKey(key)
try: while True:
self.cursor.execute("INSERT INTO storage VALUES (?, ?)", (hash_, value,)) try:
except sqlite3.IntegrityError: try:
self.cursor.execute("UPDATE storage SET value=? WHERE id=?", (value, hash_,)) self.cursor.execute("INSERT INTO storage VALUES (?, ?)", (hash_, value,))
except sqlite3.IntegrityError:
self.cursor.execute("UPDATE storage SET value=? WHERE id=?", (value, hash_,))
except sqlite3.OperationalError, ex:
if not 'locked' in ex.message:
raise
else:
break