Skip to content

Commit b98c950

Browse files
committed
Use parameter for limit and offset
Closes #92
1 parent 0aa2c58 commit b98c950

3 files changed

Lines changed: 33 additions & 14 deletions

File tree

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* Use parameter for limit and offset
2+
13
Version 1.5.0 - 2024-05-13
24
* Skip alias on INSERT without ON CONFLICT or RETURNING
35
* Add MERGE

sql/__init__.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -380,13 +380,14 @@ def offset(self, value):
380380

381381
@property
382382
def _limit_offset_str(self):
383+
param = Flavor.get().param
383384
if Flavor.get().limitstyle == 'limit':
384385
offset = ''
385386
if self.offset:
386-
offset = ' OFFSET %s' % self.offset
387+
offset = ' OFFSET %s' % param
387388
limit = ''
388389
if self.limit is not None:
389-
limit = ' LIMIT %s' % self.limit
390+
limit = ' LIMIT %s' % param
390391
elif self.offset:
391392
max_limit = Flavor.get().max_limit
392393
if max_limit:
@@ -395,12 +396,27 @@ def _limit_offset_str(self):
395396
else:
396397
offset = ''
397398
if self.offset:
398-
offset = ' OFFSET (%s) ROWS' % self.offset
399+
offset = ' OFFSET (%s) ROWS' % param
399400
fetch = ''
400401
if self.limit is not None:
401-
fetch = ' FETCH FIRST (%s) ROWS ONLY' % self.limit
402+
fetch = ' FETCH FIRST (%s) ROWS ONLY' % param
402403
return offset + fetch
403404

405+
@property
406+
def _limit_offset_params(self):
407+
p = []
408+
if Flavor.get().limitstyle == 'limit':
409+
if self.limit is not None:
410+
p.append(self.limit)
411+
if self.offset:
412+
p.append(self.offset)
413+
else:
414+
if self.offset:
415+
p.append(self.offset)
416+
if self.limit is not None:
417+
p.append(self.limit)
418+
return tuple(p)
419+
404420
def as_(self, output_name):
405421
return As(self, output_name)
406422

@@ -663,6 +679,7 @@ def params(self):
663679
p.extend(self.having.params)
664680
for window in self.windows:
665681
p.extend(window.params)
682+
p.extend(self._limit_offset_params)
666683
return tuple(p)
667684

668685

sql/tests/test_select.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,13 @@ def test_select_limit_offset(self):
253253
Flavor.set(Flavor(limitstyle='limit'))
254254
query = self.table.select(limit=50, offset=10)
255255
self.assertEqual(str(query),
256-
'SELECT * FROM "t" AS "a" LIMIT 50 OFFSET 10')
257-
self.assertEqual(tuple(query.params), ())
256+
'SELECT * FROM "t" AS "a" LIMIT %s OFFSET %s')
257+
self.assertEqual(tuple(query.params), (50, 10))
258258

259259
query.limit = None
260260
self.assertEqual(str(query),
261-
'SELECT * FROM "t" AS "a" OFFSET 10')
262-
self.assertEqual(tuple(query.params), ())
261+
'SELECT * FROM "t" AS "a" OFFSET %s')
262+
self.assertEqual(tuple(query.params), (10,))
263263

264264
query.offset = 0
265265
self.assertEqual(str(query),
@@ -280,8 +280,8 @@ def test_select_limit_offset(self):
280280

281281
query.offset = 10
282282
self.assertEqual(str(query),
283-
'SELECT * FROM "t" AS "a" LIMIT -1 OFFSET 10')
284-
self.assertEqual(tuple(query.params), ())
283+
'SELECT * FROM "t" AS "a" LIMIT -1 OFFSET %s')
284+
self.assertEqual(tuple(query.params), (10,))
285285
finally:
286286
Flavor.set(Flavor())
287287

@@ -291,13 +291,13 @@ def test_select_offset_fetch(self):
291291
query = self.table.select(limit=50, offset=10)
292292
self.assertEqual(str(query),
293293
'SELECT * FROM "t" AS "a" '
294-
'OFFSET (10) ROWS FETCH FIRST (50) ROWS ONLY')
295-
self.assertEqual(tuple(query.params), ())
294+
'OFFSET (%s) ROWS FETCH FIRST (%s) ROWS ONLY')
295+
self.assertEqual(tuple(query.params), (10, 50))
296296

297297
query.limit = None
298298
self.assertEqual(str(query),
299-
'SELECT * FROM "t" AS "a" OFFSET (10) ROWS')
300-
self.assertEqual(tuple(query.params), ())
299+
'SELECT * FROM "t" AS "a" OFFSET (%s) ROWS')
300+
self.assertEqual(tuple(query.params), (10,))
301301

302302
query.offset = 0
303303
self.assertEqual(str(query),

0 commit comments

Comments
 (0)