1#[cfg(doc)]
2use super::aggregate_expressions::WindowExpressionMethods;
3use crate::sql_types::helper::CombinedNullableValue;
4use crate::sql_types::{Integer, IntoNotNullable, IntoNullable, SingleValue, SqlType};
5use diesel_derives::declare_sql_function;
6
7#[doc = " Number of th current row within its partition"]
#[doc = ""]
#[doc =
" Returns the number of the current row within its partition, counting from 1."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select((title, user_id, row_number().partition_by(user_id)))"]
#[doc = " .load::<(String, i32, i64)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1),"]
#[doc = " (\"About Rust\".into(), 1, 2),"]
#[doc = " (\"My first post too\".into(), 2, 1),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn row_number() -> row_number where { row_number_utils::row_number {} }
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`row_number()`](fn@row_number)"]
pub type row_number = row_number_utils::row_number<>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod row_number_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct row_number {}
#[automatically_derived]
impl ::core::fmt::Debug for row_number {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "row_number")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for row_number { }
#[automatically_derived]
impl ::core::clone::Clone for row_number {
#[inline]
fn clone(&self) -> Self { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for row_number { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for row_number {
type QueryId = row_number<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`row_number()`](fn@row_number)"]
pub type HelperType = row_number<>;
impl Expression for row_number where {
type SqlType = BigInt;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
row_number where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for row_number
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for row_number
where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "row_number";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<row_number, __DieselInternal> for
OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend {}
impl IsWindowFunction for row_number {
type ArgTypes = ();
}
}
#[doc = " Rank of current row within its partition, with gaps"]
#[doc = ""]
#[doc = " Returns the rank of the current row, with gaps;"]
#[doc = " that is, the row_number of the first row in its peer group."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " rank().partition_by(user_id).window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, i64)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1),"]
#[doc = " (\"About Rust\".into(), 1, 1),"]
#[doc = " (\"My first post too\".into(), 2, 1),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn rank() -> rank where { rank_utils::rank {} }
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`rank()`](fn@rank)"]
pub type rank = rank_utils::rank<>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod rank_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct rank {}
#[automatically_derived]
impl ::core::fmt::Debug for rank {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "rank")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for rank { }
#[automatically_derived]
impl ::core::clone::Clone for rank {
#[inline]
fn clone(&self) -> Self { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for rank { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for rank {
type QueryId = rank<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`rank()`](fn@rank)"]
pub type HelperType = rank<>;
impl Expression for rank where {
type SqlType = BigInt;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for rank
where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for rank where
Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for rank where
__DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "rank";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<rank, __DieselInternal> for
OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<rank, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<rank, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<__P, __O, __F> WindowFunctionFragment<rank, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<__P, __O, __F> WindowFunctionFragment<rank, diesel::mariadb::Mariadb>
for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl IsWindowFunction for rank {
type ArgTypes = ();
}
}
#[doc = " Rank of current row within its partition, without gaps"]
#[doc = ""]
#[doc = " Returns the rank of the current row, without gaps;"]
#[doc = " this function effectively counts peer groups."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " dense_rank().partition_by(user_id).window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, i64)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1),"]
#[doc = " (\"About Rust\".into(), 1, 1),"]
#[doc = " (\"My first post too\".into(), 2, 1),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn dense_rank() -> dense_rank where { dense_rank_utils::dense_rank {} }
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`dense_rank()`](fn@dense_rank)"]
pub type dense_rank = dense_rank_utils::dense_rank<>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod dense_rank_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct dense_rank {}
#[automatically_derived]
impl ::core::fmt::Debug for dense_rank {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "dense_rank")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for dense_rank { }
#[automatically_derived]
impl ::core::clone::Clone for dense_rank {
#[inline]
fn clone(&self) -> Self { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for dense_rank { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for dense_rank {
type QueryId = dense_rank<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`dense_rank()`](fn@dense_rank)"]
pub type HelperType = dense_rank<>;
impl Expression for dense_rank where {
type SqlType = BigInt;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
dense_rank where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for dense_rank
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for dense_rank
where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "dense_rank";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<dense_rank, __DieselInternal> for
OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<dense_rank, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<dense_rank, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<__P, __O, __F>
WindowFunctionFragment<dense_rank, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<__P, __O, __F>
WindowFunctionFragment<dense_rank, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl IsWindowFunction for dense_rank {
type ArgTypes = ();
}
}
#[doc = " Percentage rank value"]
#[doc = ""]
#[doc = " Returns the relative rank of the current row,"]
#[doc = " that is (rank - 1) / (total partition rows - 1)."]
#[doc = " The value thus ranges from 0 to 1 inclusive."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc =
" percent_rank().partition_by(user_id).window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, f64)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 0.0),"]
#[doc = " (\"About Rust\".into(), 1, 0.0),"]
#[doc = " (\"My first post too\".into(), 2, 0.0),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn percent_rank() -> percent_rank where {
percent_rank_utils::percent_rank {}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`percent_rank()`](fn@percent_rank)"]
pub type percent_rank = percent_rank_utils::percent_rank<>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod percent_rank_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct percent_rank {}
#[automatically_derived]
impl ::core::fmt::Debug for percent_rank {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "percent_rank")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for percent_rank { }
#[automatically_derived]
impl ::core::clone::Clone for percent_rank {
#[inline]
fn clone(&self) -> Self { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for percent_rank { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for percent_rank {
type QueryId = percent_rank<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`percent_rank()`](fn@percent_rank)"]
pub type HelperType = percent_rank<>;
impl Expression for percent_rank where {
type SqlType = Double;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
percent_rank where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for percent_rank
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for percent_rank
where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "percent_rank";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<percent_rank, __DieselInternal> for
OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<percent_rank, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<percent_rank, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<__P, __O, __F>
WindowFunctionFragment<percent_rank, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<__P, __O, __F>
WindowFunctionFragment<percent_rank, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl IsWindowFunction for percent_rank {
type ArgTypes = ();
}
}
#[doc = " Cumulative distribution value"]
#[doc = ""]
#[doc = " Returns the cumulative distribution,"]
#[doc =
" that is (number of partition rows preceding or peers with current row) / (total partition rows)."]
#[doc = " The value thus ranges from 1/N to 1."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " cume_dist().partition_by(user_id).window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, f64)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1.0),"]
#[doc = " (\"About Rust\".into(), 1, 1.0),"]
#[doc = " (\"My first post too\".into(), 2, 1.0),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn cume_dist() -> cume_dist where { cume_dist_utils::cume_dist {} }
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`cume_dist()`](fn@cume_dist)"]
pub type cume_dist = cume_dist_utils::cume_dist<>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod cume_dist_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct cume_dist {}
#[automatically_derived]
impl ::core::fmt::Debug for cume_dist {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "cume_dist")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for cume_dist { }
#[automatically_derived]
impl ::core::clone::Clone for cume_dist {
#[inline]
fn clone(&self) -> Self { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for cume_dist { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for cume_dist {
type QueryId = cume_dist<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
#[doc = "The return type of [`cume_dist()`](fn@cume_dist)"]
pub type HelperType = cume_dist<>;
impl Expression for cume_dist where {
type SqlType = Double;
}
impl<__DieselInternal> SelectableExpression<__DieselInternal> for
cume_dist where Self: AppearsOnTable<__DieselInternal> {}
impl<__DieselInternal> AppearsOnTable<__DieselInternal> for cume_dist
where Self: Expression {}
impl<__DieselInternal> FunctionFragment<__DieselInternal> for cume_dist
where __DieselInternal: diesel::backend::Backend {
const FUNCTION_NAME: &'static str = "cume_dist";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
Ok(())
}
}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<cume_dist, __DieselInternal> for
OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<cume_dist, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<__P, __O, __F, __DieselInternal>
WindowFunctionFragment<cume_dist, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<__P, __O, __F>
WindowFunctionFragment<cume_dist, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<__P, __O, __F>
WindowFunctionFragment<cume_dist, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl IsWindowFunction for cume_dist {
type ArgTypes = ();
}
}
#[doc = " Bucket number of current row within its partition"]
#[doc = ""]
#[doc = " Returns an integer ranging from 1 to the argument value,"]
#[doc = " dividing the partition as equally as possible."]
#[doc = ""]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select((title, user_id, ntile(2).partition_by(user_id)))"]
#[doc = " .load::<(String, i32, i32)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1),"]
#[doc = " (\"About Rust\".into(), 1, 2),"]
#[doc = " (\"My first post too\".into(), 2, 1),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn ntile<num_buckets>(num_buckets: num_buckets) -> ntile<num_buckets>
where num_buckets: diesel::expression::AsExpression<Integer> {
ntile_utils::ntile { num_buckets: num_buckets.as_expression() }
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`ntile()`](fn@ntile)"]
pub type ntile<num_buckets> =
ntile_utils::ntile<<num_buckets as
diesel::expression::AsExpression<Integer>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod ntile_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct ntile<num_buckets> {
pub(in super) num_buckets: num_buckets,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<num_buckets, __Rhs> ::core::ops::Add<__Rhs> for
ntile<num_buckets> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<num_buckets, __Rhs> ::core::ops::Sub<__Rhs> for
ntile<num_buckets> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<num_buckets, __Rhs> ::core::ops::Mul<__Rhs> for
ntile<num_buckets> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<num_buckets, __Rhs> ::core::ops::Div<__Rhs> for
ntile<num_buckets> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<num_buckets: ::core::fmt::Debug> ::core::fmt::Debug for
ntile<num_buckets> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field1_finish(f,
"ntile num_buckets", &&self.num_buckets)
}
}
#[automatically_derived]
impl<num_buckets: ::core::clone::Clone> ::core::clone::Clone for
ntile<num_buckets> {
#[inline]
fn clone(&self) -> Self {
ntile {
num_buckets: ::core::clone::Clone::clone(&self.num_buckets),
}
}
}
#[automatically_derived]
impl<num_buckets: ::core::marker::Copy> ::core::marker::Copy for
ntile<num_buckets> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<num_buckets: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for ntile<num_buckets> {
type QueryId =
ntile<<num_buckets as
diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<num_buckets as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<num_buckets as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`ntile()`](fn@ntile)"]
pub type HelperType<num_buckets> =
ntile<<num_buckets as AsExpression<Integer>>::Expression>;
impl<num_buckets> Expression for ntile<num_buckets> where
(num_buckets): Expression {
type SqlType = Integer;
}
impl<num_buckets, __DieselInternal> SelectableExpression<__DieselInternal>
for ntile<num_buckets> where
num_buckets: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<num_buckets, __DieselInternal> AppearsOnTable<__DieselInternal> for
ntile<num_buckets> where
num_buckets: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<num_buckets, __DieselInternal> FunctionFragment<__DieselInternal> for
ntile<num_buckets> where __DieselInternal: diesel::backend::Backend,
num_buckets: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "ntile";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.num_buckets.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.num_buckets.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<num_buckets, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<ntile<num_buckets>, __DieselInternal> for
OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend {}
impl<num_buckets> IsWindowFunction for ntile<num_buckets> {
type ArgTypes = (num_buckets,);
}
}
#[doc = " Value of argument from row lagging current row within partition"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is one row before the current"]
#[doc =
" row within the partition. If there is no such row, NULL is returned instead."]
#[doc = ""]
#[doc =
" See [`lag_with_offset`] and [`lag_with_offset_and_default`] for variants with configurable offset"]
#[doc = " and default values."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " lag(id).partition_by(user_id).window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, None),"]
#[doc = " (\"About Rust\".into(), 1, Some(1)),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn lag<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value>(value: value) -> lag<T, value> where
value: diesel::expression::AsExpression<T> {
lag_utils::lag {
value: value.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`lag()`](fn@lag)"]
pub type lag<T, value> =
lag_utils::lag<T,
<value as diesel::expression::AsExpression<T>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod lag_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct lag<T, value> {
pub(in super) value: value,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, __Rhs> ::core::ops::Add<__Rhs> for lag<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Sub<__Rhs> for lag<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Mul<__Rhs> for lag<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Div<__Rhs> for lag<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug> ::core::fmt::Debug
for lag<T, value> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"lag value T", &self.value, &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone>
::core::clone::Clone for lag<T, value> {
#[inline]
fn clone(&self) -> Self {
lag {
value: ::core::clone::Clone::clone(&self.value),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy>
::core::marker::Copy for lag<T, value> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for lag<T, value> {
type QueryId =
lag<<T as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`lag()`](fn@lag)"]
pub type HelperType<T, value> =
lag<T, <value as AsExpression<T>>::Expression>;
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value> Expression for lag<T, value> where (value): Expression {
type SqlType = T::Nullable;
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __DieselInternal> SelectableExpression<__DieselInternal> for
lag<T, value> where value: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __DieselInternal> AppearsOnTable<__DieselInternal> for
lag<T, value> where value: AppearsOnTable<__DieselInternal>,
Self: Expression {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __DieselInternal> FunctionFragment<__DieselInternal> for
lag<T, value> where __DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "lag";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lag<T, value>, __DieselInternal> for
OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<lag<T, value>, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lag<T, value>, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F>
WindowFunctionFragment<lag<T, value>, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F>
WindowFunctionFragment<lag<T, value>, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value> IsWindowFunction for lag<T, value> {
type ArgTypes = (value,);
}
}
#[doc = " Value of argument from row lagging current row within partition"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is offset rows before the current"]
#[doc =
" row within the partition; If there is no such row, NULL is returned instead."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " lag_with_offset(id, 1)"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, None),"]
#[doc = " (\"About Rust\".into(), 1, Some(1)),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc(alias = "lag")]
#[allow(non_camel_case_types)]
pub fn lag_with_offset<T: SqlType + SingleValue +
IntoNullable<Nullable : SingleValue>, value,
offset>(value: value, offset: offset) -> lag_with_offset<T, value, offset>
where value: diesel::expression::AsExpression<T>,
offset: diesel::expression::AsExpression<Integer> {
lag_with_offset_utils::lag_with_offset {
value: value.as_expression(),
offset: offset.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`lag_with_offset()`](fn@lag_with_offset)"]
pub type lag_with_offset<T, value, offset> =
lag_with_offset_utils::lag_with_offset<T,
<value as diesel::expression::AsExpression<T>>::Expression,
<offset as diesel::expression::AsExpression<Integer>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod lag_with_offset_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct lag_with_offset<T, value, offset> {
pub(in super) value: value,
pub(in super) offset: offset,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, offset, __Rhs> ::core::ops::Add<__Rhs> for
lag_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, offset, __Rhs> ::core::ops::Sub<__Rhs> for
lag_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, offset, __Rhs> ::core::ops::Mul<__Rhs> for
lag_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, offset, __Rhs> ::core::ops::Div<__Rhs> for
lag_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug,
offset: ::core::fmt::Debug> ::core::fmt::Debug for
lag_with_offset<T, value, offset> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"lag_with_offset value offset T", &self.value, &self.offset,
&&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone,
offset: ::core::clone::Clone> ::core::clone::Clone for
lag_with_offset<T, value, offset> {
#[inline]
fn clone(&self) -> Self {
lag_with_offset {
value: ::core::clone::Clone::clone(&self.value),
offset: ::core::clone::Clone::clone(&self.offset),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy,
offset: ::core::marker::Copy> ::core::marker::Copy for
lag_with_offset<T, value, offset> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId,
offset: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
lag_with_offset<T, value, offset> {
type QueryId =
lag_with_offset<<T as
diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId,
<offset as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<offset as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<offset as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`lag_with_offset()`](fn@lag_with_offset)"]
pub type HelperType<T, value, offset> =
lag_with_offset<T, <value as AsExpression<T>>::Expression,
<offset as AsExpression<Integer>>::Expression>;
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset> Expression for lag_with_offset<T, value, offset> where
(value, offset): Expression {
type SqlType = T::Nullable;
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __DieselInternal>
SelectableExpression<__DieselInternal> for
lag_with_offset<T, value, offset> where
value: SelectableExpression<__DieselInternal>,
offset: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __DieselInternal> AppearsOnTable<__DieselInternal> for
lag_with_offset<T, value, offset> where
value: AppearsOnTable<__DieselInternal>,
offset: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __DieselInternal> FunctionFragment<__DieselInternal>
for lag_with_offset<T, value, offset> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal>,
offset: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "lag";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.offset.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.offset.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lag_with_offset<T, value, offset>,
__DieselInternal> for OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<lag_with_offset<T, value, offset>,
__DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lag_with_offset<T, value, offset>,
__DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F>
WindowFunctionFragment<lag_with_offset<T, value, offset>,
diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F>
WindowFunctionFragment<lag_with_offset<T, value, offset>,
diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset> IsWindowFunction for lag_with_offset<T, value, offset>
{
type ArgTypes = (value, offset);
}
}
#[doc = " Value of argument from row lagging current row within partition"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is offset rows before the current"]
#[doc =
" row within the partition; if there is no such row, instead returns default"]
#[doc = " (which must be of a type compatible with value)."]
#[doc =
" Both offset and default are evaluated with respect to the current row."]
#[doc = " If omitted, offset defaults to 1 and default to NULL."]
#[doc = ""]
#[doc =
" This function returns a nullable value if either the value or the default expression are"]
#[doc = " nullable."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(not(feature = \"mariadb\"))]"]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(all(not(miri), not(feature = \"mariadb\")))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " lag_with_offset_and_default(id, 1, user_id)"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, i32)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1),"]
#[doc = " (\"About Rust\".into(), 1, 1),"]
#[doc = " (\"My first post too\".into(), 2, 2),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = ""]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc =
" lag_with_offset_and_default(None::<i32>.into_sql::<Nullable<Integer>>(), 1, user_id)"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, Some(1)),"]
#[doc = " (\"About Rust\".into(), 1, None),"]
#[doc = " (\"My first post too\".into(), 2, Some(2)),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = ""]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc =
" lag_with_offset_and_default(id, 1, None::<i32>.into_sql::<Nullable<Integer>>())"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, None),"]
#[doc = " (\"About Rust\".into(), 1, Some(1)),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"mariadb\")]"]
#[doc = " # fn main() {}"]
#[doc = " ```"]
#[doc(alias = "lag")]
#[allow(non_camel_case_types)]
pub fn lag_with_offset_and_default<T: SqlType + SingleValue +
IntoNotNullable<NotNullable : self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset,
default>(value: value, offset: offset, default: default)
-> lag_with_offset_and_default<T, T2, value, offset, default> where
value: diesel::expression::AsExpression<T>,
offset: diesel::expression::AsExpression<Integer>,
default: diesel::expression::AsExpression<T2> {
lag_with_offset_and_default_utils::lag_with_offset_and_default {
value: value.as_expression(),
offset: offset.as_expression(),
default: default.as_expression(),
T: ::core::marker::PhantomData,
T2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`lag_with_offset_and_default()`](fn@lag_with_offset_and_default)"]
pub type lag_with_offset_and_default<T, T2, value, offset, default> =
lag_with_offset_and_default_utils::lag_with_offset_and_default<T, T2,
<value as diesel::expression::AsExpression<T>>::Expression,
<offset as diesel::expression::AsExpression<Integer>>::Expression,
<default as diesel::expression::AsExpression<T2>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod lag_with_offset_and_default_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct lag_with_offset_and_default<T, T2, value, offset, default> {
pub(in super) value: value,
pub(in super) offset: offset,
pub(in super) default: default,
pub(in super) T: ::core::marker::PhantomData<T>,
pub(in super) T2: ::core::marker::PhantomData<T2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Add<__Rhs>
for lag_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Sub<__Rhs>
for lag_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Mul<__Rhs>
for lag_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Div<__Rhs>
for lag_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, T2: ::core::fmt::Debug,
value: ::core::fmt::Debug, offset: ::core::fmt::Debug,
default: ::core::fmt::Debug> ::core::fmt::Debug for
lag_with_offset_and_default<T, T2, value, offset, default> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"lag_with_offset_and_default value offset default T T2",
&self.value, &self.offset, &self.default, &self.T, &&self.T2)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, T2: ::core::clone::Clone,
value: ::core::clone::Clone, offset: ::core::clone::Clone,
default: ::core::clone::Clone> ::core::clone::Clone for
lag_with_offset_and_default<T, T2, value, offset, default> {
#[inline]
fn clone(&self) -> Self {
lag_with_offset_and_default {
value: ::core::clone::Clone::clone(&self.value),
offset: ::core::clone::Clone::clone(&self.offset),
default: ::core::clone::Clone::clone(&self.default),
T: ::core::clone::Clone::clone(&self.T),
T2: ::core::clone::Clone::clone(&self.T2),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, T2: ::core::marker::Copy,
value: ::core::marker::Copy, offset: ::core::marker::Copy,
default: ::core::marker::Copy> ::core::marker::Copy for
lag_with_offset_and_default<T, T2, value, offset, default> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
T2: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId,
offset: diesel::query_builder::QueryId,
default: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
lag_with_offset_and_default<T, T2, value, offset, default> {
type QueryId =
lag_with_offset_and_default<<T as
diesel::query_builder::QueryId>::QueryId,
<T2 as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId,
<offset as diesel::query_builder::QueryId>::QueryId,
<default as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<T2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<offset as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<default as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<T2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<offset as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<default as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`lag_with_offset_and_default()`](fn@lag_with_offset_and_default)"]
pub type HelperType<T, T2, value, offset, default> =
lag_with_offset_and_default<T, T2,
<value as AsExpression<T>>::Expression,
<offset as AsExpression<Integer>>::Expression,
<default as AsExpression<T2>>::Expression>;
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default> Expression for
lag_with_offset_and_default<T, T2, value, offset, default> where
(value, offset, default): Expression {
type SqlType = T::Out;
}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __DieselInternal>
SelectableExpression<__DieselInternal> for
lag_with_offset_and_default<T, T2, value, offset, default> where
value: SelectableExpression<__DieselInternal>,
offset: SelectableExpression<__DieselInternal>,
default: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __DieselInternal>
AppearsOnTable<__DieselInternal> for
lag_with_offset_and_default<T, T2, value, offset, default> where
value: AppearsOnTable<__DieselInternal>,
offset: AppearsOnTable<__DieselInternal>,
default: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __DieselInternal>
FunctionFragment<__DieselInternal> for
lag_with_offset_and_default<T, T2, value, offset, default> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal>,
offset: QueryFragment<__DieselInternal>,
default: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "lag";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.offset.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.offset.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.default.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.default.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F,
__DieselInternal>
WindowFunctionFragment<lag_with_offset_and_default<T, T2, value,
offset, default>, __DieselInternal> for OverClause<__P, __O, __F>
where
Self: WindowFunctionFragment<lag_with_offset_and_default<T, T2, value,
offset, default>, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F,
__DieselInternal>
WindowFunctionFragment<lag_with_offset_and_default<T, T2, value,
offset, default>, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F>
WindowFunctionFragment<lag_with_offset_and_default<T, T2, value,
offset, default>, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F>
WindowFunctionFragment<lag_with_offset_and_default<T, T2, value,
offset, default>, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default> IsWindowFunction for
lag_with_offset_and_default<T, T2, value, offset, default> {
type ArgTypes = (value, offset, default);
}
}
#[doc = " Value of argument from row leading current row within partition"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is offset rows after the current"]
#[doc = " row within the partition; if there is no such row,"]
#[doc = " `NULL` will be returned instead."]
#[doc = ""]
#[doc =
" See [`lead_with_offset`] and [`lead_with_offset_and_default`] for variants with configurable offset"]
#[doc = " and default values."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " lead(id).partition_by(user_id).window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, Some(2)),"]
#[doc = " (\"About Rust\".into(), 1, None),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn lead<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value>(value: value) -> lead<T, value> where
value: diesel::expression::AsExpression<T> {
lead_utils::lead {
value: value.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`lead()`](fn@lead)"]
pub type lead<T, value> =
lead_utils::lead<T,
<value as diesel::expression::AsExpression<T>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod lead_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct lead<T, value> {
pub(in super) value: value,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, __Rhs> ::core::ops::Add<__Rhs> for lead<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Sub<__Rhs> for lead<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Mul<__Rhs> for lead<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Div<__Rhs> for lead<T, value>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug> ::core::fmt::Debug
for lead<T, value> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"lead value T", &self.value, &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone>
::core::clone::Clone for lead<T, value> {
#[inline]
fn clone(&self) -> Self {
lead {
value: ::core::clone::Clone::clone(&self.value),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy>
::core::marker::Copy for lead<T, value> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for lead<T, value> {
type QueryId =
lead<<T as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`lead()`](fn@lead)"]
pub type HelperType<T, value> =
lead<T, <value as AsExpression<T>>::Expression>;
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value> Expression for lead<T, value> where (value): Expression {
type SqlType = T::Nullable;
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __DieselInternal> SelectableExpression<__DieselInternal> for
lead<T, value> where value: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __DieselInternal> AppearsOnTable<__DieselInternal> for
lead<T, value> where value: AppearsOnTable<__DieselInternal>,
Self: Expression {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __DieselInternal> FunctionFragment<__DieselInternal> for
lead<T, value> where __DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "lead";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lead<T, value>, __DieselInternal> for
OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<lead<T, value>, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lead<T, value>, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F>
WindowFunctionFragment<lead<T, value>, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, __P, __O, __F>
WindowFunctionFragment<lead<T, value>, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value> IsWindowFunction for lead<T, value> {
type ArgTypes = (value,);
}
}
#[doc = " Value of argument from row leading current row within partition"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is offset rows after the current"]
#[doc = " row within the partition; if there is no such row,"]
#[doc = " `NULL` is returned instead"]
#[doc = ""]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " lead_with_offset(id, 1)"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, Some(2)),"]
#[doc = " (\"About Rust\".into(), 1, None),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[doc(alias = "lead")]
#[allow(non_camel_case_types)]
pub fn lead_with_offset<T: SqlType + SingleValue +
IntoNullable<Nullable : SingleValue>, value,
offset>(value: value, offset: offset)
-> lead_with_offset<T, value, offset> where
value: diesel::expression::AsExpression<T>,
offset: diesel::expression::AsExpression<Integer> {
lead_with_offset_utils::lead_with_offset {
value: value.as_expression(),
offset: offset.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`lead_with_offset()`](fn@lead_with_offset)"]
pub type lead_with_offset<T, value, offset> =
lead_with_offset_utils::lead_with_offset<T,
<value as diesel::expression::AsExpression<T>>::Expression,
<offset as diesel::expression::AsExpression<Integer>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod lead_with_offset_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct lead_with_offset<T, value, offset> {
pub(in super) value: value,
pub(in super) offset: offset,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, offset, __Rhs> ::core::ops::Add<__Rhs> for
lead_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, offset, __Rhs> ::core::ops::Sub<__Rhs> for
lead_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, offset, __Rhs> ::core::ops::Mul<__Rhs> for
lead_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, offset, __Rhs> ::core::ops::Div<__Rhs> for
lead_with_offset<T, value, offset> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug,
offset: ::core::fmt::Debug> ::core::fmt::Debug for
lead_with_offset<T, value, offset> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"lead_with_offset value offset T", &self.value, &self.offset,
&&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone,
offset: ::core::clone::Clone> ::core::clone::Clone for
lead_with_offset<T, value, offset> {
#[inline]
fn clone(&self) -> Self {
lead_with_offset {
value: ::core::clone::Clone::clone(&self.value),
offset: ::core::clone::Clone::clone(&self.offset),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy,
offset: ::core::marker::Copy> ::core::marker::Copy for
lead_with_offset<T, value, offset> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId,
offset: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
lead_with_offset<T, value, offset> {
type QueryId =
lead_with_offset<<T as
diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId,
<offset as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<offset as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<offset as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`lead_with_offset()`](fn@lead_with_offset)"]
pub type HelperType<T, value, offset> =
lead_with_offset<T, <value as AsExpression<T>>::Expression,
<offset as AsExpression<Integer>>::Expression>;
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset> Expression for lead_with_offset<T, value, offset> where
(value, offset): Expression {
type SqlType = T::Nullable;
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __DieselInternal>
SelectableExpression<__DieselInternal> for
lead_with_offset<T, value, offset> where
value: SelectableExpression<__DieselInternal>,
offset: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __DieselInternal> AppearsOnTable<__DieselInternal> for
lead_with_offset<T, value, offset> where
value: AppearsOnTable<__DieselInternal>,
offset: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __DieselInternal> FunctionFragment<__DieselInternal>
for lead_with_offset<T, value, offset> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal>,
offset: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "lead";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.offset.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.offset.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lead_with_offset<T, value, offset>,
__DieselInternal> for OverClause<__P, __O, __F> where
Self: WindowFunctionFragment<lead_with_offset<T, value, offset>,
__DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<lead_with_offset<T, value, offset>,
__DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F>
WindowFunctionFragment<lead_with_offset<T, value, offset>,
diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset, __P, __O, __F>
WindowFunctionFragment<lead_with_offset<T, value, offset>,
diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, offset> IsWindowFunction for lead_with_offset<T, value, offset>
{
type ArgTypes = (value, offset);
}
}
#[doc = " Value of argument from row leading current row within partition"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is offset rows after the current"]
#[doc = " row within the partition; if there is no such row,"]
#[doc =
" instead returns default (which must be of a type compatible with value)."]
#[doc =
" Both offset and default are evaluated with respect to the current row."]
#[doc = " If omitted, offset defaults to 1 and default to NULL."]
#[doc = ""]
#[doc =
" This function returns a nullable value if either the value or the default expression are"]
#[doc = " nullable."]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc =
" For MySQL this function requires you to call [`.window_order()`](WindowExpressionMethods::window_order())"]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(not(feature = \"mariadb\"))]"]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(all(not(miri), not(feature = \"mariadb\")))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # use diesel::sql_types::{Integer, Nullable};"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc = " lead_with_offset_and_default(id, 1, user_id)"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, i32)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 2),"]
#[doc = " (\"About Rust\".into(), 1, 1),"]
#[doc = " (\"My first post too\".into(), 2, 2),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = ""]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc =
" lead_with_offset_and_default(None::<i32>.into_sql::<Nullable<Integer>>(), 1, user_id)"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, None),"]
#[doc = " (\"About Rust\".into(), 1, Some(1)),"]
#[doc = " (\"My first post too\".into(), 2, Some(2)),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = ""]
#[doc = " let res = posts"]
#[doc = " .select(("]
#[doc = " title,"]
#[doc = " user_id,"]
#[doc =
" lead_with_offset_and_default(id, 1, None::<i32>.into_sql::<Nullable<Integer>>())"]
#[doc = " .partition_by(user_id)"]
#[doc = " .window_order(user_id),"]
#[doc = " ))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, Some(2)),"]
#[doc = " (\"About Rust\".into(), 1, None),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " # #[cfg(feature = \"mariadb\")]"]
#[doc = " # fn main() {}"]
#[doc = " ```"]
#[doc(alias = "lead")]
#[allow(non_camel_case_types)]
pub fn lead_with_offset_and_default<T: SqlType + SingleValue +
IntoNotNullable<NotNullable : self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset,
default>(value: value, offset: offset, default: default)
-> lead_with_offset_and_default<T, T2, value, offset, default> where
value: diesel::expression::AsExpression<T>,
offset: diesel::expression::AsExpression<Integer>,
default: diesel::expression::AsExpression<T2> {
lead_with_offset_and_default_utils::lead_with_offset_and_default {
value: value.as_expression(),
offset: offset.as_expression(),
default: default.as_expression(),
T: ::core::marker::PhantomData,
T2: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc =
"The return type of [`lead_with_offset_and_default()`](fn@lead_with_offset_and_default)"]
pub type lead_with_offset_and_default<T, T2, value, offset, default> =
lead_with_offset_and_default_utils::lead_with_offset_and_default<T, T2,
<value as diesel::expression::AsExpression<T>>::Expression,
<offset as diesel::expression::AsExpression<Integer>>::Expression,
<default as diesel::expression::AsExpression<T2>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod lead_with_offset_and_default_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct lead_with_offset_and_default<T, T2, value, offset, default> {
pub(in super) value: value,
pub(in super) offset: offset,
pub(in super) default: default,
pub(in super) T: ::core::marker::PhantomData<T>,
pub(in super) T2: ::core::marker::PhantomData<T2>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Add<__Rhs>
for
lead_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Sub<__Rhs>
for
lead_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Mul<__Rhs>
for
lead_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, T2, value, offset, default, __Rhs> ::core::ops::Div<__Rhs>
for
lead_with_offset_and_default<T, T2, value, offset, default>
where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, T2: ::core::fmt::Debug,
value: ::core::fmt::Debug, offset: ::core::fmt::Debug,
default: ::core::fmt::Debug> ::core::fmt::Debug for
lead_with_offset_and_default<T, T2, value, offset, default> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f,
"lead_with_offset_and_default value offset default T T2",
&self.value, &self.offset, &self.default, &self.T, &&self.T2)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, T2: ::core::clone::Clone,
value: ::core::clone::Clone, offset: ::core::clone::Clone,
default: ::core::clone::Clone> ::core::clone::Clone for
lead_with_offset_and_default<T, T2, value, offset, default> {
#[inline]
fn clone(&self) -> Self {
lead_with_offset_and_default {
value: ::core::clone::Clone::clone(&self.value),
offset: ::core::clone::Clone::clone(&self.offset),
default: ::core::clone::Clone::clone(&self.default),
T: ::core::clone::Clone::clone(&self.T),
T2: ::core::clone::Clone::clone(&self.T2),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, T2: ::core::marker::Copy,
value: ::core::marker::Copy, offset: ::core::marker::Copy,
default: ::core::marker::Copy> ::core::marker::Copy for
lead_with_offset_and_default<T, T2, value, offset, default> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
T2: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId,
offset: diesel::query_builder::QueryId,
default: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for
lead_with_offset_and_default<T, T2, value, offset, default> {
type QueryId =
lead_with_offset_and_default<<T as
diesel::query_builder::QueryId>::QueryId,
<T2 as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId,
<offset as diesel::query_builder::QueryId>::QueryId,
<default as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<T2 as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<offset as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<default as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<T2 as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<offset as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<default as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc =
"The return type of [`lead_with_offset_and_default()`](fn@lead_with_offset_and_default)"]
pub type HelperType<T, T2, value, offset, default> =
lead_with_offset_and_default<T, T2,
<value as AsExpression<T>>::Expression,
<offset as AsExpression<Integer>>::Expression,
<default as AsExpression<T2>>::Expression>;
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default> Expression for
lead_with_offset_and_default<T, T2, value, offset, default> where
(value, offset, default): Expression {
type SqlType = T::Out;
}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __DieselInternal>
SelectableExpression<__DieselInternal> for
lead_with_offset_and_default<T, T2, value, offset, default> where
value: SelectableExpression<__DieselInternal>,
offset: SelectableExpression<__DieselInternal>,
default: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __DieselInternal>
AppearsOnTable<__DieselInternal> for
lead_with_offset_and_default<T, T2, value, offset, default> where
value: AppearsOnTable<__DieselInternal>,
offset: AppearsOnTable<__DieselInternal>,
default: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __DieselInternal>
FunctionFragment<__DieselInternal> for
lead_with_offset_and_default<T, T2, value, offset, default> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal>,
offset: QueryFragment<__DieselInternal>,
default: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "lead";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.offset.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.offset.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.default.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.default.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F,
__DieselInternal>
WindowFunctionFragment<lead_with_offset_and_default<T, T2, value,
offset, default>, __DieselInternal> for OverClause<__P, __O, __F>
where
Self: WindowFunctionFragment<lead_with_offset_and_default<T, T2,
value, offset, default>, __DieselInternal,
<__DieselInternal as
diesel::backend::SqlDialect>::BuiltInWindowFunctionRequireOrder>,
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F,
__DieselInternal>
WindowFunctionFragment<lead_with_offset_and_default<T, T2, value,
offset, default>, __DieselInternal,
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
for OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend +
diesel::backend::SqlDialect<BuiltInWindowFunctionRequireOrder =
crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired>
{}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F>
WindowFunctionFragment<lead_with_offset_and_default<T, T2, value,
offset, default>, diesel::mysql::Mysql> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default, __P, __O, __F>
WindowFunctionFragment<lead_with_offset_and_default<T, T2, value,
offset, default>, diesel::mariadb::Mariadb> for
OverClause<__P, diesel::internal::sql_functions::Order<__O, true>,
__F> where {}
impl<T: SqlType + SingleValue +
IntoNotNullable<NotNullable
: self::private::SameType<T2::NotNullable>> +
CombinedNullableValue<T2, T::NotNullable>, T2: SqlType + SingleValue +
IntoNotNullable, value, offset, default> IsWindowFunction for
lead_with_offset_and_default<T, T2, value, offset, default> {
type ArgTypes = (value, offset, default);
}
}
#[doc = " Value of argument from first row of window frame"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is the first row of the window frame."]
#[doc = ""]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc =
" .select((title, user_id, first_value(id).partition_by(user_id)))"]
#[doc = " .load::<(String, i32, i32)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 1),"]
#[doc = " (\"About Rust\".into(), 1, 1),"]
#[doc = " (\"My first post too\".into(), 2, 3),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn first_value<T: SqlType + SingleValue, value>(value: value)
-> first_value<T, value> where
value: diesel::expression::AsExpression<T> {
first_value_utils::first_value {
value: value.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`first_value()`](fn@first_value)"]
pub type first_value<T, value> =
first_value_utils::first_value<T,
<value as diesel::expression::AsExpression<T>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod first_value_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct first_value<T, value> {
pub(in super) value: value,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, __Rhs> ::core::ops::Add<__Rhs> for
first_value<T, value> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Sub<__Rhs> for
first_value<T, value> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Mul<__Rhs> for
first_value<T, value> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Div<__Rhs> for
first_value<T, value> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug> ::core::fmt::Debug
for first_value<T, value> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"first_value value T", &self.value, &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone>
::core::clone::Clone for first_value<T, value> {
#[inline]
fn clone(&self) -> Self {
first_value {
value: ::core::clone::Clone::clone(&self.value),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy>
::core::marker::Copy for first_value<T, value> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for first_value<T, value> {
type QueryId =
first_value<<T as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`first_value()`](fn@first_value)"]
pub type HelperType<T, value> =
first_value<T, <value as AsExpression<T>>::Expression>;
impl<T: SqlType + SingleValue, value> Expression for first_value<T, value>
where (value): Expression {
type SqlType = T;
}
impl<T: SqlType + SingleValue, value, __DieselInternal>
SelectableExpression<__DieselInternal> for first_value<T, value> where
value: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue, value, __DieselInternal>
AppearsOnTable<__DieselInternal> for first_value<T, value> where
value: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue, value, __DieselInternal>
FunctionFragment<__DieselInternal> for first_value<T, value> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "first_value";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue, value, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<first_value<T, value>, __DieselInternal> for
OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue, value> IsWindowFunction for
first_value<T, value> {
type ArgTypes = (value,);
}
}
#[doc = " Value of argument from last row of window frame"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is the last row of the window frame."]
#[doc = ""]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc =
" .select((title, user_id, last_value(id).partition_by(user_id)))"]
#[doc = " .load::<(String, i32, i32)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, 2),"]
#[doc = " (\"About Rust\".into(), 1, 2),"]
#[doc = " (\"My first post too\".into(), 2, 3),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn last_value<T: SqlType + SingleValue, value>(value: value)
-> last_value<T, value> where value: diesel::expression::AsExpression<T> {
last_value_utils::last_value {
value: value.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`last_value()`](fn@last_value)"]
pub type last_value<T, value> =
last_value_utils::last_value<T,
<value as diesel::expression::AsExpression<T>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod last_value_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct last_value<T, value> {
pub(in super) value: value,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, __Rhs> ::core::ops::Add<__Rhs> for
last_value<T, value> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Sub<__Rhs> for
last_value<T, value> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Mul<__Rhs> for
last_value<T, value> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, __Rhs> ::core::ops::Div<__Rhs> for
last_value<T, value> where Self: Expression, Self: Expression,
<Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug> ::core::fmt::Debug
for last_value<T, value> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"last_value value T", &self.value, &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone>
::core::clone::Clone for last_value<T, value> {
#[inline]
fn clone(&self) -> Self {
last_value {
value: ::core::clone::Clone::clone(&self.value),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy>
::core::marker::Copy for last_value<T, value> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for last_value<T, value> {
type QueryId =
last_value<<T as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`last_value()`](fn@last_value)"]
pub type HelperType<T, value> =
last_value<T, <value as AsExpression<T>>::Expression>;
impl<T: SqlType + SingleValue, value> Expression for last_value<T, value>
where (value): Expression {
type SqlType = T;
}
impl<T: SqlType + SingleValue, value, __DieselInternal>
SelectableExpression<__DieselInternal> for last_value<T, value> where
value: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue, value, __DieselInternal>
AppearsOnTable<__DieselInternal> for last_value<T, value> where
value: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue, value, __DieselInternal>
FunctionFragment<__DieselInternal> for last_value<T, value> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "last_value";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue, value, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<last_value<T, value>, __DieselInternal> for
OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue, value> IsWindowFunction for
last_value<T, value> {
type ArgTypes = (value,);
}
}
#[doc = " Value of argument from N-th row of window frame"]
#[doc = ""]
#[doc =
" Returns value evaluated at the row that is the n\'th row of the window frame (counting from 1);"]
#[doc = " returns NULL if there is no such row."]
#[doc = ""]
#[doc = ""]
#[doc =
" This function must be used as window function. You need to call at least one"]
#[doc =
" of the methods [`WindowExpressionMethods`] from to use this function in your `SELECT`"]
#[doc = " clause. It cannot be used outside of `SELECT` clauses."]
#[doc = ""]
#[doc = " ```"]
#[doc = " # include!(\"../../doctest_setup.rs\");"]
#[doc = " # use diesel::dsl::*;"]
#[doc = " #"]
#[doc =
" # // Reading the query result requires reading memory allocated by the"]
#[doc =
" # // native sqlite library, which miri cannot track provenance for."]
#[doc = " # #[cfg(miri)]"]
#[doc = " # fn main() {}"]
#[doc = " # #[cfg(not(miri))]"]
#[doc = " # fn main() -> QueryResult<()> {"]
#[doc = " # use schema::posts::dsl::*;"]
#[doc = " # let connection = &mut establish_connection();"]
#[doc = " let res = posts"]
#[doc =
" .select((title, user_id, nth_value(id, 2).partition_by(user_id)))"]
#[doc = " .load::<(String, i32, Option<i32>)>(connection)?;"]
#[doc = " let expected = vec!["]
#[doc = " (\"My first post\".to_owned(), 1, Some(2)),"]
#[doc = " (\"About Rust\".into(), 1, Some(2)),"]
#[doc = " (\"My first post too\".into(), 2, None),"]
#[doc = " ];"]
#[doc = " assert_eq!(expected, res);"]
#[doc = " # Ok(())"]
#[doc = " # }"]
#[doc = " ```"]
#[allow(non_camel_case_types)]
pub fn nth_value<T: SqlType + SingleValue +
IntoNullable<Nullable : SingleValue>, value, n>(value: value, n: n)
-> nth_value<T, value, n> where
value: diesel::expression::AsExpression<T>,
n: diesel::expression::AsExpression<Integer> {
nth_value_utils::nth_value {
value: value.as_expression(),
n: n.as_expression(),
T: ::core::marker::PhantomData,
}
}
#[allow(non_camel_case_types, non_snake_case)]
#[doc = "The return type of [`nth_value()`](fn@nth_value)"]
pub type nth_value<T, value, n> =
nth_value_utils::nth_value<T,
<value as diesel::expression::AsExpression<T>>::Expression,
<n as diesel::expression::AsExpression<Integer>>::Expression>;
#[doc(hidden)]
#[allow(non_camel_case_types, non_snake_case, unused_imports)]
pub(crate) mod nth_value_utils {
use diesel::{self, QueryResult};
use diesel::expression::{
AsExpression, Expression, SelectableExpression, AppearsOnTable,
ValidGrouping,
};
use diesel::query_builder::{QueryFragment, AstPass};
use diesel::sql_types::*;
use diesel::internal::sql_functions::*;
use super::*;
pub struct nth_value<T, value, n> {
pub(in super) value: value,
pub(in super) n: n,
pub(in super) T: ::core::marker::PhantomData<T>,
}
const _: () =
{
use diesel;
use diesel::internal::derives::numeric_ops as ops;
use diesel::expression::{Expression, AsExpression};
use diesel::sql_types::ops::{Add, Sub, Mul, Div};
use diesel::sql_types::{SqlType, SingleValue};
impl<T, value, n, __Rhs> ::core::ops::Add<__Rhs> for
nth_value<T, value, n> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Add,
<<Self as Expression>::SqlType as Add>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Add>::Rhs> {
type Output = ops::Add<Self, __Rhs::Expression>;
fn add(self, rhs: __Rhs) -> Self::Output {
ops::Add::new(self, rhs.as_expression())
}
}
impl<T, value, n, __Rhs> ::core::ops::Sub<__Rhs> for
nth_value<T, value, n> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Sub,
<<Self as Expression>::SqlType as Sub>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Sub>::Rhs> {
type Output = ops::Sub<Self, __Rhs::Expression>;
fn sub(self, rhs: __Rhs) -> Self::Output {
ops::Sub::new(self, rhs.as_expression())
}
}
impl<T, value, n, __Rhs> ::core::ops::Mul<__Rhs> for
nth_value<T, value, n> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Mul,
<<Self as Expression>::SqlType as Mul>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Mul>::Rhs> {
type Output = ops::Mul<Self, __Rhs::Expression>;
fn mul(self, rhs: __Rhs) -> Self::Output {
ops::Mul::new(self, rhs.as_expression())
}
}
impl<T, value, n, __Rhs> ::core::ops::Div<__Rhs> for
nth_value<T, value, n> where Self: Expression,
Self: Expression, <Self as Expression>::SqlType: Div,
<<Self as Expression>::SqlType as Div>::Rhs: SqlType +
SingleValue,
__Rhs: AsExpression<<<Self as Expression>::SqlType as
Div>::Rhs> {
type Output = ops::Div<Self, __Rhs::Expression>;
fn div(self, rhs: __Rhs) -> Self::Output {
ops::Div::new(self, rhs.as_expression())
}
}
};
#[automatically_derived]
impl<T: ::core::fmt::Debug, value: ::core::fmt::Debug,
n: ::core::fmt::Debug> ::core::fmt::Debug for nth_value<T, value, n> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"nth_value value n T", &self.value, &self.n, &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone,
n: ::core::clone::Clone> ::core::clone::Clone for
nth_value<T, value, n> {
#[inline]
fn clone(&self) -> Self {
nth_value {
value: ::core::clone::Clone::clone(&self.value),
n: ::core::clone::Clone::clone(&self.n),
T: ::core::clone::Clone::clone(&self.T),
}
}
}
#[automatically_derived]
impl<T: ::core::marker::Copy, value: ::core::marker::Copy,
n: ::core::marker::Copy> ::core::marker::Copy for
nth_value<T, value, n> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<T: diesel::query_builder::QueryId,
value: diesel::query_builder::QueryId,
n: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for nth_value<T, value, n> {
type QueryId =
nth_value<<T as diesel::query_builder::QueryId>::QueryId,
<value as diesel::query_builder::QueryId>::QueryId,
<n as diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<T as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&&
<value as
diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID &&
<n as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<T as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<value as
diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
<n as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION ||
false;
}
};
#[doc = "The return type of [`nth_value()`](fn@nth_value)"]
pub type HelperType<T, value, n> =
nth_value<T, <value as AsExpression<T>>::Expression,
<n as AsExpression<Integer>>::Expression>;
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, n> Expression for nth_value<T, value, n> where
(value, n): Expression {
type SqlType = T::Nullable;
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, n, __DieselInternal> SelectableExpression<__DieselInternal> for
nth_value<T, value, n> where
value: SelectableExpression<__DieselInternal>,
n: SelectableExpression<__DieselInternal>,
Self: AppearsOnTable<__DieselInternal> {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, n, __DieselInternal> AppearsOnTable<__DieselInternal> for
nth_value<T, value, n> where value: AppearsOnTable<__DieselInternal>,
n: AppearsOnTable<__DieselInternal>, Self: Expression {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, n, __DieselInternal> FunctionFragment<__DieselInternal> for
nth_value<T, value, n> where
__DieselInternal: diesel::backend::Backend,
value: QueryFragment<__DieselInternal>,
n: QueryFragment<__DieselInternal> {
const FUNCTION_NAME: &'static str = "nth_value";
#[allow(unused_assignments)]
fn walk_arguments<'__b>(&'__b self,
mut out: AstPass<'_, '__b, __DieselInternal>) -> QueryResult<()> {
let mut needs_comma = false;
if !self.value.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.value.walk_ast(out.reborrow())?;
needs_comma = true;
}
if !self.n.is_noop(out.backend())? {
if needs_comma { out.push_sql(", "); }
self.n.walk_ast(out.reborrow())?;
needs_comma = true;
}
Ok(())
}
}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, n, __P, __O, __F, __DieselInternal>
WindowFunctionFragment<nth_value<T, value, n>, __DieselInternal> for
OverClause<__P, __O, __F> where
__DieselInternal: diesel::backend::Backend {}
impl<T: SqlType + SingleValue + IntoNullable<Nullable : SingleValue>,
value, n> IsWindowFunction for nth_value<T, value, n> {
type ArgTypes = (value, n);
}
}#[declare_sql_function]
8extern "SQL" {
9
10 #[window]
43 fn row_number() -> BigInt;
44
45 #[window(dialect(
85 BuiltInWindowFunctionRequireOrder,
86 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
87 ))]
88 #[cfg_attr(
89 feature = "mysql_backend",
90 window(backends(diesel::mysql::Mysql), require_order = true)
91 )]
92 #[cfg_attr(
93 feature = "mariadb_backend",
94 window(backends(diesel::mariadb::Mariadb), require_order = true)
95 )]
96 fn rank() -> BigInt;
97
98 #[window(dialect(
138 BuiltInWindowFunctionRequireOrder,
139 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
140 ))]
141 #[cfg_attr(
142 feature = "mysql_backend",
143 window(backends(diesel::mysql::Mysql), require_order = true)
144 )]
145 #[cfg_attr(
146 feature = "mariadb_backend",
147 window(backends(diesel::mariadb::Mariadb), require_order = true)
148 )]
149 fn dense_rank() -> BigInt;
150
151 #[window(dialect(
192 BuiltInWindowFunctionRequireOrder,
193 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
194 ))]
195 #[cfg_attr(
196 feature = "mysql_backend",
197 window(backends(diesel::mysql::Mysql), require_order = true)
198 )]
199 #[cfg_attr(
200 feature = "mariadb_backend",
201 window(backends(diesel::mariadb::Mariadb), require_order = true)
202 )]
203 fn percent_rank() -> Double;
204
205 #[window(dialect(
246 BuiltInWindowFunctionRequireOrder,
247 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
248 ))]
249 #[cfg_attr(
250 feature = "mysql_backend",
251 window(backends(diesel::mysql::Mysql), require_order = true)
252 )]
253 #[cfg_attr(
254 feature = "mariadb_backend",
255 window(backends(diesel::mariadb::Mariadb), require_order = true)
256 )]
257 fn cume_dist() -> Double;
258
259 #[window]
294 fn ntile(num_buckets: Integer) -> Integer;
295
296 #[window(dialect(
339 BuiltInWindowFunctionRequireOrder,
340 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
341 ))]
342 #[cfg_attr(
343 feature = "mysql_backend",
344 window(backends(diesel::mysql::Mysql), require_order = true)
345 )]
346 #[cfg_attr(
347 feature = "mariadb_backend",
348 window(backends(diesel::mariadb::Mariadb), require_order = true)
349 )]
350 fn lag<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(value: T)
351 -> T::Nullable;
352
353 #[doc(alias = "lag")]
395 #[sql_name = "lag"]
396 #[window(dialect(
397 BuiltInWindowFunctionRequireOrder,
398 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
399 ))]
400 #[cfg_attr(
401 feature = "mysql_backend",
402 window(backends(diesel::mysql::Mysql), require_order = true)
403 )]
404 #[cfg_attr(
405 feature = "mariadb_backend",
406 window(backends(diesel::mariadb::Mariadb), require_order = true)
407 )]
408 fn lag_with_offset<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
409 value: T,
410 offset: Integer,
411 ) -> T::Nullable;
412
413 #[doc(alias = "lag")]
497 #[sql_name = "lag"]
498 #[window(dialect(
499 BuiltInWindowFunctionRequireOrder,
500 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
501 ))]
502 #[cfg_attr(
503 feature = "mysql_backend",
504 window(backends(diesel::mysql::Mysql), require_order = true)
505 )]
506 #[cfg_attr(
507 feature = "mariadb_backend",
508 window(backends(diesel::mariadb::Mariadb), require_order = true)
509 )]
510 fn lag_with_offset_and_default<
511 T: SqlType
512 + SingleValue
513 + IntoNotNullable<NotNullable: self::private::SameType<T2::NotNullable>>
514 + CombinedNullableValue<T2, T::NotNullable>,
515 T2: SqlType + SingleValue + IntoNotNullable,
516 >(
517 value: T,
518 offset: Integer,
519 default: T2,
520 ) -> T::Out;
521
522 #[window(dialect(
566 BuiltInWindowFunctionRequireOrder,
567 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
568 ))]
569 #[cfg_attr(
570 feature = "mysql_backend",
571 window(backends(diesel::mysql::Mysql), require_order = true)
572 )]
573 #[cfg_attr(
574 feature = "mariadb_backend",
575 window(backends(diesel::mariadb::Mariadb), require_order = true)
576 )]
577 fn lead<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
578 value: T,
579 ) -> T::Nullable;
580
581 #[doc(alias = "lead")]
625 #[sql_name = "lead"]
626 #[window(dialect(
627 BuiltInWindowFunctionRequireOrder,
628 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
629 ))]
630 #[cfg_attr(
631 feature = "mysql_backend",
632 window(backends(diesel::mysql::Mysql), require_order = true)
633 )]
634 #[cfg_attr(
635 feature = "mariadb_backend",
636 window(backends(diesel::mariadb::Mariadb), require_order = true)
637 )]
638 fn lead_with_offset<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
639 value: T,
640 offset: Integer,
641 ) -> T::Nullable;
642
643 #[doc(alias = "lead")]
727 #[sql_name = "lead"]
728 #[window(dialect(
729 BuiltInWindowFunctionRequireOrder,
730 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
731 ))]
732 #[cfg_attr(
733 feature = "mysql_backend",
734 window(backends(diesel::mysql::Mysql), require_order = true)
735 )]
736 #[cfg_attr(
737 feature = "mariadb_backend",
738 window(backends(diesel::mariadb::Mariadb), require_order = true)
739 )]
740 fn lead_with_offset_and_default<
741 T: SqlType
742 + SingleValue
743 + IntoNotNullable<NotNullable: self::private::SameType<T2::NotNullable>>
744 + CombinedNullableValue<T2, T::NotNullable>,
745 T2: SqlType + SingleValue + IntoNotNullable,
746 >(
747 value: T,
748 offset: Integer,
749 default: T2,
750 ) -> T::Out;
751
752 #[window]
786 fn first_value<T: SqlType + SingleValue>(value: T) -> T;
787
788 #[window]
822 fn last_value<T: SqlType + SingleValue>(value: T) -> T;
823
824 #[window]
859 fn nth_value<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
860 value: T,
861 n: Integer,
862 ) -> T::Nullable;
863}
864
865mod private {
866 pub trait SameType<T> {}
867
868 impl<T> SameType<T> for T {}
869}