From 61b33d9d4f3c1e05bb8e11efac2c9960a2e4a0d0 Mon Sep 17 00:00:00 2001 From: Friedrich Lindenberg Date: Thu, 11 Jun 2015 11:54:04 +0200 Subject: [PATCH] Use sha1 to generate index IDs. --- dataset/persistence/table.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dataset/persistence/table.py b/dataset/persistence/table.py index ff8f631..4088fec 100644 --- a/dataset/persistence/table.py +++ b/dataset/persistence/table.py @@ -1,5 +1,6 @@ import logging from itertools import count +from hashlib import sha1 from sqlalchemy.sql import and_, expression from sqlalchemy.schema import Column, Index @@ -272,8 +273,18 @@ class Table(object): """ self._check_dropped() if not name: - sig = abs(hash('||'.join(columns))) - name = 'ix_%s_%s' % (self.table.name, sig) + sig = '||'.join(columns) + + # This is a work-around for a bug in <=0.6.1 which would create + # indexes based on hash() rather than a proper hash. + key = abs(hash(sig)) + name = 'ix_%s_%s' % (self.table.name, key) + if name in self.indexes: + return self.indexes[name] + + key = sha1(sig.encode('utf-8')).hexdigest()[:16] + name = 'ix_%s_%s' % (self.table.name, key) + if name in self.indexes: return self.indexes[name] try: