@@ -101,17 +101,19 @@ impl PyVortexFile {
101101 PyDType :: init ( slf. py ( ) , slf. get ( ) . vxf . dtype ( ) . clone ( ) )
102102 }
103103
104- #[ pyo3( signature = ( projection = None , * , expr = None , indices = None , batch_size = None ) ) ]
104+ #[ pyo3( signature = ( projection = None , * , expr = None , limit = None , indices = None , batch_size = None ) ) ]
105105 fn scan (
106106 slf : Bound < Self > ,
107107 projection : Option < PyIntoProjection > ,
108108 expr : Option < PyExpr > ,
109+ limit : Option < u64 > ,
109110 indices : Option < PyArrayRef > ,
110111 batch_size : Option < usize > ,
111112 ) -> PyVortexResult < PyArrayIterator > {
112113 let builder = slf. get ( ) . scan_builder (
113114 projection. map ( |p| p. 0 ) ,
114115 expr. map ( |e| e. into_inner ( ) ) ,
116+ limit,
115117 indices. map ( |i| i. into_inner ( ) ) ,
116118 batch_size,
117119 ) ?;
@@ -121,17 +123,19 @@ impl PyVortexFile {
121123 ) ) )
122124 }
123125
124- #[ pyo3( signature = ( projection = None , * , expr = None , indices = None , batch_size = None ) ) ]
126+ #[ pyo3( signature = ( projection = None , * , expr = None , limit = None , indices = None , batch_size = None ) ) ]
125127 fn prepare (
126128 slf : Bound < Self > ,
127129 projection : Option < PyIntoProjection > ,
128130 expr : Option < PyExpr > ,
131+ limit : Option < u64 > ,
129132 indices : Option < PyArrayRef > ,
130133 batch_size : Option < usize > ,
131134 ) -> PyVortexResult < PyRepeatedScan > {
132135 let builder = slf. get ( ) . scan_builder (
133136 projection. map ( |p| p. 0 ) ,
134137 expr. map ( |e| e. into_inner ( ) ) ,
138+ limit,
135139 indices. map ( |i| i. into_inner ( ) ) ,
136140 batch_size,
137141 ) ?;
@@ -144,11 +148,12 @@ impl PyVortexFile {
144148 } )
145149 }
146150
147- #[ pyo3( signature = ( projection = None , * , expr = None , batch_size = None ) ) ]
151+ #[ pyo3( signature = ( projection = None , * , expr = None , limit = None , batch_size = None ) ) ]
148152 fn to_arrow (
149153 slf : Bound < Self > ,
150154 projection : Option < PyIntoProjection > ,
151155 expr : Option < PyExpr > ,
156+ limit : Option < u64 > ,
152157 batch_size : Option < usize > ,
153158 ) -> PyVortexResult < Py < PyAny > > {
154159 let vxf = slf. get ( ) . vxf . clone ( ) ;
@@ -159,6 +164,10 @@ impl PyVortexFile {
159164 . with_some_filter ( expr. map ( |e| e. into_inner ( ) ) )
160165 . with_projection ( projection. map ( |p| p. 0 ) . unwrap_or_else ( root) ) ;
161166
167+ if let Some ( limit) = limit {
168+ builder = builder. with_limit ( limit) ;
169+ }
170+
162171 if let Some ( batch_size) = batch_size {
163172 builder = builder. with_split_by ( SplitBy :: RowCount ( batch_size) ) ;
164173 }
@@ -191,6 +200,7 @@ impl PyVortexFile {
191200 & self ,
192201 projection : Option < Expression > ,
193202 expr : Option < Expression > ,
203+ limit : Option < u64 > ,
194204 indices : Option < ArrayRef > ,
195205 batch_size : Option < usize > ,
196206 ) -> VortexResult < ScanBuilder < ArrayRef > > {
@@ -200,6 +210,10 @@ impl PyVortexFile {
200210 . with_some_filter ( expr)
201211 . with_projection ( projection. unwrap_or_else ( root) ) ;
202212
213+ if let Some ( limit) = limit {
214+ builder = builder. with_limit ( limit) ;
215+ }
216+
203217 if let Some ( indices) = indices {
204218 let indices = cast ( indices. as_ref ( ) , & DType :: Primitive ( PType :: U64 , NonNullable ) ) ?
205219 . to_primitive ( )
0 commit comments