@@ -263,6 +263,7 @@ impl GenerateSeriesTable {
263263 batch_size,
264264 include_end : * include_end,
265265 name,
266+ finished : false ,
266267 } ) ) ,
267268 GenSeriesArgs :: TimestampArgs {
268269 start,
@@ -303,6 +304,7 @@ impl GenerateSeriesTable {
303304 batch_size,
304305 include_end : * include_end,
305306 name,
307+ finished : false ,
306308 } ) )
307309 }
308310 GenSeriesArgs :: DateArgs {
@@ -332,6 +334,7 @@ impl GenerateSeriesTable {
332334 batch_size,
333335 include_end : * include_end,
334336 name,
337+ finished : false ,
335338 } ) ) ,
336339 } ;
337340
@@ -349,6 +352,8 @@ pub struct GenericSeriesState<T: SeriesValue> {
349352 current : T ,
350353 include_end : bool ,
351354 name : & ' static str ,
355+ /// Set to true when advancing would overflow, so the next call returns None.
356+ finished : bool ,
352357}
353358
354359impl < T : SeriesValue > GenericSeriesState < T > {
@@ -387,6 +392,10 @@ impl<T: SeriesValue> LazyBatchGenerator for GenericSeriesState<T> {
387392 }
388393
389394 fn generate_next_batch ( & mut self ) -> Result < Option < RecordBatch > > {
395+ if self . finished {
396+ return Ok ( None ) ;
397+ }
398+
390399 let mut buf = Vec :: with_capacity ( self . batch_size ) ;
391400
392401 while buf. len ( ) < self . batch_size
@@ -399,6 +408,7 @@ impl<T: SeriesValue> LazyBatchGenerator for GenericSeriesState<T> {
399408 // is i64::MAX and step is 1), the series is exhausted – stop here
400409 // rather than returning an error, matching PostgreSQL/DuckDB behavior.
401410 if self . current . advance ( & self . step ) . is_err ( ) {
411+ self . finished = true ;
402412 break ;
403413 }
404414 }
@@ -415,6 +425,7 @@ impl<T: SeriesValue> LazyBatchGenerator for GenericSeriesState<T> {
415425 fn reset_state ( & self ) -> Arc < RwLock < dyn LazyBatchGenerator > > {
416426 let mut new = self . clone ( ) ;
417427 new. current = new. start . clone ( ) ;
428+ new. finished = false ;
418429 Arc :: new ( RwLock :: new ( new) )
419430 }
420431}
@@ -787,6 +798,7 @@ mod generate_series_tests {
787798 batch_size : 8192 ,
788799 include_end : true ,
789800 name : "test" ,
801+ finished : false ,
790802 } ;
791803 let batch = state. generate_next_batch ( ) ?. expect ( "missing batch" ) ;
792804
0 commit comments