Skip to content

Commit fcd77a1

Browse files
committed
fixes for pagination
1 parent 5e230e2 commit fcd77a1

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

django_iris/compiler.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ def as_sql(self, with_limits=True, with_col_aliases=False):
77
with_limit_offset = with_limits and (
88
self.query.high_mark is not None or self.query.low_mark
99
)
10-
print('LIMIT - ' + str(self.query.low_mark) + ':' + str(self.query.high_mark))
1110
if self.query.select_for_update or not with_limit_offset:
1211
return super().as_sql(with_limits, with_col_aliases)
1312
try:
1413
extra_select, order_by, group_by = self.pre_sql_setup()
1514

16-
limit, offset = self.connection.ops._get_limit_offset_params(self.query.low_mark, self.query.high_mark)
15+
offset = self.query.low_mark + 1 if self.query.low_mark else 0
16+
limit = self.query.high_mark
1717

1818
distinct_fields, distinct_params = self.get_distinct()
1919
# This must come after 'select', 'ordering', and 'distinct'
@@ -45,9 +45,11 @@ def as_sql(self, with_limits=True, with_col_aliases=False):
4545
result += distinct_result
4646
params += distinct_params
4747

48+
first_col = ""
4849
out_cols = []
4950
col_idx = 1
5051
for _, (s_sql, s_params), alias in self.select + extra_select:
52+
first_col = s_sql if not first_col else first_col
5153
if alias:
5254
s_sql = "%s AS %s" % (
5355
s_sql,
@@ -63,14 +65,18 @@ def as_sql(self, with_limits=True, with_col_aliases=False):
6365
out_cols.append(s_sql)
6466

6567
order_by_result = ""
68+
6669
if order_by:
6770
ordering = []
6871
for _, (o_sql, o_params, _) in order_by:
6972
ordering.append(o_sql)
7073
params.extend(o_params)
7174
order_by_result = "ORDER BY %s" % ", ".join(ordering)
72-
if offset:
73-
out_cols.append("ROW_NUMBER() OVER (%s) AS row_number" % order_by_result)
75+
elif offset:
76+
order_by_result = "ORDER BY %s" % first_col
77+
78+
if offset:
79+
out_cols.append("ROW_NUMBER() %s AS row_number" % ("OVER (%s)" % order_by_result if order_by_result else ""))
7480

7581
result += [", ".join(out_cols), "FROM", *from_]
7682
params.extend(f_params)
@@ -147,8 +153,8 @@ def as_sql(self, with_limits=True, with_col_aliases=False):
147153
if offset:
148154
query = "SELECT * FROM (%s) WHERE row_number between %d AND %d ORDER BY row_number" % (
149155
query,
150-
limit,
151156
offset,
157+
limit,
152158
)
153159
return query, tuple(params)
154160
except:

0 commit comments

Comments
 (0)