When hash/range key overlap, fix query logic.
This commit is contained in:
parent
4e9f4bfbbf
commit
aacdde7adc
@ -212,18 +212,22 @@ class Table(object):
|
|||||||
def hash_key_names(self):
|
def hash_key_names(self):
|
||||||
keys = [self.hash_key_attr]
|
keys = [self.hash_key_attr]
|
||||||
for index in self.global_indexes:
|
for index in self.global_indexes:
|
||||||
|
hash_key = None
|
||||||
for key in index['KeySchema']:
|
for key in index['KeySchema']:
|
||||||
if key['KeyType'] == 'HASH':
|
if key['KeyType'] == 'HASH':
|
||||||
keys.append(key['AttributeName'])
|
hash_key = key['AttributeName']
|
||||||
|
keys.append(hash_key)
|
||||||
return keys
|
return keys
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def range_key_names(self):
|
def range_key_names(self):
|
||||||
keys = [self.range_key_attr]
|
keys = [self.range_key_attr]
|
||||||
for index in self.global_indexes:
|
for index in self.global_indexes:
|
||||||
|
range_key = None
|
||||||
for key in index['KeySchema']:
|
for key in index['KeySchema']:
|
||||||
if key['KeyType'] == 'RANGE':
|
if key['KeyType'] == 'RANGE':
|
||||||
keys.append(key['AttributeName'])
|
range_key = keys.append(key['AttributeName'])
|
||||||
|
keys.append(range_key)
|
||||||
return keys
|
return keys
|
||||||
|
|
||||||
def put_item(self, item_attrs, expected=None, overwrite=False):
|
def put_item(self, item_attrs, expected=None, overwrite=False):
|
||||||
@ -475,13 +479,15 @@ class DynamoDBBackend(BaseBackend):
|
|||||||
if not table:
|
if not table:
|
||||||
return None, None
|
return None, None
|
||||||
else:
|
else:
|
||||||
hash_key = range_key = None
|
if len(keys) == 1:
|
||||||
for key in keys:
|
for key in keys:
|
||||||
if key in table.hash_key_names:
|
if key in table.hash_key_names:
|
||||||
hash_key = key
|
return key, None
|
||||||
elif key in table.range_key_names:
|
|
||||||
range_key = key
|
for potential_hash, potential_range in zip(table.hash_key_names, table.range_key_names):
|
||||||
return hash_key, range_key
|
if set([potential_hash, potential_range]) == set(keys):
|
||||||
|
return potential_hash, potential_range
|
||||||
|
return None, None
|
||||||
|
|
||||||
def get_keys_value(self, table, keys):
|
def get_keys_value(self, table, keys):
|
||||||
if table.hash_key_attr not in keys or (table.has_range_key and table.range_key_attr not in keys):
|
if table.hash_key_attr not in keys or (table.has_range_key and table.range_key_attr not in keys):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user