EmilyMatt commented on code in PR #23619:
URL: https://github.com/apache/datafusion/pull/23619#discussion_r3594130181
##########
datafusion/physical-plan/src/sorts/cursor.rs:
##########
@@ -113,15 +123,23 @@ impl<T: CursorValues> Cursor<T> {
t
}
- pub fn is_eq_to_prev_one(&self, prev_cursor: Option<&Cursor<T>>) -> bool {
+ pub fn is_eq_to_prev_one(&self, prev_value: Option<&T::SingleRowValue>) ->
bool {
if self.offset > 0 {
self.is_eq_to_prev_row()
- } else if let Some(prev_cursor) = prev_cursor {
- self.is_eq_to_prev_row_in_prev_batch(prev_cursor)
+ } else if let Some(prev_value) = prev_value {
+ T::eq_to_single_row_value(&self.values, self.offset, prev_value)
} else {
false
}
}
+
+ /// Extract an owned copy of the last row in this cursor, decoupled from
+ /// any buffer the cursor's [`CursorValues`] holds. Used to remember a
+ /// partition's last row across a batch boundary without keeping the
+ /// whole exhausted batch's memory alive (see [`Self::is_eq_to_prev_one`]).
+ pub fn last_value(&self) -> T::SingleRowValue {
+ self.values.get_value(self.values.len() - 1)
Review Comment:
can len() ever be 0?
##########
datafusion/physical-plan/src/sorts/cursor.rs:
##########
@@ -113,15 +123,23 @@ impl<T: CursorValues> Cursor<T> {
t
}
- pub fn is_eq_to_prev_one(&self, prev_cursor: Option<&Cursor<T>>) -> bool {
+ pub fn is_eq_to_prev_one(&self, prev_value: Option<&T::SingleRowValue>) ->
bool {
if self.offset > 0 {
self.is_eq_to_prev_row()
- } else if let Some(prev_cursor) = prev_cursor {
- self.is_eq_to_prev_row_in_prev_batch(prev_cursor)
+ } else if let Some(prev_value) = prev_value {
+ T::eq_to_single_row_value(&self.values, self.offset, prev_value)
} else {
false
}
}
+
+ /// Extract an owned copy of the last row in this cursor, decoupled from
+ /// any buffer the cursor's [`CursorValues`] holds. Used to remember a
+ /// partition's last row across a batch boundary without keeping the
+ /// whole exhausted batch's memory alive (see [`Self::is_eq_to_prev_one`]).
+ pub fn last_value(&self) -> T::SingleRowValue {
+ self.values.get_value(self.values.len() - 1)
Review Comment:
I feel like this should be defensive either way
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]