diff --git a/Cargo.toml b/Cargo.toml index 6ea8f82a..c477626d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ ".", + "examples/sqlx-mysql", ] [package] diff --git a/bakery.sql b/examples/bakery.sql similarity index 100% rename from bakery.sql rename to examples/bakery.sql diff --git a/examples/sqlx-mysql/Cargo.toml b/examples/sqlx-mysql/Cargo.toml new file mode 100644 index 00000000..b2e70b7a --- /dev/null +++ b/examples/sqlx-mysql/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "sea-orm-sqlx-mysql-example" +version = "0.1.0" +edition = "2018" +publish = false + +[dependencies] +async-std = { version = "^1.9", features = [ "attributes" ] } +sea-orm = { path = "../../", features = [ "sqlx-mysql", "runtime-async-std-native-tls" ] } +# sea-query = { path = "../../../sea-query" } \ No newline at end of file diff --git a/examples/sqlx-mysql/src/main.rs b/examples/sqlx-mysql/src/main.rs new file mode 100644 index 00000000..4bd819e8 --- /dev/null +++ b/examples/sqlx-mysql/src/main.rs @@ -0,0 +1,18 @@ +use sea_orm::{tests_cfg::*, Database, Entity}; + +#[async_std::main] +async fn main() { + let mut db = Database::default(); + db.connect("mysql://sea:sea@localhost/bakery") + .await + .unwrap(); + println!("{:?}", db); + println!(""); + + let rows = cake::Cake::find().all(&db).await.unwrap(); + + for row in rows.iter() { + println!("{:?}", row); + println!(""); + } +} diff --git a/src/connector/mod.rs b/src/connector/mod.rs index 03002862..55c5b138 100644 --- a/src/connector/mod.rs +++ b/src/connector/mod.rs @@ -1,3 +1,7 @@ +mod select; + +pub use select::*; + use crate::{DatabaseConnection, QueryResult}; use async_trait::async_trait; use sea_query::{inject_parameters, MySqlQueryBuilder, Values}; diff --git a/src/connector/select.rs b/src/connector/select.rs new file mode 100644 index 00000000..e3617da2 --- /dev/null +++ b/src/connector/select.rs @@ -0,0 +1,16 @@ +use crate::{Connection, Database, Entity, QueryErr, QueryResult, Select}; + +impl Select<'_, E> +where + E: Entity, +{ + pub async fn one(self, db: &Database) -> Result { + let builder = db.get_query_builder_backend(); + db.get_connection().query_one(self.build(builder)).await + } + + pub async fn all(self, db: &Database) -> Result, QueryErr> { + let builder = db.get_query_builder_backend(); + db.get_connection().query_all(self.build(builder)).await + } +} diff --git a/src/database/mod.rs b/src/database/mod.rs index c6efa441..b30170b0 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -1,4 +1,5 @@ use crate::{Connection, ConnectionErr, Connector, SqlxMySqlConnector, SqlxMySqlPoolConnection}; +use sea_query::{GenericBuilder, MySqlQueryBuilder}; #[derive(Debug, Default)] pub struct Database { @@ -48,4 +49,11 @@ impl Database { DatabaseConnection::Disconnected => panic!("Disconnected"), } } + + pub fn get_query_builder_backend(&self) -> impl GenericBuilder { + match &self.connection { + DatabaseConnection::SqlxMySqlPoolConnection(_) => MySqlQueryBuilder::default(), + DatabaseConnection::Disconnected => panic!("Disconnected"), + } + } } diff --git a/src/lib.rs b/src/lib.rs index eb0a9228..8bd611da 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ mod database; mod driver; mod entity; mod query; -pub(crate) mod tests_cfg; +pub mod tests_cfg; mod util; pub use connector::*; diff --git a/src/query/result.rs b/src/query/result.rs index a66c0de5..2b6932b2 100644 --- a/src/query/result.rs +++ b/src/query/result.rs @@ -1,9 +1,11 @@ use sqlx::mysql::MySqlRow; +#[derive(Debug)] pub struct QueryResult { pub(crate) row: QueryResultRow, } +#[derive(Debug)] pub(crate) enum QueryResultRow { SqlxMySql(MySqlRow), } diff --git a/src/tests_cfg/cake.rs b/src/tests_cfg/cake.rs index f232d9fe..d6650a7d 100644 --- a/src/tests_cfg/cake.rs +++ b/src/tests_cfg/cake.rs @@ -5,6 +5,12 @@ use strum::EnumIter; #[derive(Iden, Default, Debug)] pub struct Cake; +#[derive(Debug, Default, PartialEq)] +pub struct CakeModel { + pub id: Option, + pub name: Option, +} + #[derive(Iden, EnumIter)] pub enum CakeColumn { Id, @@ -14,12 +20,6 @@ pub enum CakeColumn { #[derive(EnumIter)] pub enum CakeRelation {} -#[derive(Debug, Default, PartialEq)] -pub struct CakeModel { - pub id: Option, - pub name: Option, -} - impl Entity for Cake { type Model = CakeModel;