Unique indexes are created before user declared indexes
This ensures that indexes are created with the unique flag, if a user declares the index, that would automatically be declared by the `unique_indexes` logic. Thanks to btubbs for the test case. Fixes #129
This commit is contained in:
parent
5d5a84dbcf
commit
fc2aff342b
@ -459,17 +459,17 @@ class QuerySet(object):
|
|||||||
drop_dups = self._document._meta.get('index_drop_dups', False)
|
drop_dups = self._document._meta.get('index_drop_dups', False)
|
||||||
index_opts = self._document._meta.get('index_options', {})
|
index_opts = self._document._meta.get('index_options', {})
|
||||||
|
|
||||||
|
# Ensure indexes created by uniqueness constraints
|
||||||
|
for index in self._document._meta['unique_indexes']:
|
||||||
|
self._collection.ensure_index(index, unique=True,
|
||||||
|
background=background, drop_dups=drop_dups, **index_opts)
|
||||||
|
|
||||||
# Ensure document-defined indexes are created
|
# Ensure document-defined indexes are created
|
||||||
if self._document._meta['indexes']:
|
if self._document._meta['indexes']:
|
||||||
for key_or_list in self._document._meta['indexes']:
|
for key_or_list in self._document._meta['indexes']:
|
||||||
self._collection.ensure_index(key_or_list,
|
self._collection.ensure_index(key_or_list,
|
||||||
background=background, **index_opts)
|
background=background, **index_opts)
|
||||||
|
|
||||||
# Ensure indexes created by uniqueness constraints
|
|
||||||
for index in self._document._meta['unique_indexes']:
|
|
||||||
self._collection.ensure_index(index, unique=True,
|
|
||||||
background=background, drop_dups=drop_dups, **index_opts)
|
|
||||||
|
|
||||||
# If _types is being used (for polymorphism), it needs an index
|
# If _types is being used (for polymorphism), it needs an index
|
||||||
if '_types' in self._query:
|
if '_types' in self._query:
|
||||||
self._collection.ensure_index('_types',
|
self._collection.ensure_index('_types',
|
||||||
|
@ -357,6 +357,29 @@ class DocumentTest(unittest.TestCase):
|
|||||||
|
|
||||||
BlogPost.drop_collection()
|
BlogPost.drop_collection()
|
||||||
|
|
||||||
|
def test_unique_and_indexes(self):
|
||||||
|
"""Ensure that 'unique' constraints aren't overridden by
|
||||||
|
meta.indexes.
|
||||||
|
"""
|
||||||
|
class Customer(Document):
|
||||||
|
cust_id = IntField(unique=True, required=True)
|
||||||
|
meta = {
|
||||||
|
'indexes': ['cust_id'],
|
||||||
|
'allow_inheritance': False,
|
||||||
|
}
|
||||||
|
|
||||||
|
Customer.drop_collection()
|
||||||
|
cust = Customer(cust_id=1)
|
||||||
|
cust.save()
|
||||||
|
|
||||||
|
cust_dupe = Customer(cust_id=1)
|
||||||
|
try:
|
||||||
|
cust_dupe.save()
|
||||||
|
raise AssertionError, "We saved a dupe!"
|
||||||
|
except OperationError:
|
||||||
|
pass
|
||||||
|
Customer.drop_collection()
|
||||||
|
|
||||||
def test_custom_id_field(self):
|
def test_custom_id_field(self):
|
||||||
"""Ensure that documents may be created with custom primary keys.
|
"""Ensure that documents may be created with custom primary keys.
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user