From ab3fab701e8d99dfbb82d4a2e58c6daae1871009 Mon Sep 17 00:00:00 2001 From: Ivan Krivosheev Date: Wed, 1 Feb 2023 20:06:29 +0300 Subject: [PATCH 1/2] Move Asteriks from Expr to new type --- src/expr.rs | 103 ++-------------------------------------- src/types.rs | 19 ++++++++ tests/mysql/query.rs | 8 ++-- tests/postgres/query.rs | 10 ++-- tests/sqlite/query.rs | 8 ++-- 5 files changed, 36 insertions(+), 112 deletions(-) diff --git a/src/expr.rs b/src/expr.rs index 5c9c91474..ca4f82114 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -100,56 +100,9 @@ impl Expr { } } - /// Express the asterisk without table prefix. - /// - /// # Examples - /// - /// ``` - /// use sea_query::{tests_cfg::*, *}; - /// - /// let query = Query::select() - /// .expr(Expr::asterisk()) - /// .from(Char::Table) - /// .to_owned(); - /// - /// assert_eq!( - /// query.to_string(MysqlQueryBuilder), - /// r#"SELECT * FROM `character`"# - /// ); - /// assert_eq!( - /// query.to_string(PostgresQueryBuilder), - /// r#"SELECT * FROM "character""# - /// ); - /// assert_eq!( - /// query.to_string(SqliteQueryBuilder), - /// r#"SELECT * FROM "character""# - /// ); - /// ``` - /// - /// ``` - /// use sea_query::{tests_cfg::*, *}; - /// - /// let query = Query::select() - /// .columns([Char::Character, Char::SizeW, Char::SizeH]) - /// .from(Char::Table) - /// .and_where(Expr::col((Char::Table, Char::SizeW)).eq(1)) - /// .to_owned(); - /// - /// assert_eq!( - /// query.to_string(MysqlQueryBuilder), - /// r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE `character`.`size_w` = 1"# - /// ); - /// assert_eq!( - /// query.to_string(PostgresQueryBuilder), - /// r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE "character"."size_w" = 1"# - /// ); - /// assert_eq!( - /// query.to_string(SqliteQueryBuilder), - /// r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE "character"."size_w" = 1"# - /// ); - /// ``` + #[deprecated(since = "0.29.0", note = "Please use the [`Asterisk`]")] pub fn asterisk() -> Self { - Self::col(ColumnRef::Asterisk) + Self::col(Asterisk) } /// Express the target column without table prefix. @@ -245,60 +198,12 @@ impl Expr { )) } - /// Express the asterisk with table prefix. - /// - /// # Examples - /// - /// ``` - /// use sea_query::{tests_cfg::*, *}; - /// - /// let query = Query::select() - /// .expr(Expr::asterisk()) - /// .from(Char::Table) - /// .to_owned(); - /// - /// assert_eq!( - /// query.to_string(MysqlQueryBuilder), - /// r#"SELECT * FROM `character`"# - /// ); - /// assert_eq!( - /// query.to_string(PostgresQueryBuilder), - /// r#"SELECT * FROM "character""# - /// ); - /// assert_eq!( - /// query.to_string(SqliteQueryBuilder), - /// r#"SELECT * FROM "character""# - /// ); - /// ``` - /// - /// ``` - /// use sea_query::{tests_cfg::*, *}; - /// - /// let query = Query::select() - /// .expr(Expr::table_asterisk(Char::Table)) - /// .column((Font::Table, Font::Name)) - /// .from(Char::Table) - /// .inner_join(Font::Table, Expr::col((Char::Table, Char::FontId)).equals((Font::Table, Font::Id))) - /// .to_owned(); - /// - /// assert_eq!( - /// query.to_string(MysqlQueryBuilder), - /// r#"SELECT `character`.*, `font`.`name` FROM `character` INNER JOIN `font` ON `character`.`font_id` = `font`.`id`"# - /// ); - /// assert_eq!( - /// query.to_string(PostgresQueryBuilder), - /// r#"SELECT "character".*, "font"."name" FROM "character" INNER JOIN "font" ON "character"."font_id" = "font"."id""# - /// ); - /// assert_eq!( - /// query.to_string(SqliteQueryBuilder), - /// r#"SELECT "character".*, "font"."name" FROM "character" INNER JOIN "font" ON "character"."font_id" = "font"."id""# - /// ); - /// ``` + #[deprecated(since = "0.29.0", note = "Please use the [`Asterisk`]")] pub fn table_asterisk(t: T) -> Self where T: IntoIden, { - Self::col(ColumnRef::TableAsterisk(t.into_iden())) + Self::col((t.into_iden(), Asterisk)) } /// Express a [`Value`], returning a [`Expr`]. diff --git a/src/types.rs b/src/types.rs index 3d618c447..4a81c22c6 100644 --- a/src/types.rs +++ b/src/types.rs @@ -204,6 +204,10 @@ pub struct Alias(String); #[derive(Default, Debug, Copy, Clone)] pub struct NullAlias; +/// Asterisk ("*") +#[derive(Default, Debug, Clone, Copy)] +pub struct Asterisk; + /// SQL Keywords #[derive(Debug, Clone)] pub enum Keyword { @@ -302,6 +306,12 @@ where } } +impl IntoColumnRef for Asterisk { + fn into_column_ref(self) -> ColumnRef { + ColumnRef::Asterisk + } +} + impl IntoColumnRef for (S, T) where S: IntoIden, @@ -312,6 +322,15 @@ where } } +impl IntoColumnRef for (T, Asterisk) +where + T: IntoIden, +{ + fn into_column_ref(self) -> ColumnRef { + ColumnRef::TableAsterisk(self.0.into_iden()) + } +} + impl IntoColumnRef for (S, T, U) where S: IntoIden, diff --git a/tests/mysql/query.rs b/tests/mysql/query.rs index 6f03ed4c0..453cecc8e 100644 --- a/tests/mysql/query.rs +++ b/tests/mysql/query.rs @@ -792,7 +792,7 @@ fn select_48a() { #[test] fn select_49() { let statement = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .to_string(MysqlQueryBuilder); @@ -802,7 +802,7 @@ fn select_49() { #[test] fn select_50() { let statement = Query::select() - .expr(Expr::table_asterisk(Char::Table)) + .column((Char::Table, Asterisk)) .column((Font::Table, Font::Name)) .from(Char::Table) .inner_join( @@ -901,7 +901,7 @@ fn select_53() { #[test] fn select_54() { let statement = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .from(Font::Table) .and_where(Expr::col((Font::Table, Font::Id)).equals((Char::Table, Char::FontId))) @@ -1418,7 +1418,7 @@ fn sub_query_with_fn() { pub struct ArrayFunc; let sub_select = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .to_owned(); diff --git a/tests/postgres/query.rs b/tests/postgres/query.rs index 1e39e4e40..a1d390d06 100644 --- a/tests/postgres/query.rs +++ b/tests/postgres/query.rs @@ -776,7 +776,7 @@ fn select_48a() { #[test] fn select_49() { let statement = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .to_string(PostgresQueryBuilder); @@ -786,7 +786,7 @@ fn select_49() { #[test] fn select_50() { let statement = Query::select() - .expr(Expr::table_asterisk(Char::Table)) + .column((Char::Table, Asterisk)) .column((Font::Table, Font::Name)) .from(Char::Table) .inner_join( @@ -907,7 +907,7 @@ fn select_54() { #[test] fn select_55() { let statement = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .from(Font::Table) .and_where(Expr::col((Font::Table, Font::Id)).equals((Char::Table, Char::FontId))) @@ -1071,7 +1071,7 @@ fn select_61() { #[test] fn select_62() { let select = SelectStatement::new() - .expr(Expr::asterisk()) + .column(Asterisk) .from_values([(1i32, "hello"), (2, "world")], Alias::new("x")) .to_owned(); let cte = CommonTableExpression::new() @@ -1711,7 +1711,7 @@ fn sub_query_with_fn() { pub struct ArrayFunc; let sub_select = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .to_owned(); diff --git a/tests/sqlite/query.rs b/tests/sqlite/query.rs index 46ef7b65e..541d6c22c 100644 --- a/tests/sqlite/query.rs +++ b/tests/sqlite/query.rs @@ -776,7 +776,7 @@ fn select_48a() { #[test] fn select_49() { let statement = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .to_string(SqliteQueryBuilder); @@ -786,7 +786,7 @@ fn select_49() { #[test] fn select_50() { let statement = Query::select() - .expr(Expr::table_asterisk(Char::Table)) + .column((Character::Table, Asterisk)) .column((Font::Table, Font::Name)) .from(Char::Table) .inner_join( @@ -879,7 +879,7 @@ fn select_53() { #[test] fn select_54() { let statement = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .from(Font::Table) .and_where(Expr::col((Font::Table, Font::Id)).equals((Char::Table, Char::FontId))) @@ -1560,7 +1560,7 @@ fn sub_query_with_fn() { pub struct ArrayFunc; let sub_select = Query::select() - .expr(Expr::asterisk()) + .column(Asterisk) .from(Char::Table) .to_owned(); From 96fb9514879f058d80cfe4e973be324bee2b0ada Mon Sep 17 00:00:00 2001 From: Ivan Krivosheev Date: Fri, 3 Feb 2023 12:17:56 +0300 Subject: [PATCH 2/2] Add tests --- src/types.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/types.rs b/src/types.rs index 4a81c22c6..4e0a78108 100644 --- a/src/types.rs +++ b/src/types.rs @@ -205,6 +205,58 @@ pub struct Alias(String); pub struct NullAlias; /// Asterisk ("*") +/// +/// Express the asterisk without table prefix. +/// +/// # Examples +/// +/// ``` +/// use sea_query::{tests_cfg::*, *}; +/// +/// let query = Query::select() +/// .column(Asterisk) +/// .from(Char::Table) +/// .to_owned(); +/// +/// assert_eq!( +/// query.to_string(MysqlQueryBuilder), +/// r#"SELECT * FROM `character`"# +/// ); +/// assert_eq!( +/// query.to_string(PostgresQueryBuilder), +/// r#"SELECT * FROM "character""# +/// ); +/// assert_eq!( +/// query.to_string(SqliteQueryBuilder), +/// r#"SELECT * FROM "character""# +/// ); +/// ``` +/// +/// Express the asterisk with table prefix. +/// +/// Examples +/// +/// ``` +/// use sea_query::{tests_cfg::*, *}; +/// +/// let query = Query::select() +/// .column((Char::Table, Asterisk)) +/// .from(Char::Table) +/// .to_owned(); +/// +/// assert_eq!( +/// query.to_string(MysqlQueryBuilder), +/// r#"SELECT `character`.* FROM `character`"# +/// ); +/// assert_eq!( +/// query.to_string(PostgresQueryBuilder), +/// r#"SELECT "character".* FROM "character""# +/// ); +/// assert_eq!( +/// query.to_string(SqliteQueryBuilder), +/// r#"SELECT "character".* FROM "character""# +/// ); +/// ``` #[derive(Default, Debug, Clone, Copy)] pub struct Asterisk;