switching from the prepared statements to parameterized statements
This commit is contained in:
@@ -9,7 +9,7 @@ class QueryValue(object):
|
||||
be passed into .filter() keyword args
|
||||
"""
|
||||
|
||||
format_string = ':{}'
|
||||
format_string = '%({})s'
|
||||
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
@@ -101,7 +101,7 @@ class WhereClause(BaseClause):
|
||||
|
||||
def __unicode__(self):
|
||||
field = ('"{}"' if self.quote_field else '{}').format(self.field)
|
||||
return u'{} {} ?'.format(field, self.operator)
|
||||
return u'{} {} {}'.format(field, self.operator, unicode(self.query_value))
|
||||
|
||||
def __hash__(self):
|
||||
return super(WhereClause, self).__hash__() ^ hash(self.operator)
|
||||
@@ -129,7 +129,7 @@ class AssignmentClause(BaseClause):
|
||||
""" a single variable st statement """
|
||||
|
||||
def __unicode__(self):
|
||||
return u'"{}" = ?'.format(self.field)
|
||||
return u'"{}" = %({})s'.format(self.field, self.context_id)
|
||||
|
||||
def insert_tuple(self):
|
||||
return self.field, self.context_id
|
||||
@@ -170,15 +170,15 @@ class SetUpdateClause(ContainerUpdateClause):
|
||||
qs = []
|
||||
ctx_id = self.context_id
|
||||
if self.previous is None and not (self._assignments or self._additions or self._removals):
|
||||
qs += ['"{}" = ?'.format(self.field)]
|
||||
qs += ['"{}" = %({})s'.format(self.field, ctx_id)]
|
||||
if self._assignments:
|
||||
qs += ['"{}" = ?'.format(self.field)]
|
||||
qs += ['"{}" = %({})s'.format(self.field, ctx_id)]
|
||||
ctx_id += 1
|
||||
if self._additions:
|
||||
qs += ['"{0}" = "{0}" + ?'.format(self.field)]
|
||||
qs += ['"{0}" = "{0}" + %({1})s'.format(self.field, ctx_id)]
|
||||
ctx_id += 1
|
||||
if self._removals:
|
||||
qs += ['"{0}" = "{0}" - ?'.format(self.field)]
|
||||
qs += ['"{0}" = "{0}" - %({1})s'.format(self.field, ctx_id)]
|
||||
|
||||
return ', '.join(qs)
|
||||
|
||||
@@ -232,15 +232,15 @@ class ListUpdateClause(ContainerUpdateClause):
|
||||
qs = []
|
||||
ctx_id = self.context_id
|
||||
if self._assignments is not None:
|
||||
qs += ['"{}" = ?'.format(self.field)]
|
||||
qs += ['"{}" = %({})s'.format(self.field, ctx_id)]
|
||||
ctx_id += 1
|
||||
|
||||
if self._prepend:
|
||||
qs += ['"{0}" = ? + "{0}"'.format(self.field)]
|
||||
qs += ['"{0}" = %({1})s + "{0}"'.format(self.field, ctx_id)]
|
||||
ctx_id += 1
|
||||
|
||||
if self._append:
|
||||
qs += ['"{0}" = "{0}" + ?'.format(self.field)]
|
||||
qs += ['"{0}" = "{0}" + %({})s'.format(self.field, ctx_id)]
|
||||
|
||||
return ', '.join(qs)
|
||||
|
||||
@@ -356,10 +356,10 @@ class MapUpdateClause(ContainerUpdateClause):
|
||||
|
||||
ctx_id = self.context_id
|
||||
if self.previous is None and not self._updates:
|
||||
qs += ['"int_map" = ?']
|
||||
qs += ['"int_map" = %({})s']
|
||||
else:
|
||||
for _ in self._updates or []:
|
||||
qs += ['"{}"[?] = ?'.format(self.field)]
|
||||
qs += ['"{}"[%({})s] = %({})s'.format(self.field, ctx_id, ctx_id + 1)]
|
||||
ctx_id += 2
|
||||
|
||||
return ', '.join(qs)
|
||||
@@ -380,7 +380,7 @@ class CounterUpdateClause(ContainerUpdateClause):
|
||||
def __unicode__(self):
|
||||
delta = self.value - self.previous
|
||||
sign = '-' if delta < 0 else '+'
|
||||
return '"{0}" = "{0}" {1} ?'.format(self.field, sign)
|
||||
return '"{0}" = "{0}" {1} %({})s'.format(self.field, sign, self.context_id)
|
||||
|
||||
|
||||
class BaseDeleteClause(BaseClause):
|
||||
@@ -428,7 +428,7 @@ class MapDeleteClause(BaseDeleteClause):
|
||||
|
||||
def __unicode__(self):
|
||||
if not self._analyzed: self._analyze()
|
||||
return ', '.join(['"{}"[?]'.format(self.field) for i in range(len(self._removals))])
|
||||
return ', '.join(['"{}"[%({})s]'.format(self.field) for i in range(len(self._removals))])
|
||||
|
||||
|
||||
class BaseCQLStatement(object):
|
||||
|
@@ -11,6 +11,6 @@ class BaseClauseTests(TestCase):
|
||||
ctx = []
|
||||
ss.set_context_id(10)
|
||||
ss.update_context(ctx)
|
||||
assert ctx == ['10': 'b']
|
||||
assert ctx == {'10': 'b'}
|
||||
|
||||
|
||||
|
@@ -16,7 +16,7 @@ class UpdateStatementTests(TestCase):
|
||||
us.add_assignment_clause(AssignmentClause('a', 'b'))
|
||||
us.add_assignment_clause(AssignmentClause('c', 'd'))
|
||||
us.add_where_clause(WhereClause('a', EqualsOperator(), 'x'))
|
||||
self.assertEqual(unicode(us), 'UPDATE table SET "a" = ?, "c" = ? WHERE "a" = ?', unicode(us))
|
||||
self.assertEqual(unicode(us), 'UPDATE table SET "a" = %(0)s, "c" = %(1)s WHERE "a" = %(2)s', unicode(us))
|
||||
|
||||
def test_context(self):
|
||||
us = UpdateStatement('table')
|
||||
|
@@ -14,8 +14,9 @@ class TestWhereClause(TestCase):
|
||||
""" tests that where clauses are rendered properly """
|
||||
wc = WhereClause('a', EqualsOperator(), 'c')
|
||||
wc.set_context_id(5)
|
||||
self.assertEqual('"a" = ?', unicode(wc))
|
||||
self.assertEqual('"a" = ?', str(wc))
|
||||
|
||||
self.assertEqual('"a" = %(5)s', unicode(wc), unicode(wc))
|
||||
self.assertEqual('"a" = %(5)s', str(wc), type(wc))
|
||||
|
||||
def test_equality_method(self):
|
||||
""" tests that 2 identical where clauses evaluate as == """
|
||||
|
Reference in New Issue
Block a user