diff --git a/src/mysql/writer/mod.rs b/src/mysql/writer/mod.rs index e5eb498a..5c2bae8d 100644 --- a/src/mysql/writer/mod.rs +++ b/src/mysql/writer/mod.rs @@ -13,14 +13,10 @@ pub use table::*; pub use types::*; use super::def::Schema; -use sea_query::SchemaStatement; +use sea_query::TableCreateStatement; impl Schema { - pub fn write(&self) -> Vec { - let mut statements = Vec::new(); - for table in self.tables.iter() { - statements.push(SchemaStatement::TableStatement(table.write())); - } - statements + pub fn write(&self) -> Vec { + self.tables.iter().map(|table| table.write()).collect() } } diff --git a/src/mysql/writer/table.rs b/src/mysql/writer/table.rs index b9f1eed4..4a6b1ba7 100644 --- a/src/mysql/writer/table.rs +++ b/src/mysql/writer/table.rs @@ -1,8 +1,8 @@ use crate::mysql::def::TableDef; -use sea_query::{Alias, Iden, Table, TableStatement}; +use sea_query::{Alias, Iden, Table, TableCreateStatement}; impl TableDef { - pub fn write(&self) -> TableStatement { + pub fn write(&self) -> TableCreateStatement { let mut table = Table::create(); table.table(Alias::new(self.info.name.as_ref())); for col in self.columns.iter() { @@ -17,7 +17,7 @@ impl TableDef { for key in self.foreign_keys.iter() { table.foreign_key(&mut key.write()); } - TableStatement::Create(table) + table } } diff --git a/src/postgres/writer/mod.rs b/src/postgres/writer/mod.rs index 732480f4..fb935fc5 100644 --- a/src/postgres/writer/mod.rs +++ b/src/postgres/writer/mod.rs @@ -13,14 +13,10 @@ pub use table::*; pub use types::*; use super::def::Schema; -use sea_query::SchemaStatement; +use sea_query::TableCreateStatement; impl Schema { - pub fn write(&self) -> Vec { - let mut statements = Vec::new(); - for table in self.tables.iter() { - statements.push(SchemaStatement::TableStatement(table.write())); - } - statements + pub fn write(&self) -> Vec { + self.tables.iter().map(|table| table.write()).collect() } } diff --git a/src/postgres/writer/table.rs b/src/postgres/writer/table.rs index 67cfbbd5..f4cd5958 100644 --- a/src/postgres/writer/table.rs +++ b/src/postgres/writer/table.rs @@ -1,8 +1,8 @@ use crate::postgres::def::TableDef; -use sea_query::{Alias, Table, TableStatement}; +use sea_query::{Alias, Table, TableCreateStatement}; impl TableDef { - pub fn write(&self) -> TableStatement { + pub fn write(&self) -> TableCreateStatement { let mut table = Table::create(); table.table(Alias::new(self.info.name.as_ref())); for col in self.columns.iter() { @@ -17,6 +17,6 @@ impl TableDef { for reference in self.reference_constraints.iter() { table.foreign_key(&mut reference.write()); } - TableStatement::Create(table) + table } } diff --git a/src/sqlite/discovery.rs b/src/sqlite/discovery.rs index 56acadaf..d5f083b6 100644 --- a/src/sqlite/discovery.rs +++ b/src/sqlite/discovery.rs @@ -30,6 +30,7 @@ impl SchemaDiscovery { .column(Alias::new("name")) .from(Alias::new("sqlite_master")) .and_where(Expr::col(Alias::new("type")).eq("table")) + .and_where(Expr::col(Alias::new("name")).ne("sqlite_sequence")) .to_owned(); let mut tables = Vec::new(); @@ -50,6 +51,7 @@ impl SchemaDiscovery { .column(Alias::new("name")) .from(Alias::new("sqlite_master")) .and_where(Expr::col(Alias::new("type")).eq("table")) + .and_where(Expr::col(Alias::new("name")).ne("sqlite_sequence")) .to_owned(); let mut tables = Vec::new(); diff --git a/src/sqlite/errors.rs b/src/sqlite/errors.rs index 227a1258..c6eafb22 100644 --- a/src/sqlite/errors.rs +++ b/src/sqlite/errors.rs @@ -34,3 +34,16 @@ impl From for SqliteDiscoveryError { SqliteDiscoveryError::SqlxError(error) } } + +impl std::error::Error for SqliteDiscoveryError {} + +impl std::fmt::Display for SqliteDiscoveryError { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + SqliteDiscoveryError::ParseIntError => write!(f, "Parse Integer Error"), + SqliteDiscoveryError::ParseFloatError => write!(f, "Parse Float Error Error"), + SqliteDiscoveryError::SqlxError(e) => write!(f, "SQLx Error: {}", e), + SqliteDiscoveryError::NoIndexesFound => write!(f, "No Indexes Found Error"), + } + } +} diff --git a/src/sqlite/types.rs b/src/sqlite/types.rs index cc77197f..944de162 100644 --- a/src/sqlite/types.rs +++ b/src/sqlite/types.rs @@ -31,6 +31,7 @@ pub enum Type { Boolean, Date, DateTime, + Timestamp, } impl Type { @@ -71,6 +72,7 @@ impl Type { "BOOLEAN" => Type::Boolean, "DATE" => Type::Date, "DATETIME" => Type::DateTime, + "TIMESTAMP" => Type::Timestamp, _ => Type::variable_types(&split_type)?, }; @@ -100,7 +102,7 @@ impl Type { | Self::NvarChar { .. } | Self::Text | Self::Clob => { - column_def.text(); + column_def.string(); } Self::Blob => { column_def.custom(Alias::new("BLOB")); @@ -123,6 +125,9 @@ impl Type { Self::DateTime => { column_def.date_time(); } + Self::Timestamp => { + column_def.timestamp(); + } } } diff --git a/tests/live/sqlite/src/main.rs b/tests/live/sqlite/src/main.rs index 51fcfb2c..b66db18a 100644 --- a/tests/live/sqlite/src/main.rs +++ b/tests/live/sqlite/src/main.rs @@ -216,7 +216,6 @@ async fn test_001() -> DiscoveryResult<()> { .collect::>(), vec![ create_table.to_string(SqliteQueryBuilder), - "CREATE TABLE `sqlite_sequence` ( `name` BLOB, `seq` BLOB )".to_owned(), table_create_supplier_groups.to_string(SqliteQueryBuilder), table_create_suppliers.to_string(SqliteQueryBuilder), ]