@@ -535,8 +535,8 @@ def __init__(
535
535
self ._set_operation = [(set_operation , set_operation_query )]
536
536
self ._orderbys : list [tuple [Field , Order | None ]] = []
537
537
538
- self ._limit : int | None = None
539
- self ._offset : int | None = None
538
+ self ._limit : ValueWrapper | None = None
539
+ self ._offset : ValueWrapper | None = None
540
540
541
541
self ._wrapper_cls = wrapper_cls
542
542
@@ -553,11 +553,11 @@ def orderby(self, *fields: Field, **kwargs: Any) -> "Self": # type:ignore[retur
553
553
554
554
@builder
555
555
def limit (self , limit : int ) -> "Self" : # type:ignore[return]
556
- self ._limit = limit
556
+ self ._limit = cast ( ValueWrapper , self . wrap_constant ( limit ))
557
557
558
558
@builder
559
559
def offset (self , offset : int ) -> "Self" : # type:ignore[return]
560
- self ._offset = offset
560
+ self ._offset = cast ( ValueWrapper , self . wrap_constant ( offset ))
561
561
562
562
@builder
563
563
def union (self , other : Selectable ) -> "Self" : # type:ignore[return]
@@ -624,11 +624,8 @@ def get_sql(self, with_alias: bool = False, subquery: bool = False, **kwargs: An
624
624
if self ._orderbys :
625
625
querystring += self ._orderby_sql (** kwargs )
626
626
627
- if self ._limit is not None :
628
- querystring += self ._limit_sql ()
629
-
630
- if self ._offset :
631
- querystring += self ._offset_sql ()
627
+ querystring += self ._limit_sql (** kwargs )
628
+ querystring += self ._offset_sql (** kwargs )
632
629
633
630
if subquery :
634
631
querystring = "({query})" .format (query = querystring , ** kwargs )
@@ -668,11 +665,15 @@ def _orderby_sql(self, quote_char: str | None = None, **kwargs: Any) -> str:
668
665
669
666
return " ORDER BY {orderby}" .format (orderby = "," .join (clauses ))
670
667
671
- def _offset_sql (self ) -> str :
672
- return " OFFSET {offset}" .format (offset = self ._offset )
668
+ def _offset_sql (self , ** kwargs ) -> str :
669
+ if self ._offset is None :
670
+ return ""
671
+ return " OFFSET {offset}" .format (offset = self ._offset .get_sql (** kwargs ))
673
672
674
- def _limit_sql (self ) -> str :
675
- return " LIMIT {limit}" .format (limit = self ._limit )
673
+ def _limit_sql (self , ** kwargs ) -> str :
674
+ if self ._limit is None :
675
+ return ""
676
+ return " LIMIT {limit}" .format (limit = self ._limit .get_sql (** kwargs ))
676
677
677
678
678
679
class QueryBuilder (Selectable , Term ): # type:ignore[misc]
@@ -725,8 +726,8 @@ def __init__(
725
726
self ._joins : list [Join ] = []
726
727
self ._unions : list = []
727
728
728
- self ._limit : int | None = None
729
- self ._offset : int | None = None
729
+ self ._limit : ValueWrapper | None = None
730
+ self ._offset : ValueWrapper | None = None
730
731
731
732
self ._updates : list [tuple ] = []
732
733
@@ -1223,11 +1224,11 @@ def hash_join(self, item: Table | "QueryBuilder" | AliasedQuery) -> "Joiner":
1223
1224
1224
1225
@builder
1225
1226
def limit (self , limit : int ) -> "Self" : # type:ignore[return]
1226
- self ._limit = limit
1227
+ self ._limit = cast ( ValueWrapper , self . wrap_constant ( limit ))
1227
1228
1228
1229
@builder
1229
1230
def offset (self , offset : int ) -> "Self" : # type:ignore[return]
1230
- self ._offset = offset
1231
+ self ._offset = cast ( ValueWrapper , self . wrap_constant ( offset ))
1231
1232
1232
1233
@builder
1233
1234
def union (self , other : Self ) -> _SetOperation :
@@ -1252,7 +1253,8 @@ def minus(self, other: Self) -> _SetOperation:
1252
1253
@builder
1253
1254
def set (self , field : Field | str , value : Any ) -> "Self" : # type:ignore[return]
1254
1255
field = Field (field ) if not isinstance (field , Field ) else field
1255
- self ._updates .append ((field , self ._wrapper_cls (value )))
1256
+ value = self .wrap_constant (value , wrapper_cls = self ._wrapper_cls )
1257
+ self ._updates .append ((field , value ))
1256
1258
1257
1259
def __add__ (self , other : Self ) -> _SetOperation : # type:ignore[override]
1258
1260
return self .union (other )
@@ -1265,8 +1267,10 @@ def __sub__(self, other: Self) -> _SetOperation: # type:ignore[override]
1265
1267
1266
1268
@builder
1267
1269
def slice (self , slice : slice ) -> "Self" : # type:ignore[return]
1268
- self ._offset = slice .start
1269
- self ._limit = slice .stop
1270
+ if slice .start is not None :
1271
+ self ._offset = cast (ValueWrapper , self .wrap_constant (slice .start ))
1272
+ if slice .stop is not None :
1273
+ self ._limit = cast (ValueWrapper , self .wrap_constant (slice .stop ))
1270
1274
1271
1275
def __getitem__ (self , item : Any ) -> Self | Field : # type:ignore[override]
1272
1276
if not isinstance (item , slice ):
@@ -1512,7 +1516,7 @@ def get_sql(self, with_alias: bool = False, subquery: bool = False, **kwargs: An
1512
1516
if self ._orderbys :
1513
1517
querystring += self ._orderby_sql (** kwargs )
1514
1518
1515
- querystring = self ._apply_pagination (querystring )
1519
+ querystring = self ._apply_pagination (querystring , ** kwargs )
1516
1520
1517
1521
if self ._for_update :
1518
1522
querystring += self ._for_update_sql (** kwargs )
@@ -1532,13 +1536,9 @@ def get_sql(self, with_alias: bool = False, subquery: bool = False, **kwargs: An
1532
1536
1533
1537
return querystring
1534
1538
1535
- def _apply_pagination (self , querystring : str ) -> str :
1536
- if self ._limit is not None :
1537
- querystring += self ._limit_sql ()
1538
-
1539
- if self ._offset :
1540
- querystring += self ._offset_sql ()
1541
-
1539
+ def _apply_pagination (self , querystring : str , ** kwargs ) -> str :
1540
+ querystring += self ._limit_sql (** kwargs )
1541
+ querystring += self ._offset_sql (** kwargs )
1542
1542
return querystring
1543
1543
1544
1544
def _with_sql (self , ** kwargs : Any ) -> str :
@@ -1750,11 +1750,15 @@ def _having_sql(self, quote_char: str | None = None, **kwargs: Any) -> str:
1750
1750
having = self ._havings .get_sql (quote_char = quote_char , ** kwargs ) # type:ignore[union-attr]
1751
1751
return f" HAVING { having } "
1752
1752
1753
- def _offset_sql (self ) -> str :
1754
- return " OFFSET {offset}" .format (offset = self ._offset )
1753
+ def _offset_sql (self , ** kwargs ) -> str :
1754
+ if self ._offset is None :
1755
+ return ""
1756
+ return " OFFSET {offset}" .format (offset = self ._offset .get_sql (** kwargs ))
1755
1757
1756
- def _limit_sql (self ) -> str :
1757
- return " LIMIT {limit}" .format (limit = self ._limit )
1758
+ def _limit_sql (self , ** kwargs ) -> str :
1759
+ if self ._limit is None :
1760
+ return ""
1761
+ return " LIMIT {limit}" .format (limit = self ._limit .get_sql (** kwargs ))
1758
1762
1759
1763
def _set_sql (self , ** kwargs : Any ) -> str :
1760
1764
return " SET {set}" .format (
0 commit comments