| 976 | } |
| 977 | |
| 978 | fn sort(&mut self) { |
| 979 | let sort_options = self |
| 980 | .ordering_req |
| 981 | .iter() |
| 982 | .map(|sort_expr| sort_expr.options) |
| 983 | .collect::<Vec<_>>(); |
| 984 | let mut values = take(&mut self.values) |
| 985 | .into_iter() |
| 986 | .zip(take(&mut self.ordering_values)) |
| 987 | .collect::<Vec<_>>(); |
| 988 | let mut delayed_cmp_err = Ok(()); |
| 989 | values.sort_by(|(_, left_ordering), (_, right_ordering)| { |
| 990 | compare_rows(left_ordering, right_ordering, &sort_options).unwrap_or_else( |
| 991 | |err| { |
| 992 | delayed_cmp_err = Err(err); |
| 993 | Ordering::Equal |
| 994 | }, |
| 995 | ) |
| 996 | }); |
| 997 | (self.values, self.ordering_values) = values.into_iter().unzip(); |
| 998 | } |
| 999 | |
| 1000 | fn evaluate_orderings(&self) -> Result<ScalarValue> { |
| 1001 | let fields = ordering_fields(&self.ordering_req, &self.datatypes[1..]); |