summaryrefslogtreecommitdiff
path: root/django/db/models/sql/where.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql/where.py')
-rw-r--r--django/db/models/sql/where.py27
1 files changed, 18 insertions, 9 deletions
diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py
index 44a4ce9d1d..be0c559c1b 100644
--- a/django/db/models/sql/where.py
+++ b/django/db/models/sql/where.py
@@ -5,6 +5,7 @@ Code to manage the creation and SQL rendering of 'where' constraints.
import collections
import datetime
from itertools import repeat
+import warnings
from django.conf import settings
from django.db.models.fields import DateTimeField, Field
@@ -101,7 +102,7 @@ class WhereNode(tree.Node):
for child in self.children:
try:
if hasattr(child, 'as_sql'):
- sql, params = child.as_sql(qn=qn, connection=connection)
+ sql, params = qn.compile(child)
else:
# A leaf node in the tree.
sql, params = self.make_atom(child, qn, connection)
@@ -152,16 +153,16 @@ class WhereNode(tree.Node):
sql_string = '(%s)' % sql_string
return sql_string, result_params
- def get_cols(self):
+ def get_group_by_cols(self):
cols = []
for child in self.children:
- if hasattr(child, 'get_cols'):
- cols.extend(child.get_cols())
+ if hasattr(child, 'get_group_by_cols'):
+ cols.extend(child.get_group_by_cols())
else:
if isinstance(child[0], Constraint):
cols.append((child[0].alias, child[0].col))
- if hasattr(child[3], 'get_cols'):
- cols.extend(child[3].get_cols())
+ if hasattr(child[3], 'get_group_by_cols'):
+ cols.extend(child[3].get_group_by_cols())
return cols
def make_atom(self, child, qn, connection):
@@ -174,6 +175,9 @@ class WhereNode(tree.Node):
Returns the string for the SQL fragment and the parameters to use for
it.
"""
+ warnings.warn(
+ "The make_atom() method will be removed in Django 1.9. Use Lookup class instead.",
+ PendingDeprecationWarning)
lvalue, lookup_type, value_annotation, params_or_value = child
field_internal_type = lvalue.field.get_internal_type() if lvalue.field else None
@@ -193,13 +197,13 @@ class WhereNode(tree.Node):
field_sql, field_params = self.sql_for_columns(lvalue, qn, connection, field_internal_type), []
else:
# A smart object with an as_sql() method.
- field_sql, field_params = lvalue.as_sql(qn, connection)
+ field_sql, field_params = qn.compile(lvalue)
is_datetime_field = value_annotation is datetime.datetime
cast_sql = connection.ops.datetime_cast_sql() if is_datetime_field else '%s'
if hasattr(params, 'as_sql'):
- extra, params = params.as_sql(qn, connection)
+ extra, params = qn.compile(params)
cast_sql = ''
else:
extra = ''
@@ -282,6 +286,8 @@ class WhereNode(tree.Node):
if hasattr(child, 'relabel_aliases'):
# For example another WhereNode
child.relabel_aliases(change_map)
+ elif hasattr(child, 'relabeled_clone'):
+ self.children[pos] = child.relabeled_clone(change_map)
elif isinstance(child, (list, tuple)):
# tuple starting with Constraint
child = (child[0].relabeled_clone(change_map),) + child[1:]
@@ -347,10 +353,13 @@ class Constraint(object):
pre-process itself prior to including in the WhereNode.
"""
def __init__(self, alias, col, field):
+ warnings.warn(
+ "The Constraint class will be removed in Django 1.9. Use Lookup class instead.",
+ PendingDeprecationWarning)
self.alias, self.col, self.field = alias, col, field
def prepare(self, lookup_type, value):
- if self.field:
+ if self.field and not hasattr(value, 'as_sql'):
return self.field.get_prep_lookup(lookup_type, value)
return value