From ccb8818365ff7b5652ba50d6262ba61b9ea81b89 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Thu, 1 Dec 2022 14:01:11 +0800 Subject: [PATCH] Add `QuerySelect::columns` method (#1264) --- src/query/helper.rs | 66 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/query/helper.rs b/src/query/helper.rs index 4bd35e1e4..42e70fe37 100644 --- a/src/query/helper.rs +++ b/src/query/helper.rs @@ -97,6 +97,72 @@ pub trait QuerySelect: Sized { self } + /// Select columns + /// + /// ``` + /// use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend}; + /// + /// assert_eq!( + /// cake::Entity::find() + /// .select_only() + /// .columns([cake::Column::Id, cake::Column::Name]) + /// .build(DbBackend::Postgres) + /// .to_string(), + /// r#"SELECT "cake"."id", "cake"."name" FROM "cake""# + /// ); + /// ``` + /// + /// Conditionally select all columns expect a specific column + /// + /// ``` + /// use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend}; + /// + /// assert_eq!( + /// cake::Entity::find() + /// .select_only() + /// .columns(cake::Column::iter().filter(|col| match col { + /// cake::Column::Id => false, + /// _ => true, + /// })) + /// .build(DbBackend::Postgres) + /// .to_string(), + /// r#"SELECT "cake"."name" FROM "cake""# + /// ); + /// ``` + /// + /// Enum column will be casted into text (PostgreSQL only) + /// + /// ``` + /// use sea_orm::{entity::*, query::*, tests_cfg::lunch_set, DbBackend}; + /// + /// assert_eq!( + /// lunch_set::Entity::find() + /// .select_only() + /// .columns([lunch_set::Column::Name, lunch_set::Column::Tea]) + /// .build(DbBackend::Postgres) + /// .to_string(), + /// r#"SELECT "lunch_set"."name", CAST("lunch_set"."tea" AS text) FROM "lunch_set""# + /// ); + /// assert_eq!( + /// lunch_set::Entity::find() + /// .select_only() + /// .columns([lunch_set::Column::Name, lunch_set::Column::Tea]) + /// .build(DbBackend::MySql) + /// .to_string(), + /// r#"SELECT `lunch_set`.`name`, `lunch_set`.`tea` FROM `lunch_set`"# + /// ); + /// ``` + fn columns(mut self, cols: I) -> Self + where + C: ColumnTrait, + I: IntoIterator, + { + for col in cols.into_iter() { + self = self.column(col); + } + self + } + /// Add an offset expression /// ``` /// use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend};