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 = " # 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) -> row_number { *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 = " # 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) -> rank { *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 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 = " # 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) -> dense_rank { *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 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 = " # 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) -> percent_rank { *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 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 = " # 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) -> cume_dist { *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 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 = " # 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> ::std::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> ::std::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> ::std::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> ::std::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) -> ntile<num_buckets> {
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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "T", &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone>
::core::clone::Clone for lag<T, value> {
#[inline]
fn clone(&self) -> lag<T, value> {
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> 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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "offset",
&self.offset, "T", &&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) -> lag_with_offset<T, value, offset> {
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> 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 =
" # #[cfg(not(feature = \"mysql\"))] // mariadb doesn\'t support this variant"]
#[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 = \"mysql\")]"]
#[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: ::std::marker::PhantomData,
T2: ::std::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: ::std::marker::PhantomData<T>,
pub(in super) T2: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "offset",
&self.offset, "default", &self.default, "T", &self.T, "T2",
&&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)
-> lag_with_offset_and_default<T, T2, value, offset, default> {
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> 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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "T", &&self.T)
}
}
#[automatically_derived]
impl<T: ::core::clone::Clone, value: ::core::clone::Clone>
::core::clone::Clone for lead<T, value> {
#[inline]
fn clone(&self) -> lead<T, value> {
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> 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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "offset",
&self.offset, "T", &&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) -> lead_with_offset<T, value, offset> {
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> 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 =
" # #[cfg(not(feature = \"mysql\"))] // mariadb doesn\'t support this variant"]
#[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 = \"mysql\")]"]
#[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: ::std::marker::PhantomData,
T2: ::std::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: ::std::marker::PhantomData<T>,
pub(in super) T2: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value,
"offset", &self.offset, "default", &self.default, "T",
&self.T, "T2", &&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)
-> lead_with_offset_and_default<T, T2, value, offset, default> {
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> 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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "T", &&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) -> first_value<T, value> {
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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "T", &&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) -> last_value<T, value> {
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 = " # 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: ::std::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: ::std::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> ::std::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> ::std::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> ::std::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> ::std::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", &self.value, "n", &self.n, "T", &&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) -> nth_value<T, value, n> {
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]
38 fn row_number() -> BigInt;
39
40 #[window(dialect(
75 BuiltInWindowFunctionRequireOrder,
76 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
77 ))]
78 #[cfg_attr(
79 feature = "mysql_backend",
80 window(backends(diesel::mysql::Mysql), require_order = true)
81 )]
82 fn rank() -> BigInt;
83
84 #[window(dialect(
119 BuiltInWindowFunctionRequireOrder,
120 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
121 ))]
122 #[cfg_attr(
123 feature = "mysql_backend",
124 window(backends(diesel::mysql::Mysql), require_order = true)
125 )]
126 fn dense_rank() -> BigInt;
127
128 #[window(dialect(
164 BuiltInWindowFunctionRequireOrder,
165 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
166 ))]
167 #[cfg_attr(
168 feature = "mysql_backend",
169 window(backends(diesel::mysql::Mysql), require_order = true)
170 )]
171 fn percent_rank() -> Double;
172
173 #[window(dialect(
209 BuiltInWindowFunctionRequireOrder,
210 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
211 ))]
212 #[cfg_attr(
213 feature = "mysql_backend",
214 window(backends(diesel::mysql::Mysql), require_order = true)
215 )]
216 fn cume_dist() -> Double;
217
218 #[window]
248 fn ntile(num_buckets: Integer) -> Integer;
249
250 #[window(dialect(
288 BuiltInWindowFunctionRequireOrder,
289 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
290 ))]
291 #[cfg_attr(
292 feature = "mysql_backend",
293 window(backends(diesel::mysql::Mysql), require_order = true)
294 )]
295 fn lag<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(value: T)
296 -> T::Nullable;
297
298 #[doc(alias = "lag")]
335 #[sql_name = "lag"]
336 #[window(dialect(
337 BuiltInWindowFunctionRequireOrder,
338 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
339 ))]
340 #[cfg_attr(
341 feature = "mysql_backend",
342 window(backends(diesel::mysql::Mysql), require_order = true)
343 )]
344 fn lag_with_offset<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
345 value: T,
346 offset: Integer,
347 ) -> T::Nullable;
348
349 #[doc(alias = "lag")]
428 #[sql_name = "lag"]
429 #[window(dialect(
430 BuiltInWindowFunctionRequireOrder,
431 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
432 ))]
433 #[cfg_attr(
434 feature = "mysql_backend",
435 window(backends(diesel::mysql::Mysql), require_order = true)
436 )]
437 fn lag_with_offset_and_default<
438 T: SqlType
439 + SingleValue
440 + IntoNotNullable<NotNullable: self::private::SameType<T2::NotNullable>>
441 + CombinedNullableValue<T2, T::NotNullable>,
442 T2: SqlType + SingleValue + IntoNotNullable,
443 >(
444 value: T,
445 offset: Integer,
446 default: T2,
447 ) -> T::Out;
448
449 #[window(dialect(
488 BuiltInWindowFunctionRequireOrder,
489 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
490 ))]
491 #[cfg_attr(
492 feature = "mysql_backend",
493 window(backends(diesel::mysql::Mysql), require_order = true)
494 )]
495 fn lead<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
496 value: T,
497 ) -> T::Nullable;
498
499 #[doc(alias = "lead")]
538 #[sql_name = "lead"]
539 #[window(dialect(
540 BuiltInWindowFunctionRequireOrder,
541 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
542 ))]
543 #[cfg_attr(
544 feature = "mysql_backend",
545 window(backends(diesel::mysql::Mysql), require_order = true)
546 )]
547 fn lead_with_offset<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
548 value: T,
549 offset: Integer,
550 ) -> T::Nullable;
551
552 #[doc(alias = "lead")]
631 #[sql_name = "lead"]
632 #[window(dialect(
633 BuiltInWindowFunctionRequireOrder,
634 crate::backend::sql_dialect::built_in_window_function_require_order::NoOrderRequired
635 ))]
636 #[cfg_attr(
637 feature = "mysql_backend",
638 window(backends(diesel::mysql::Mysql), require_order = true)
639 )]
640 fn lead_with_offset_and_default<
641 T: SqlType
642 + SingleValue
643 + IntoNotNullable<NotNullable: self::private::SameType<T2::NotNullable>>
644 + CombinedNullableValue<T2, T::NotNullable>,
645 T2: SqlType + SingleValue + IntoNotNullable,
646 >(
647 value: T,
648 offset: Integer,
649 default: T2,
650 ) -> T::Out;
651
652 #[window]
681 fn first_value<T: SqlType + SingleValue>(value: T) -> T;
682
683 #[window]
712 fn last_value<T: SqlType + SingleValue>(value: T) -> T;
713
714 #[window]
744 fn nth_value<T: SqlType + SingleValue + IntoNullable<Nullable: SingleValue>>(
745 value: T,
746 n: Integer,
747 ) -> T::Nullable;
748}
749
750mod private {
751 pub trait SameType<T> {}
752
753 impl<T> SameType<T> for T {}
754}