@@ -39,7 +39,9 @@ use arrow::datatypes::{Field, Schema, SchemaRef};
3939use arrow:: record_batch:: RecordBatch ;
4040use datafusion_common:: tree_node:: TreeNodeRecursion ;
4141use datafusion_common:: tree_node:: { Transformed , TransformedResult , TreeNode } ;
42- use datafusion_common:: { Result , internal_datafusion_err, not_impl_err} ;
42+ use datafusion_common:: {
43+ Result , exec_datafusion_err, internal_datafusion_err, not_impl_err,
44+ } ;
4345use datafusion_execution:: TaskContext ;
4446use datafusion_execution:: memory_pool:: { MemoryConsumer , MemoryReservation } ;
4547use datafusion_physical_expr:: PhysicalExpr ;
@@ -489,7 +491,14 @@ impl DistinctDeduplicator {
489491 /// We also detect duplicates by enforcing that group ids are increasing.
490492 fn deduplicate ( & mut self , batch : & RecordBatch ) -> Result < RecordBatch > {
491493 let size_before = self . group_values . len ( ) ;
492- self . intern_output_buffer . reserve ( batch. num_rows ( ) ) ;
494+ let additional = batch. num_rows ( ) ;
495+ self . intern_output_buffer
496+ . try_reserve ( additional)
497+ . map_err ( |e| {
498+ exec_datafusion_err ! (
499+ "failed to reserve {additional} recursive query group ids: {e}"
500+ )
501+ } ) ?;
493502 self . group_values
494503 . intern ( batch. columns ( ) , & mut self . intern_output_buffer ) ?;
495504 let mask = new_groups_mask ( & self . intern_output_buffer , size_before) ;
0 commit comments