Skip to content

Commit 9898786

Browse files
committed
update
1 parent 8befbe6 commit 9898786

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

datafusion/functions-table/src/generate_series.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

354359
impl<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

Comments
 (0)