From 481d5bea795ef739e7236c8ca35b8f4f9d1cad57 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 3 May 2024 12:56:28 +0800 Subject: [PATCH] Added `ColumnType::Blob` --- CHANGELOG.md | 6 ++++-- src/backend/mysql/table.rs | 1 + src/backend/postgres/table.rs | 3 ++- src/backend/sqlite/table.rs | 1 + src/extension/mysql/column.rs | 2 -- src/table/column.rs | 8 +++++--- tests/mysql/table.rs | 2 +- 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a52f3032..8f8c2814 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ assert_eq!( .col(ColumnDef::new(Alias::new("boolean_col")).boolean()) .col(ColumnDef::new(Alias::new("binary2")).binary_len(1024)) .col(ColumnDef::new(Alias::new("binary3")).var_binary(1024)) + .col(ColumnDef::new(Alias::new("binary4")).blob()) .to_string(SqliteQueryBuilder), [ r#"CREATE TABLE "strange" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,"#, @@ -77,7 +78,8 @@ assert_eq!( r#""datetime_col" datetime_text,"#, r#""boolean_col" boolean,"#, r#""binary2" blob(1024),"#, - r#""binary3" varbinary_blob(1024)"#, + r#""binary3" varbinary_blob(1024),"#, + r#""binary4" blob"#, r#")"#, ] .join(" ") @@ -91,7 +93,7 @@ assert_eq!( .table(BinaryType::Table) .col(ColumnDef::new(BinaryType::BinaryLen).binary_len(32)) .col(ColumnDef::new(BinaryType::Binary).binary()) - .col(ColumnDef::new(BinaryType::Blob).custom(MySqlType::Blob)) + .col(ColumnDef::new(BinaryType::Blob).blob()) .col(ColumnDef::new(BinaryType::TinyBlob).custom(MySqlType::TinyBlob)) .col(ColumnDef::new(BinaryType::MediumBlob).custom(MySqlType::MediumBlob)) .col(ColumnDef::new(BinaryType::LongBlob).custom(MySqlType::LongBlob)) diff --git a/src/backend/mysql/table.rs b/src/backend/mysql/table.rs index 72f10c65..562ec36b 100644 --- a/src/backend/mysql/table.rs +++ b/src/backend/mysql/table.rs @@ -62,6 +62,7 @@ impl TableBuilder for MysqlQueryBuilder { StringLen::None => "varbinary(255)".into(), StringLen::Max => "varbinary(65535)".into(), }, + ColumnType::Blob => "blob".into(), ColumnType::Bit(length) => { match length { Some(length) => format!("bit({length})"), diff --git a/src/backend/postgres/table.rs b/src/backend/postgres/table.rs index f8c39ca4..a022d1d7 100644 --- a/src/backend/postgres/table.rs +++ b/src/backend/postgres/table.rs @@ -47,7 +47,8 @@ impl TableBuilder for PostgresQueryBuilder { } typ } - ColumnType::Binary(_) | ColumnType::VarBinary(_) => "bytea".into(), + ColumnType::Binary(_) | ColumnType::VarBinary(_) | ColumnType::Blob => + "bytea".into(), ColumnType::Bit(length) => { match length { Some(length) => format!("bit({length})"), diff --git a/src/backend/sqlite/table.rs b/src/backend/sqlite/table.rs index 974bcd01..834b0727 100644 --- a/src/backend/sqlite/table.rs +++ b/src/backend/sqlite/table.rs @@ -172,6 +172,7 @@ impl SqliteQueryBuilder { StringLen::N(length) => format!("varbinary_blob({length})"), _ => "varbinary_blob".into(), }, + ColumnType::Blob => "blob".into(), ColumnType::Boolean => "boolean".into(), ColumnType::Money(precision) => match precision { Some((precision, scale)) => format!("real_money({precision}, {scale})"), diff --git a/src/extension/mysql/column.rs b/src/extension/mysql/column.rs index 2782208a..232f8a98 100644 --- a/src/extension/mysql/column.rs +++ b/src/extension/mysql/column.rs @@ -2,7 +2,6 @@ use crate::Iden; #[derive(Debug, Copy, Clone)] pub enum MySqlType { - Blob, TinyBlob, MediumBlob, LongBlob, @@ -11,7 +10,6 @@ pub enum MySqlType { impl Iden for MySqlType { fn unquoted(&self, s: &mut dyn std::fmt::Write) { let ty = match self { - Self::Blob => "blob", Self::TinyBlob => "tinyblob", Self::MediumBlob => "mediumblob", Self::LongBlob => "longblob", diff --git a/src/table/column.rs b/src/table/column.rs index a231c66a..eac4ee72 100644 --- a/src/table/column.rs +++ b/src/table/column.rs @@ -38,6 +38,7 @@ pub trait IntoColumnDef { /// | Date | date | date | date_text | /// | Year | year | N/A | N/A | /// | Interval | N/A | interval | N/A | +/// | Blob | blob | bytea | blob | /// | Binary | binary | bytea | blob | /// | VarBinary | varbinary | bytea | varbinary_blob | /// | Bit | bit | bit | N/A | @@ -59,6 +60,7 @@ pub enum ColumnType { Char(Option), String(StringLen), Text, + Blob, TinyInteger, SmallInteger, Integer, @@ -512,10 +514,10 @@ impl ColumnDef { self } - #[cfg(feature = "backend-mysql")] - /// Set column type as blob. MySQL only. + /// Set column type as blob pub fn blob(&mut self) -> &mut Self { - self.custom(crate::extension::mysql::MySqlType::Blob) + self.types = Some(ColumnType::Blob); + self } /// Set column type as boolean diff --git a/tests/mysql/table.rs b/tests/mysql/table.rs index de397b34..0d3a7d09 100644 --- a/tests/mysql/table.rs +++ b/tests/mysql/table.rs @@ -189,7 +189,7 @@ fn create_7() { assert_eq!( Table::create() .table(Char::Table) - .col(ColumnDef::new(BinaryType::Blob).custom(MySqlType::Blob)) + .col(ColumnDef::new(BinaryType::Blob).blob()) .col(ColumnDef::new(Char::Character).binary()) .col(ColumnDef::new(Char::FontSize).binary_len(10)) .col(ColumnDef::new(Char::SizeW).var_binary(10))