1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
use crate::window::window_expr::BuiltinWindowState;
use crate::window::WindowAggState;
use arrow::array::ArrayRef;
use datafusion_common::Result;
use datafusion_common::{DataFusionError, ScalarValue};
use std::fmt::Debug;
use std::ops::Range;
pub trait PartitionEvaluator: Debug + Send {
fn include_rank(&self) -> bool {
false
}
fn state(&self) -> Result<BuiltinWindowState> {
Ok(BuiltinWindowState::Default)
}
fn update_state(
&mut self,
_state: &WindowAggState,
_range_columns: &[ArrayRef],
_sort_partition_points: &[Range<usize>],
) -> Result<()> {
Ok(())
}
fn get_range(&self, _state: &WindowAggState, _n_rows: usize) -> Result<Range<usize>> {
Err(DataFusionError::NotImplemented(
"get_range is not implemented for this window function".to_string(),
))
}
fn evaluate(&self, _values: &[ArrayRef], _num_rows: usize) -> Result<ArrayRef> {
Err(DataFusionError::NotImplemented(
"evaluate is not implemented by default".into(),
))
}
fn evaluate_stateful(&mut self, _values: &[ArrayRef]) -> Result<ScalarValue> {
Err(DataFusionError::NotImplemented(
"evaluate_stateful is not implemented by default".into(),
))
}
fn evaluate_with_rank(
&self,
_num_rows: usize,
_ranks_in_partition: &[Range<usize>],
) -> Result<ArrayRef> {
Err(DataFusionError::NotImplemented(
"evaluate_partition_with_rank is not implemented by default".into(),
))
}
fn evaluate_inside_range(
&self,
_values: &[ArrayRef],
_range: Range<usize>,
) -> Result<ScalarValue> {
Err(DataFusionError::NotImplemented(
"evaluate_inside_range is not implemented by default".into(),
))
}
}