Merge branch 'master' into ss/bakery

This commit is contained in:
Sam Samai 2021-06-29 19:17:13 +10:00
commit 88bc1e1587
3 changed files with 84 additions and 13 deletions

View File

@ -66,10 +66,7 @@ async fn find_all(db: &DbConn) -> Result<(), QueryErr> {
async fn find_together(db: &DbConn) -> Result<(), QueryErr> {
print!("find cakes and fruits: ");
let both = Cake::find()
.find_also_related(Fruit)
.all(db)
.await?;
let both = Cake::find().find_also_related(Fruit).all(db).await?;
println!();
for bb in both.iter() {
@ -144,10 +141,8 @@ async fn count_fruits_by_cake(db: &DbConn) -> Result<(), QueryErr> {
async fn find_many_to_many(db: &DbConn) -> Result<(), QueryErr> {
print!("find cakes and fillings: ");
let both: Vec<(cake::Model, Vec<filling::Model>)> = Cake::find()
.find_with_related(Filling)
.all(db)
.await?;
let both: Vec<(cake::Model, Vec<filling::Model>)> =
Cake::find().find_with_related(Filling).all(db).await?;
println!();
for bb in both.iter() {

View File

@ -1,6 +1,7 @@
use crate::{ExecErr, ExecResult, QueryErr, QueryResult, Statement, Transaction};
use sea_query::{
MysqlQueryBuilder, PostgresQueryBuilder, QueryStatementBuilder, SqliteQueryBuilder,
MysqlQueryBuilder, PostgresQueryBuilder, QueryStatementBuilder, SchemaStatementBuilder,
SqliteQueryBuilder,
};
use std::{error::Error, fmt};
@ -22,6 +23,12 @@ pub enum QueryBuilderBackend {
Sqlite,
}
pub enum SchemaBuilderBackend {
MySql,
Postgres,
Sqlite,
}
#[derive(Debug)]
pub struct ConnectionErr;
@ -70,6 +77,18 @@ impl DatabaseConnection {
}
}
pub fn get_schema_builder_backend(&self) -> SchemaBuilderBackend {
match self {
#[cfg(feature = "sqlx-mysql")]
DatabaseConnection::SqlxMySqlPoolConnection(_) => SchemaBuilderBackend::MySql,
#[cfg(feature = "sqlx-sqlite")]
DatabaseConnection::SqlxSqlitePoolConnection(_) => SchemaBuilderBackend::Sqlite,
#[cfg(feature = "mock")]
DatabaseConnection::MockDatabaseConnection(_) => SchemaBuilderBackend::Postgres,
DatabaseConnection::Disconnected => panic!("Disconnected"),
}
}
pub async fn execute(&self, stmt: Statement) -> Result<ExecResult, ExecErr> {
match self {
#[cfg(feature = "sqlx-mysql")]
@ -139,3 +158,17 @@ impl QueryBuilderBackend {
.into()
}
}
impl SchemaBuilderBackend {
pub fn build<S>(&self, statement: &S) -> Statement
where
S: SchemaStatementBuilder,
{
match self {
Self::MySql => statement.build(MysqlQueryBuilder),
Self::Postgres => statement.build(PostgresQueryBuilder),
Self::Sqlite => statement.build(SqliteQueryBuilder),
}
.into()
}
}

View File

@ -1,4 +1,47 @@
//! # Select
//! <div align="center">
//!
//! <img src="docs/SeaORM banner.png"/>
//!
//! <h1>SeaORM</h1>
//!
//! <p>
//! <strong>🐚 An async & dynamic ORM for Rust</strong>
//! </p>
//!
//! <sub>Built with 🔥 by 🌊🦀🐚</sub>
//!
//! </div>
//!
//! # SeaORM
//!
//! Inspired by ActiveRecord, Eloquent and TypeORM, SeaORM aims to provide you an intuitive and ergonomic
//! API to make working with databases in Rust a first-class experience.
//!
//! ```ignore
//! This is an early WIP of SeaORM, and is not yet published. See [example](examples/sqlx-mysql/src) for demo usage.
//! ```
//!
//! ## Features
//!
//! 1. Async
//!
//! Relying on SQLx, SeaORM is a new library with async support from day 1.
//!
//! 2. Dynamic
//!
//! Built upon SeaQuery, a dynamic query builder, SeaORM allows you to build complex queries without 'fighting the ORM'.
//!
//! 3. Testable
//!
//! Use mock connections to write unit tests for your logic.
//!
//! 4. API oriented
//!
//! Quickly build search models that help you join, filter, sort and paginate data in APIs.
//!
//! # A quick taste of SeaORM
//!
//! ## Select
//! ```
//! # use sea_orm::{DbConn, entity::*, query::*, tests_cfg::*};
//! # async fn function(db: &DbConn) -> Result<(), QueryErr> {
@ -28,7 +71,7 @@
//! # Ok(())
//! # }
//! ```
//! # Insert
//! ## Insert
//! ```
//! # use sea_orm::{DbConn, entity::*, query::*, tests_cfg::*};
//! # async fn function(db: &DbConn) -> Result<(), ExecErr> {
@ -68,7 +111,7 @@
//! # Ok(())
//! # }
//! ```
//! # Update
//! ## Update
//! ```
//! # use sea_orm::{DbConn, entity::*, query::*, tests_cfg::*};
//! #
@ -98,7 +141,7 @@
//! # Ok(())
//! # }
//! ```
//! # Delete
//! ## Delete
//! ```
//! # use sea_orm::{DbConn, entity::*, query::*, tests_cfg::*};
//! #