Commit 3c5688d4 authored by Ian Kelly's avatar Ian Kelly
Browse files

[1.0.X] Fixed #9136: Do slicing in Oracle with rownum instead of

row_number() for a speed improvement. Thanks, Guillaume Taglang.

Backport of [9235] from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9236 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 36e90e57
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -111,9 +111,10 @@ def query_class(QueryClass, Database):
                # Wrap the base query in an outer SELECT * with boundaries on
                # the "_RN" column.  This is the canonical way to emulate LIMIT
                # and OFFSET on Oracle.
                sql = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY 1) AS "_RN", "_SUB".* FROM (%s) "_SUB") WHERE "_RN" > %d' % (sql, self.low_mark)
                high_where = ''
                if self.high_mark is not None:
                    sql = '%s AND "_RN" <= %d' % (sql, self.high_mark)
                    high_where = 'WHERE ROWNUM <= %d' % (self.high_mark,)
                sql = 'SELECT * FROM (SELECT ROWNUM AS "_RN", "_SUB".* FROM (%s) "_SUB" %s) WHERE "_RN" > %d' % (sql, high_where, self.low_mark)

            return sql, params