Michael Manfre avatar Michael Manfre committed 8593968

Internal attributes for slicing will no longer prevent raw queries from executing. Fixes #120. Thanks Robin Johnson

Comments (0)

Files changed (3)


     def resolve_columns(self, row, fields=()):
         # If the results are sliced, the resultset will have an initial 
         # "row number" column. Remove this column before the ORM sees it.
-        if self._using_row_number:
+        if getattr(self, '_using_row_number', False):
             return row[1:]
         return row


     Test that __year works.
     d = models.DateField()
-    dt = models.DateTimeField()
+    dt = models.DateTimeField()
+class IntegerIdTable(models.Model):
+    """
+    Simple table consisting of only an Integer ID primary key
+    """
+    id = models.IntegerField(primary_key=True)


 from django.db import models
 from django.test import TestCase
-from regressiontests.models import Bug69Table1, Bug69Table2, Bug70Table, Bug93Table
+from regressiontests.models import Bug69Table1, Bug69Table2, Bug70Table, Bug93Table, IntegerIdTable
 class Bug38Table(models.Model):
     d = models.DecimalField(max_digits=5, decimal_places=2)
         dates = Bug93Table.objects.filter(dt__year='2010')
         self.assertTrue(dates.count() == 2)
-class RandomOrderTestCase(TestCase):
+class BasicFunctionalityTestCase(TestCase):
     def testRandomOrder(self):
         Check that multiple results with order_by('?') return
         different orders.
         for x in xrange(1,20):
-            Bug69Table1.objects.create(id=x)
+            IntegerIdTable.objects.create(id=x)
-        a = list(Bug69Table1.objects.all().order_by('?'))
-        b = list(Bug69Table1.objects.all().order_by('?'))
+        a = list(IntegerIdTable.objects.all().order_by('?'))
+        b = list(IntegerIdTable.objects.all().order_by('?'))
         self.assertNotEquals(a, b)
+    def testRawUsingRowNumber(self):
+        """Issue 120: raw requests failing due to missing slicing logic"""
+        for x in xrange(1,5):
+            IntegerIdTable.objects.create(id=x)
+        objs = IntegerIdTable.objects.raw("SELECT [id] FROM [regressiontests_IntegerIdTable]")
+        self.assertEquals(len(list(objs)), 4)
 class ConnectionStringTestCase(TestCase):
     def assertInString(self, conn_string, pattern):
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.