summaryrefslogtreecommitdiff
path: root/django/db/models/sql/expressions.py
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2009-12-22 15:18:51 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2009-12-22 15:18:51 +0000
commitff60c5f9de3e8690d1e86f3e9e3f7248a15397c8 (patch)
treea4cb0ebdd55fcaf8c8855231b6ad3e1a7bf45bee /django/db/models/sql/expressions.py
parent7ef212af149540aa2da577a960d0d87029fd1514 (diff)
Fixed #1142 -- Added multiple database support.
This monster of a patch is the result of Alex Gaynor's 2009 Google Summer of Code project. Congratulations to Alex for a job well done. Big thanks also go to: * Justin Bronn for keeping GIS in line with the changes, * Karen Tracey and Jani Tiainen for their help testing Oracle support * Brett Hoerner, Jon Loyens, and Craig Kimmerer for their feedback. * Malcolm Treddinick for his guidance during the GSoC submission process. * Simon Willison for driving the original design process * Cal Henderson for complaining about ponies he wanted. ... and everyone else too numerous to mention that helped to bring this feature into fruition. git-svn-id: http://code.djangoproject.com/svn/django/trunk@11952 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/sql/expressions.py')
-rw-r--r--django/db/models/sql/expressions.py22
1 files changed, 9 insertions, 13 deletions
diff --git a/django/db/models/sql/expressions.py b/django/db/models/sql/expressions.py
index 0914c2b3c1..9bbc16ec8a 100644
--- a/django/db/models/sql/expressions.py
+++ b/django/db/models/sql/expressions.py
@@ -1,5 +1,4 @@
from django.core.exceptions import FieldError
-from django.db import connection
from django.db.models.fields import FieldDoesNotExist
from django.db.models.sql.constants import LOOKUP_SEP
@@ -12,8 +11,11 @@ class SQLEvaluator(object):
self.contains_aggregate = False
self.expression.prepare(self, query, allow_joins)
- def as_sql(self, qn=None):
- return self.expression.evaluate(self, qn)
+ def prepare(self):
+ return self
+
+ def as_sql(self, qn, connection):
+ return self.expression.evaluate(self, qn, connection)
def relabel_aliases(self, change_map):
for node, col in self.cols.items():
@@ -54,15 +56,12 @@ class SQLEvaluator(object):
# Vistor methods for final expression evaluation #
##################################################
- def evaluate_node(self, node, qn):
- if not qn:
- qn = connection.ops.quote_name
-
+ def evaluate_node(self, node, qn, connection):
expressions = []
expression_params = []
for child in node.children:
if hasattr(child, 'evaluate'):
- sql, params = child.evaluate(self, qn)
+ sql, params = child.evaluate(self, qn, connection)
else:
sql, params = '%s', (child,)
@@ -77,12 +76,9 @@ class SQLEvaluator(object):
return connection.ops.combine_expression(node.connector, expressions), expression_params
- def evaluate_leaf(self, node, qn):
- if not qn:
- qn = connection.ops.quote_name
-
+ def evaluate_leaf(self, node, qn, connection):
col = self.cols[node]
if hasattr(col, 'as_sql'):
- return col.as_sql(qn), ()
+ return col.as_sql(qn, connection), ()
else:
return '%s.%s' % (qn(col[0]), qn(col[1])), ()