adding support for using set statements for counter columns if there is no previous value, reformatting
This commit is contained in:
@@ -192,6 +192,7 @@ class Column(object):
|
|||||||
def get_cql(self):
|
def get_cql(self):
|
||||||
return '"{}"'.format(self.db_field_name)
|
return '"{}"'.format(self.db_field_name)
|
||||||
|
|
||||||
|
|
||||||
class Bytes(Column):
|
class Bytes(Column):
|
||||||
db_type = 'blob'
|
db_type = 'blob'
|
||||||
|
|
||||||
@@ -200,9 +201,11 @@ class Bytes(Column):
|
|||||||
if val is None: return
|
if val is None: return
|
||||||
return val.encode('hex')
|
return val.encode('hex')
|
||||||
|
|
||||||
|
|
||||||
class Ascii(Column):
|
class Ascii(Column):
|
||||||
db_type = 'ascii'
|
db_type = 'ascii'
|
||||||
|
|
||||||
|
|
||||||
class Text(Column):
|
class Text(Column):
|
||||||
db_type = 'text'
|
db_type = 'text'
|
||||||
|
|
||||||
@@ -248,13 +251,19 @@ class Counter(Integer):
|
|||||||
|
|
||||||
def get_update_statement(self, val, prev, ctx):
|
def get_update_statement(self, val, prev, ctx):
|
||||||
val = self.to_database(val)
|
val = self.to_database(val)
|
||||||
prev = self.to_database(prev or 0)
|
prev = self.to_database(prev)
|
||||||
|
field_id = uuid4().hex
|
||||||
|
|
||||||
|
# use a set statement if there is no
|
||||||
|
# previous value to compute a delta from
|
||||||
|
if prev is None:
|
||||||
|
ctx[field_id] = val
|
||||||
|
return ['"{}" = :{}'.format(self.db_field_name, field_id)]
|
||||||
|
|
||||||
delta = val - prev
|
delta = val - prev
|
||||||
if delta == 0:
|
if delta == 0:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
field_id = uuid4().hex
|
|
||||||
sign = '+' if delta > 0 else '-'
|
sign = '+' if delta > 0 else '-'
|
||||||
delta = abs(delta)
|
delta = abs(delta)
|
||||||
ctx[field_id] = delta
|
ctx[field_id] = delta
|
||||||
@@ -334,6 +343,7 @@ class UUID(Column):
|
|||||||
|
|
||||||
from uuid import UUID as pyUUID, getnode
|
from uuid import UUID as pyUUID, getnode
|
||||||
|
|
||||||
|
|
||||||
class TimeUUID(UUID):
|
class TimeUUID(UUID):
|
||||||
"""
|
"""
|
||||||
UUID containing timestamp
|
UUID containing timestamp
|
||||||
@@ -417,6 +427,7 @@ class Float(Column):
|
|||||||
def to_database(self, value):
|
def to_database(self, value):
|
||||||
return self.validate(value)
|
return self.validate(value)
|
||||||
|
|
||||||
|
|
||||||
class Decimal(Column):
|
class Decimal(Column):
|
||||||
db_type = 'decimal'
|
db_type = 'decimal'
|
||||||
|
|
||||||
@@ -476,6 +487,7 @@ class BaseContainerColumn(Column):
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class Set(BaseContainerColumn):
|
class Set(BaseContainerColumn):
|
||||||
"""
|
"""
|
||||||
Stores a set of unordered, unique values
|
Stores a set of unordered, unique values
|
||||||
@@ -565,6 +577,7 @@ class Set(BaseContainerColumn):
|
|||||||
|
|
||||||
return statements
|
return statements
|
||||||
|
|
||||||
|
|
||||||
class List(BaseContainerColumn):
|
class List(BaseContainerColumn):
|
||||||
"""
|
"""
|
||||||
Stores a list of ordered values
|
Stores a list of ordered values
|
||||||
@@ -789,6 +802,7 @@ class Map(BaseContainerColumn):
|
|||||||
|
|
||||||
return del_statements
|
return del_statements
|
||||||
|
|
||||||
|
|
||||||
class _PartitionKeysToken(Column):
|
class _PartitionKeysToken(Column):
|
||||||
"""
|
"""
|
||||||
virtual column representing token of partition columns.
|
virtual column representing token of partition columns.
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ class JsonTestColumn(columns.Column):
|
|||||||
if value is None: return
|
if value is None: return
|
||||||
return json.dumps(value)
|
return json.dumps(value)
|
||||||
|
|
||||||
|
|
||||||
class TestSetColumn(BaseCassEngTestCase):
|
class TestSetColumn(BaseCassEngTestCase):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super(TestSetColumn, cls).setUpClass()
|
super(TestSetColumn, cls).setUpClass()
|
||||||
@@ -40,7 +42,6 @@ class TestSetColumn(BaseCassEngTestCase):
|
|||||||
super(TestSetColumn, cls).tearDownClass()
|
super(TestSetColumn, cls).tearDownClass()
|
||||||
delete_table(TestSetModel)
|
delete_table(TestSetModel)
|
||||||
|
|
||||||
|
|
||||||
def test_empty_set_initial(self):
|
def test_empty_set_initial(self):
|
||||||
"""
|
"""
|
||||||
tests that sets are set() by default, should never be none
|
tests that sets are set() by default, should never be none
|
||||||
|
|||||||
Reference in New Issue
Block a user