mirror of
https://github.com/django/django.git
synced 2025-03-03 05:24:24 +00:00
Fixed a regression introduced in where.as_sql() refactor
At least Oracle needs parentheses in negated where conditions, even if there is only single condition negated. Fixed this by reverting to old logic in that part of as_sql() and adding a comment about this. I did not investigate why the parentheses are needed. The original offending commit was bd283aa844b04651b7c8b4e85f48c6dced1678f0.
This commit is contained in:
parent
f572ee0c65
commit
e74787391e
@ -135,10 +135,13 @@ class WhereNode(tree.Node):
|
||||
conn = ' %s ' % self.connector
|
||||
sql_string = conn.join(result)
|
||||
if sql_string:
|
||||
if len(result) > 1:
|
||||
sql_string = '(%s)' % sql_string
|
||||
if self.negated:
|
||||
sql_string = 'NOT %s' % sql_string
|
||||
# Note that some backends (Oracle at least) need the
|
||||
# parentheses even around single experssion in the
|
||||
# negated case.
|
||||
sql_string = 'NOT (%s)' % sql_string
|
||||
elif len(result) > 1:
|
||||
sql_string = '(%s)' % sql_string
|
||||
return sql_string, result_params
|
||||
|
||||
def make_atom(self, child, qn, connection):
|
||||
|
@ -2091,7 +2091,7 @@ class WhereNodeTest(TestCase):
|
||||
w = WhereNode(children=[NothingNode(), self.DummyNode()], connector='OR')
|
||||
self.assertEquals(w.as_sql(qn, connection), ('dummy', []))
|
||||
w.negate()
|
||||
self.assertEquals(w.as_sql(qn, connection), ('NOT dummy', []))
|
||||
self.assertEquals(w.as_sql(qn, connection), ('NOT (dummy)', []))
|
||||
|
||||
def test_empty_nodes(self):
|
||||
qn = connection.ops.quote_name
|
||||
|
Loading…
x
Reference in New Issue
Block a user