1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

[soc2009/multidb] Made filter SQL generation lazy when we aren't filtering on a specific field, also added additional tests

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@10923 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2009-06-04 16:53:45 +00:00
parent fbb6fda5f6
commit 91520ec364
3 changed files with 30 additions and 8 deletions

View File

@ -68,11 +68,8 @@ class WhereNode(tree.Node):
super(WhereNode, self).add((obj, lookup_type, annotation, value), super(WhereNode, self).add((obj, lookup_type, annotation, value),
connector) connector)
return return
else:
# TODO: Make this lazy just like the above code for constraints.
params = Field().get_db_prep_lookup(lookup_type, value)
super(WhereNode, self).add((obj, lookup_type, annotation, params), super(WhereNode, self).add((obj, lookup_type, annotation, value),
connector) connector)
def as_sql(self, qn, connection): def as_sql(self, qn, connection):
@ -149,7 +146,7 @@ class WhereNode(tree.Node):
except EmptyShortCircuit: except EmptyShortCircuit:
raise EmptyResultSet raise EmptyResultSet
else: else:
params = params_or_value params = Field().get_db_prep_lookup(lookup_type, params_or_value)
if isinstance(lvalue, tuple): if isinstance(lvalue, tuple):
# A direct database column lookup. # A direct database column lookup.
field_sql = self.sql_for_columns(lvalue, qn, connection) field_sql = self.sql_for_columns(lvalue, qn, connection)

View File

@ -2,6 +2,10 @@ from django.db import models
class Book(models.Model): class Book(models.Model):
title = models.CharField(max_length=100) title = models.CharField(max_length=100)
published = models.DateField()
def __unicode__(self): def __unicode__(self):
return self.title return self.title
class Meta:
ordering = ('title',)

View File

@ -1,3 +1,5 @@
import datetime
from django.conf import settings from django.conf import settings
from django.db import connections from django.db import connections
from django.test import TestCase from django.test import TestCase
@ -18,13 +20,32 @@ class DatabaseSettingTestCase(TestCase):
connections['default'].cursor() connections['default'].cursor()
connections['__test_db'].cursor() connections['__test_db'].cursor()
class ConnectionTestCase(TestCase): class QueryTestCase(TestCase):
def test_queries(self): def test_basic_queries(self):
for db in connections: for db in connections:
Book.objects.using(db).create(title="Dive into Python") Book.objects.using(db).create(title="Dive into Python",
published=datetime.date(2009, 5, 4))
for db in connections: for db in connections:
books = Book.objects.all().using(db) books = Book.objects.all().using(db)
self.assertEqual(books.count(), 1) self.assertEqual(books.count(), 1)
self.assertEqual(len(books), 1) self.assertEqual(len(books), 1)
self.assertEqual(books[0].title, "Dive into Python") self.assertEqual(books[0].title, "Dive into Python")
self.assertEqual(books[0].published, datetime.date(2009, 5, 4))
for db in connections:
book = Book(title="Pro Django", published=datetime.date(2008, 12, 16))
book.save(using=db)
for db in connections:
books = Book.objects.all().using(db)
self.assertEqual(books.count(), 2)
self.assertEqual(len(books), 2)
self.assertEqual(books[0].title, "Dive into Python")
self.assertEqual(books[1].title, "Pro Django")
pro = Book.objects.using(db).get(published=datetime.date(2008, 12, 16))
self.assertEqual(pro.title, "Pro Django")
dive = Book.objects.using(db).get(title__icontains="dive")
self.assertEqual(dive.title, "Dive into Python")