robin_sparkless_polars/functions/
sort.rs1use crate::column::Column;
4use polars::prelude::Expr;
5
6#[derive(Debug, Clone)]
8pub struct SortOrder {
9 pub(crate) expr: Expr,
10 pub descending: bool,
11 pub nulls_last: bool,
12 pub(crate) column_name: String,
13}
14
15impl SortOrder {
16 pub fn expr(&self) -> &Expr {
17 &self.expr
18 }
19
20 pub fn column_name(&self) -> &str {
21 &self.column_name
22 }
23}
24
25pub fn asc(column: &Column) -> SortOrder {
27 SortOrder {
28 expr: column.expr().clone(),
29 descending: false,
30 nulls_last: false,
31 column_name: column.name().to_string(),
32 }
33}
34
35pub fn asc_nulls_first(column: &Column) -> SortOrder {
37 SortOrder {
38 expr: column.expr().clone(),
39 descending: false,
40 nulls_last: false,
41 column_name: column.name().to_string(),
42 }
43}
44
45pub fn asc_nulls_last(column: &Column) -> SortOrder {
47 SortOrder {
48 expr: column.expr().clone(),
49 descending: false,
50 nulls_last: true,
51 column_name: column.name().to_string(),
52 }
53}
54
55pub fn desc(column: &Column) -> SortOrder {
57 SortOrder {
58 expr: column.expr().clone(),
59 descending: true,
60 nulls_last: true,
61 column_name: column.name().to_string(),
62 }
63}
64
65pub fn desc_nulls_first(column: &Column) -> SortOrder {
67 SortOrder {
68 expr: column.expr().clone(),
69 descending: true,
70 nulls_last: false,
71 column_name: column.name().to_string(),
72 }
73}
74
75pub fn desc_nulls_last(column: &Column) -> SortOrder {
77 SortOrder {
78 expr: column.expr().clone(),
79 descending: true,
80 nulls_last: true,
81 column_name: column.name().to_string(),
82 }
83}
84
85pub fn asc_from_name(name: &str) -> SortOrder {
87 asc(&Column::new(name.to_string()))
88}