sea_query::query

Trait OrderedStatement

source
pub trait OrderedStatement {
    // Required method
    fn clear_order_by(&mut self) -> &mut Self;

    // Provided methods
    fn order_by<T>(&mut self, col: T, order: Order) -> &mut Self
       where T: IntoColumnRef { ... }
    fn order_by_expr(&mut self, expr: SimpleExpr, order: Order) -> &mut Self { ... }
    fn order_by_customs<I, T>(&mut self, cols: I) -> &mut Self
       where T: ToString,
             I: IntoIterator<Item = (T, Order)> { ... }
    fn order_by_columns<I, T>(&mut self, cols: I) -> &mut Self
       where T: IntoColumnRef,
             I: IntoIterator<Item = (T, Order)> { ... }
    fn order_by_with_nulls<T>(
        &mut self,
        col: T,
        order: Order,
        nulls: NullOrdering,
    ) -> &mut Self
       where T: IntoColumnRef { ... }
    fn order_by_expr_with_nulls(
        &mut self,
        expr: SimpleExpr,
        order: Order,
        nulls: NullOrdering,
    ) -> &mut Self { ... }
    fn order_by_customs_with_nulls<I, T>(&mut self, cols: I) -> &mut Self
       where T: ToString,
             I: IntoIterator<Item = (T, Order, NullOrdering)> { ... }
    fn order_by_columns_with_nulls<I, T>(&mut self, cols: I) -> &mut Self
       where T: IntoColumnRef,
             I: IntoIterator<Item = (T, Order, NullOrdering)> { ... }
}

Required Methods§

source

fn clear_order_by(&mut self) -> &mut Self

Clear order expressions

Provided Methods§

source

fn order_by<T>(&mut self, col: T, order: Order) -> &mut Self
where T: IntoColumnRef,

Order by column.

§Examples

Order by ASC and DESC

use sea_query::{*, tests_cfg::*};

let query = Query::select()
    .column(Glyph::Aspect)
    .from(Glyph::Table)
    .and_where(Expr::expr(Expr::col(Glyph::Aspect).if_null(0)).gt(2))
    .order_by(Glyph::Image, Order::Desc)
    .order_by((Glyph::Table, Glyph::Aspect), Order::Asc)
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `aspect` FROM `glyph` WHERE IFNULL(`aspect`, 0) > 2 ORDER BY `image` DESC, `glyph`.`aspect` ASC"#
);

Order by custom field ordering

use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .columns([Glyph::Aspect])
    .from(Glyph::Table)
    .order_by(
        Glyph::Id,
        Order::Field(Values(vec![4.into(), 5.into(), 1.into(), 3.into()])),
    )
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    [
        r#"SELECT `aspect`"#,
        r#"FROM `glyph`"#,
        r#"ORDER BY CASE"#,
        r#"WHEN `id`=4 THEN 0"#,
        r#"WHEN `id`=5 THEN 1"#,
        r#"WHEN `id`=1 THEN 2"#,
        r#"WHEN `id`=3 THEN 3"#,
        r#"ELSE 4 END"#,
    ]
    .join(" ")
);

assert_eq!(
    query.to_string(PostgresQueryBuilder),
    [
        r#"SELECT "aspect""#,
        r#"FROM "glyph""#,
        r#"ORDER BY CASE"#,
        r#"WHEN "id"=4 THEN 0"#,
        r#"WHEN "id"=5 THEN 1"#,
        r#"WHEN "id"=1 THEN 2"#,
        r#"WHEN "id"=3 THEN 3"#,
        r#"ELSE 4 END"#,
    ]
    .join(" ")
);

assert_eq!(
    query.to_string(SqliteQueryBuilder),
    [
        r#"SELECT "aspect""#,
        r#"FROM "glyph""#,
        r#"ORDER BY CASE"#,
        r#"WHEN "id"=4 THEN 0"#,
        r#"WHEN "id"=5 THEN 1"#,
        r#"WHEN "id"=1 THEN 2"#,
        r#"WHEN "id"=3 THEN 3"#,
        r#"ELSE 4 END"#,
    ]
    .join(" ")
);
source

fn order_by_expr(&mut self, expr: SimpleExpr, order: Order) -> &mut Self

Order by SimpleExpr.

source

fn order_by_customs<I, T>(&mut self, cols: I) -> &mut Self
where T: ToString, I: IntoIterator<Item = (T, Order)>,

Order by custom string.

source

fn order_by_columns<I, T>(&mut self, cols: I) -> &mut Self
where T: IntoColumnRef, I: IntoIterator<Item = (T, Order)>,

Order by vector of columns.

source

fn order_by_with_nulls<T>( &mut self, col: T, order: Order, nulls: NullOrdering, ) -> &mut Self
where T: IntoColumnRef,

Order by column with nulls order option.

§Examples
use sea_query::{*, tests_cfg::*};

let query = Query::select()
    .column(Glyph::Aspect)
    .from(Glyph::Table)
    .order_by_with_nulls(Glyph::Image, Order::Desc, NullOrdering::Last)
    .order_by_with_nulls((Glyph::Table, Glyph::Aspect), Order::Asc, NullOrdering::First)
    .to_owned();

assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "aspect" FROM "glyph" ORDER BY "image" DESC NULLS LAST, "glyph"."aspect" ASC NULLS FIRST"#
);
assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `aspect` FROM `glyph` ORDER BY `image` IS NULL ASC, `image` DESC, `glyph`.`aspect` IS NULL DESC, `glyph`.`aspect` ASC"#
);
source

fn order_by_expr_with_nulls( &mut self, expr: SimpleExpr, order: Order, nulls: NullOrdering, ) -> &mut Self

Order by SimpleExpr with nulls order option.

source

fn order_by_customs_with_nulls<I, T>(&mut self, cols: I) -> &mut Self
where T: ToString, I: IntoIterator<Item = (T, Order, NullOrdering)>,

Order by custom string with nulls order option.

source

fn order_by_columns_with_nulls<I, T>(&mut self, cols: I) -> &mut Self
where T: IntoColumnRef, I: IntoIterator<Item = (T, Order, NullOrdering)>,

Order by vector of columns with nulls order option.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§