@@ -50,11 +50,16 @@ def current_database(self) -> str:
5050 def current_schema (self ) -> str :
5151 return "current_schema()"
5252
53- def offset_limit (
54- self , offset : Optional [int ] = None , limit : Optional [int ] = None , has_order_by : Optional [bool ] = None
53+ def limit_select (
54+ self ,
55+ select_query : str ,
56+ offset : Optional [int ] = None ,
57+ limit : Optional [int ] = None ,
58+ has_order_by : Optional [bool ] = None ,
5559 ) -> str :
5660 x = offset and f"OFFSET { offset } " , limit and f"LIMIT { limit } "
57- return " " .join (filter (None , x ))
61+ result = " " .join (filter (None , x ))
62+ return f"SELECT * FROM ({ select_query } ) AS LIMITED_SELECT { result } "
5863
5964 def explain_as_text (self , query : str ) -> str :
6065 return f"explain { query } "
@@ -192,7 +197,7 @@ def test_funcs(self):
192197 t = table ("a" )
193198
194199 q = c .compile (t .order_by (Random ()).limit (10 ))
195- self .assertEqual (q , "SELECT * FROM a ORDER BY random() LIMIT 10" )
200+ self .assertEqual (q , "SELECT * FROM (SELECT * FROM a ORDER BY random()) AS LIMITED_SELECT LIMIT 10" )
196201
197202 q = c .compile (t .select (coalesce (this .a , this .b )))
198203 self .assertEqual (q , "SELECT COALESCE(a, b) FROM a" )
@@ -210,7 +215,7 @@ def test_select_distinct(self):
210215
211216 # selects stay apart
212217 q = c .compile (t .limit (10 ).select (this .b , distinct = True ))
213- self .assertEqual (q , "SELECT DISTINCT b FROM (SELECT * FROM a LIMIT 10) tmp1" )
218+ self .assertEqual (q , "SELECT DISTINCT b FROM (SELECT * FROM (SELECT * FROM a) AS LIMITED_SELECT LIMIT 10) tmp1" )
214219
215220 q = c .compile (t .select (this .b , distinct = True ).select (distinct = False ))
216221 self .assertEqual (q , "SELECT * FROM (SELECT DISTINCT b FROM a) tmp2" )
@@ -226,7 +231,9 @@ def test_select_with_optimizer_hints(self):
226231 self .assertEqual (q , "SELECT /*+ PARALLEL(a 16) */ b FROM a WHERE (b > 10)" )
227232
228233 q = c .compile (t .limit (10 ).select (this .b , optimizer_hints = "PARALLEL(a 16)" ))
229- self .assertEqual (q , "SELECT /*+ PARALLEL(a 16) */ b FROM (SELECT * FROM a LIMIT 10) tmp1" )
234+ self .assertEqual (
235+ q , "SELECT /*+ PARALLEL(a 16) */ b FROM (SELECT * FROM (SELECT * FROM a) AS LIMITED_SELECT LIMIT 10) tmp1"
236+ )
230237
231238 q = c .compile (t .select (this .a ).group_by (this .b ).agg (this .c ).select (optimizer_hints = "PARALLEL(a 16)" ))
232239 self .assertEqual (
0 commit comments