grafbase_sql_ast/ast/function/
row_number.rs

1use crate::ast::{Column, IntoOrderDefinition, Over};
2
3#[derive(Debug, Default, Clone, PartialEq)]
4/// A window function that assigns a sequential integer
5/// number to each row in the query’s result set.
6pub struct RowNumber<'a> {
7    pub(crate) over: Over<'a>,
8}
9
10impl<'a> RowNumber<'a> {
11    /// Define the order of the row number. Is the row order if not set.
12    pub fn order_by<T>(mut self, value: T) -> Self
13    where
14        T: IntoOrderDefinition<'a>,
15    {
16        self.over.ordering.append(value.into_order_definition());
17        self
18    }
19
20    /// Define the partitioning of the row number
21    pub fn partition_by<T>(mut self, partition: T) -> Self
22    where
23        T: Into<Column<'a>>,
24    {
25        self.over.partitioning.push(partition.into());
26        self
27    }
28}
29
30/// A number from 1 to n in specified order
31pub fn row_number<'a>() -> RowNumber<'a> {
32    RowNumber::default()
33}