Merge branch 'master' into set-if-not-equals
This commit is contained in:
commit
605ea19672
18
CHANGELOG.md
18
CHANGELOG.md
@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## 1.0.0-rc.4 - 2024-05-13
|
||||||
|
|
||||||
|
### Enhancements
|
||||||
|
|
||||||
|
* Added `QueryResult::column_names` https://github.com/SeaQL/sea-orm/pull/2148
|
||||||
|
* [sea-orm-macro] Add `@generated` in generated code https://github.com/SeaQL/sea-orm/pull/2199
|
||||||
|
|
||||||
|
### Upgrades
|
||||||
|
|
||||||
|
* Upgrade `sea-query` to `0.31.0-rc.6`
|
||||||
|
* Upgrade `sea-schema` to `0.15.0-rc.6`
|
||||||
|
|
||||||
|
### House Keeping
|
||||||
|
|
||||||
|
* Reduce warnings in integration tests https://github.com/SeaQL/sea-orm/pull/2177
|
||||||
|
|
||||||
## 1.0.0-rc.3 - 2024-03-26
|
## 1.0.0-rc.3 - 2024-03-26
|
||||||
|
|
||||||
### Enhancements
|
### Enhancements
|
||||||
@ -34,6 +50,8 @@ struct EntityNameNotAIdent {
|
|||||||
```
|
```
|
||||||
* Added `RelationDef::from_alias()` https://github.com/SeaQL/sea-orm/pull/2146
|
* Added `RelationDef::from_alias()` https://github.com/SeaQL/sea-orm/pull/2146
|
||||||
```rust
|
```rust
|
||||||
|
let cf = Alias::new("cf");
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cake::Entity::find()
|
cake::Entity::find()
|
||||||
.join_as(
|
.join_as(
|
||||||
|
@ -3,7 +3,7 @@ members = [".", "sea-orm-macros", "sea-orm-codegen"]
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "sea-orm"
|
name = "sea-orm"
|
||||||
version = "1.0.0-rc.3"
|
version = "1.0.0-rc.4"
|
||||||
authors = ["Chris Tsang <chris.2y3@outlook.com>"]
|
authors = ["Chris Tsang <chris.2y3@outlook.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "🐚 An async & dynamic ORM for Rust"
|
description = "🐚 An async & dynamic ORM for Rust"
|
||||||
@ -33,9 +33,9 @@ log = { version = "0.4", default-features = false }
|
|||||||
tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] }
|
tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] }
|
||||||
rust_decimal = { version = "1", default-features = false, optional = true }
|
rust_decimal = { version = "1", default-features = false, optional = true }
|
||||||
bigdecimal = { version = "0.3", default-features = false, optional = true }
|
bigdecimal = { version = "0.3", default-features = false, optional = true }
|
||||||
sea-orm-macros = { version = "1.0.0-rc.3", path = "sea-orm-macros", default-features = false, features = ["strum"] }
|
sea-orm-macros = { version = "1.0.0-rc.4", path = "sea-orm-macros", default-features = false, features = ["strum"] }
|
||||||
sea-query = { version = "0.31.0-rc.3", default-features = false, features = ["thread-safe", "hashable-value", "backend-mysql", "backend-postgres", "backend-sqlite"] }
|
sea-query = { version = "0.31.0-rc", default-features = false, features = ["thread-safe", "hashable-value", "backend-mysql", "backend-postgres", "backend-sqlite"] }
|
||||||
sea-query-binder = { version = "0.6.0-rc.1", default-features = false, optional = true }
|
sea-query-binder = { version = "0.6.0-rc", default-features = false, optional = true }
|
||||||
strum = { version = "0.26", default-features = false }
|
strum = { version = "0.26", default-features = false }
|
||||||
serde = { version = "1.0", default-features = false }
|
serde = { version = "1.0", default-features = false }
|
||||||
serde_json = { version = "1.0", default-features = false, optional = true }
|
serde_json = { version = "1.0", default-features = false, optional = true }
|
||||||
|
@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-actix-native-tls",
|
# "runtime-actix-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-async-std-native-tls",
|
"runtime-async-std-native-tls",
|
||||||
|
@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-tokio-native-tls",
|
"runtime-tokio-native-tls",
|
||||||
|
@ -16,4 +16,4 @@ version = "5.0.10"
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -14,7 +14,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-async-std-native-tls",
|
"runtime-async-std-native-tls",
|
||||||
|
@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-tokio-native-tls",
|
"runtime-tokio-native-tls",
|
||||||
|
1407
examples/loco_example/Cargo.lock
generated
1407
examples/loco_example/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -9,7 +9,7 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
loco-rs = { version = "0.2" }
|
loco-rs = { version = "0.4" }
|
||||||
migration = { path = "migration" }
|
migration = { path = "migration" }
|
||||||
|
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
@ -26,8 +26,8 @@ uuid = { version = "1.6.0", features = ["v4"] }
|
|||||||
tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] }
|
tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] }
|
||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
# path = "../../" # remove this line in your own project
|
path = "../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"sqlx-sqlite",
|
"sqlx-sqlite",
|
||||||
"sqlx-postgres",
|
"sqlx-postgres",
|
||||||
@ -43,7 +43,7 @@ required-features = []
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
serial_test = "2.0.0"
|
serial_test = "2.0.0"
|
||||||
rstest = "0.18.2"
|
rstest = "0.18.2"
|
||||||
loco-rs = { version = "0.2", features = ["testing"] }
|
loco-rs = { version = "0.4", features = ["testing"] }
|
||||||
insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] }
|
insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] }
|
||||||
|
|
||||||
# This allows us to develop using a local version of sea-orm
|
# This allows us to develop using a local version of sea-orm
|
||||||
@ -51,4 +51,3 @@ insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] }
|
|||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
sea-orm = { path = "../../" }
|
sea-orm = { path = "../../" }
|
||||||
sea-orm-migration = { path = "../../sea-orm-migration" }
|
sea-orm-migration = { path = "../../sea-orm-migration" }
|
||||||
loco-rs = { git = "https://github.com/billy1624/loco", branch = "sea-orm-v1.0" }
|
|
||||||
|
@ -10,11 +10,11 @@ path = "src/lib.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-std = { version = "1", features = ["attributes", "tokio1"] }
|
async-std = { version = "1", features = ["attributes", "tokio1"] }
|
||||||
loco-rs = { version = "0.2" }
|
loco-rs = { version = "0.4" }
|
||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
# path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI.
|
# Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI.
|
||||||
# View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime.
|
# View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime.
|
||||||
|
@ -24,11 +24,11 @@ async fn load_item(ctx: &AppContext, id: i32) -> Result<Model> {
|
|||||||
item.ok_or_else(|| Error::NotFound)
|
item.ok_or_else(|| Error::NotFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(State(ctx): State<AppContext>) -> Result<Json<Vec<Model>>> {
|
pub async fn list(State(ctx): State<AppContext>) -> Result<Response> {
|
||||||
format::json(Entity::find().all(&ctx.db).await?)
|
format::json(Entity::find().all(&ctx.db).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add(State(ctx): State<AppContext>, Json(params): Json<Params>) -> Result<Json<Model>> {
|
pub async fn add(State(ctx): State<AppContext>, Json(params): Json<Params>) -> Result<Response> {
|
||||||
let mut item = ActiveModel {
|
let mut item = ActiveModel {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
@ -41,7 +41,7 @@ pub async fn update(
|
|||||||
Path(id): Path<i32>,
|
Path(id): Path<i32>,
|
||||||
State(ctx): State<AppContext>,
|
State(ctx): State<AppContext>,
|
||||||
Json(params): Json<Params>,
|
Json(params): Json<Params>,
|
||||||
) -> Result<Json<Model>> {
|
) -> Result<Response> {
|
||||||
let item = load_item(&ctx, id).await?;
|
let item = load_item(&ctx, id).await?;
|
||||||
let mut item = item.into_active_model();
|
let mut item = item.into_active_model();
|
||||||
params.update(&mut item);
|
params.update(&mut item);
|
||||||
@ -49,12 +49,12 @@ pub async fn update(
|
|||||||
format::json(item)
|
format::json(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn remove(Path(id): Path<i32>, State(ctx): State<AppContext>) -> Result<()> {
|
pub async fn remove(Path(id): Path<i32>, State(ctx): State<AppContext>) -> Result<Response> {
|
||||||
load_item(&ctx, id).await?.delete(&ctx.db).await?;
|
load_item(&ctx, id).await?.delete(&ctx.db).await?;
|
||||||
format::empty()
|
format::empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_one(Path(id): Path<i32>, State(ctx): State<AppContext>) -> Result<Json<Model>> {
|
pub async fn get_one(Path(id): Path<i32>, State(ctx): State<AppContext>) -> Result<Response> {
|
||||||
format::json(load_item(&ctx, id).await?)
|
format::json(load_item(&ctx, id).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-async-std-native-tls",
|
"runtime-async-std-native-tls",
|
||||||
|
@ -13,4 +13,4 @@ rocket = { version = "0.5.0", features = ["json"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -14,7 +14,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"runtime-tokio-native-tls",
|
"runtime-tokio-native-tls",
|
||||||
"sqlx-postgres",
|
"sqlx-postgres",
|
||||||
|
@ -13,7 +13,7 @@ rocket = { version = "0.5.0", features = ["json"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
|
||||||
[dependencies.rocket_okapi]
|
[dependencies.rocket_okapi]
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
|
@ -14,7 +14,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"runtime-tokio-native-tls",
|
"runtime-tokio-native-tls",
|
||||||
# "sqlx-postgres",
|
# "sqlx-postgres",
|
||||||
|
@ -14,4 +14,4 @@ salvo = { version = "0.50" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-native-tls",
|
# "runtime-tokio-native-tls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-tokio-native-tls",
|
"runtime-tokio-native-tls",
|
||||||
|
@ -25,7 +25,7 @@ cargo run
|
|||||||
## Install Seaography
|
## Install Seaography
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cargo install seaography-cli@^1.0.0-rc.2
|
cargo install seaography-cli@^1.0.0-rc.3
|
||||||
```
|
```
|
||||||
|
|
||||||
## Generate GraphQL project
|
## Generate GraphQL project
|
||||||
|
@ -5,19 +5,19 @@ version = "0.3.0"
|
|||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
poem = { version = "1.3.56" }
|
poem = { version = "3.0" }
|
||||||
async-graphql-poem = { version = "5.0.10" }
|
async-graphql-poem = { version = "7.0" }
|
||||||
async-graphql = { version = "5.0.10", features = ["decimal", "chrono", "dataloader", "dynamic-schema"] }
|
async-graphql = { version = "7.0", features = ["decimal", "chrono", "dataloader", "dynamic-schema"] }
|
||||||
async-trait = { version = "0.1.72" }
|
async-trait = { version = "0.1.72" }
|
||||||
dotenv = "0.15.0"
|
dotenv = "0.15.0"
|
||||||
sea-orm = { version = "0.12.0", features = ["sqlx-mysql", "runtime-async-std-native-tls", "seaography"] }
|
sea-orm = { path = "../../../", features = ["sqlx-mysql", "runtime-async-std-native-tls", "seaography"] }
|
||||||
tokio = { version = "1.29.1", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.29.1", features = ["macros", "rt-multi-thread"] }
|
||||||
tracing = { version = "0.1.37" }
|
tracing = { version = "0.1.37" }
|
||||||
tracing-subscriber = { version = "0.3.17" }
|
tracing-subscriber = { version = "0.3.17" }
|
||||||
lazy_static = { version = "1.4.0" }
|
lazy_static = { version = "1.4.0" }
|
||||||
|
|
||||||
[dependencies.seaography]
|
[dependencies.seaography]
|
||||||
version = "1.0.0-rc.2" # seaography version
|
version = "1.0.0-rc.3" # seaography version
|
||||||
features = ["with-decimal", "with-chrono"]
|
features = ["with-decimal", "with-chrono"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
@ -25,3 +25,8 @@ serde_json = { version = "1.0.103" }
|
|||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = []
|
members = []
|
||||||
|
|
||||||
|
# This allows us to develop using a local version of sea-orm
|
||||||
|
# remove this section in your own project
|
||||||
|
[patch.crates-io]
|
||||||
|
sea-orm = { path = "../../../" }
|
||||||
|
@ -11,7 +11,7 @@ pub fn schema(
|
|||||||
depth: Option<usize>,
|
depth: Option<usize>,
|
||||||
complexity: Option<usize>,
|
complexity: Option<usize>,
|
||||||
) -> Result<Schema, SchemaError> {
|
) -> Result<Schema, SchemaError> {
|
||||||
let mut builder = Builder::new(&CONTEXT);
|
let mut builder = Builder::new(&CONTEXT, database.clone());
|
||||||
seaography::register_entities!(builder, [baker, bakery, cake, cake_baker,]);
|
seaography::register_entities!(builder, [baker, bakery, cake, cake_baker,]);
|
||||||
let schema = builder.schema_builder();
|
let schema = builder.schema_builder();
|
||||||
let schema = if let Some(depth) = depth {
|
let schema = if let Some(depth) = depth {
|
||||||
|
@ -14,12 +14,12 @@ path = "src/lib.rs"
|
|||||||
async-std = { version = "1", features = ["attributes", "tokio1"] }
|
async-std = { version = "1", features = ["attributes", "tokio1"] }
|
||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../.." # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
"runtime-async-std-native-tls",
|
"runtime-async-std-native-tls",
|
||||||
"sqlx-mysql",
|
"sqlx-mysql",
|
||||||
|
@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
|
@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] }
|
|||||||
|
|
||||||
[dependencies.sea-orm-migration]
|
[dependencies.sea-orm-migration]
|
||||||
path = "../../../sea-orm-migration" # remove this line in your own project
|
path = "../../../sea-orm-migration" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm-migration version
|
version = "1.0.0-rc.4" # sea-orm-migration version
|
||||||
features = [
|
features = [
|
||||||
# Enable following runtime and db backend features if you want to run migration via CLI
|
# Enable following runtime and db backend features if you want to run migration via CLI
|
||||||
# "runtime-tokio-rustls",
|
# "runtime-tokio-rustls",
|
||||||
|
@ -10,7 +10,7 @@ entity = { path = "../entity" }
|
|||||||
|
|
||||||
[dependencies.sea-orm]
|
[dependencies.sea-orm]
|
||||||
path = "../../../" # remove this line in your own project
|
path = "../../../" # remove this line in your own project
|
||||||
version = "1.0.0-rc.3" # sea-orm version
|
version = "1.0.0-rc.4" # sea-orm version
|
||||||
features = [
|
features = [
|
||||||
"debug-print",
|
"debug-print",
|
||||||
"runtime-tokio-rustls",
|
"runtime-tokio-rustls",
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "sea-orm-cli"
|
name = "sea-orm-cli"
|
||||||
version = "1.0.0-rc.3"
|
version = "1.0.0-rc.4"
|
||||||
authors = [
|
authors = [
|
||||||
"Chris Tsang <chris.2y3@outlook.com>",
|
"Chris Tsang <chris.2y3@outlook.com>",
|
||||||
"Billy Chan <ccw.billy.123@gmail.com>",
|
"Billy Chan <ccw.billy.123@gmail.com>",
|
||||||
@ -37,8 +37,8 @@ required-features = ["cli", "codegen"]
|
|||||||
clap = { version = "4.3", features = ["env", "derive"], optional = true }
|
clap = { version = "4.3", features = ["env", "derive"], optional = true }
|
||||||
dotenvy = { version = "0.15", default-features = false, optional = true }
|
dotenvy = { version = "0.15", default-features = false, optional = true }
|
||||||
async-std = { version = "1.9", default-features = false, features = ["attributes", "tokio1"], optional = true }
|
async-std = { version = "1.9", default-features = false, features = ["attributes", "tokio1"], optional = true }
|
||||||
sea-orm-codegen = { version = "=1.0.0-rc.3", path = "../sea-orm-codegen", default-features = false, optional = true }
|
sea-orm-codegen = { version = "=1.0.0-rc.4", path = "../sea-orm-codegen", default-features = false, optional = true }
|
||||||
sea-schema = { version = "0.15.0-rc.4" }
|
sea-schema = { version = "0.15.0-rc" }
|
||||||
sqlx = { version = "0.7", default-features = false, features = ["mysql", "postgres"], optional = true }
|
sqlx = { version = "0.7", default-features = false, features = ["mysql", "postgres"], optional = true }
|
||||||
tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] }
|
tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] }
|
||||||
tracing = { version = "0.1", default-features = false }
|
tracing = { version = "0.1", default-features = false }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "sea-orm-codegen"
|
name = "sea-orm-codegen"
|
||||||
version = "1.0.0-rc.3"
|
version = "1.0.0-rc.4"
|
||||||
authors = ["Billy Chan <ccw.billy.123@gmail.com>"]
|
authors = ["Billy Chan <ccw.billy.123@gmail.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Code Generator for SeaORM"
|
description = "Code Generator for SeaORM"
|
||||||
@ -17,7 +17,7 @@ name = "sea_orm_codegen"
|
|||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
sea-query = { version = "0.31.0-rc.3", default-features = false, features = ["thread-safe"] }
|
sea-query = { version = "0.31.0-rc", default-features = false, features = ["thread-safe"] }
|
||||||
syn = { version = "2", default-features = false, features = ["parsing", "proc-macro", "derive", "printing"] }
|
syn = { version = "2", default-features = false, features = ["parsing", "proc-macro", "derive", "printing"] }
|
||||||
quote = { version = "1", default-features = false }
|
quote = { version = "1", default-features = false }
|
||||||
heck = { version = "0.4", default-features = false }
|
heck = { version = "0.4", default-features = false }
|
||||||
|
@ -69,7 +69,9 @@ impl Column {
|
|||||||
},
|
},
|
||||||
ColumnType::Decimal(_) | ColumnType::Money(_) => "Decimal".to_owned(),
|
ColumnType::Decimal(_) | ColumnType::Money(_) => "Decimal".to_owned(),
|
||||||
ColumnType::Uuid => "Uuid".to_owned(),
|
ColumnType::Uuid => "Uuid".to_owned(),
|
||||||
ColumnType::Binary(_) | ColumnType::VarBinary(_) => "Vec<u8>".to_owned(),
|
ColumnType::Binary(_) | ColumnType::VarBinary(_) | ColumnType::Blob => {
|
||||||
|
"Vec<u8>".to_owned()
|
||||||
|
}
|
||||||
ColumnType::Boolean => "bool".to_owned(),
|
ColumnType::Boolean => "bool".to_owned(),
|
||||||
ColumnType::Enum { name, .. } => name.to_string().to_upper_camel_case(),
|
ColumnType::Enum { name, .. } => name.to_string().to_upper_camel_case(),
|
||||||
ColumnType::Array(column_type) => {
|
ColumnType::Array(column_type) => {
|
||||||
@ -102,6 +104,7 @@ impl Column {
|
|||||||
StringLen::None => Some("VarBinary(StringLen::None)".to_owned()),
|
StringLen::None => Some("VarBinary(StringLen::None)".to_owned()),
|
||||||
StringLen::Max => Some("VarBinary(StringLen::Max)".to_owned()),
|
StringLen::Max => Some("VarBinary(StringLen::Max)".to_owned()),
|
||||||
},
|
},
|
||||||
|
ColumnType::Blob => Some("Blob".to_owned()),
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
col_type.map(|ty| quote! { column_type = #ty })
|
col_type.map(|ty| quote! { column_type = #ty })
|
||||||
@ -149,6 +152,7 @@ impl Column {
|
|||||||
StringLen::None => quote! { ColumnType::VarBinary(StringLen::None) },
|
StringLen::None => quote! { ColumnType::VarBinary(StringLen::None) },
|
||||||
StringLen::Max => quote! { ColumnType::VarBinary(StringLen::Max) },
|
StringLen::Max => quote! { ColumnType::VarBinary(StringLen::Max) },
|
||||||
},
|
},
|
||||||
|
ColumnType::Blob => quote! { ColumnType::Blob },
|
||||||
ColumnType::Boolean => quote! { ColumnType::Boolean },
|
ColumnType::Boolean => quote! { ColumnType::Boolean },
|
||||||
ColumnType::Money(s) => match s {
|
ColumnType::Money(s) => match s {
|
||||||
Some((s1, s2)) => quote! { ColumnType::Money(Some((#s1, #s2))) },
|
Some((s1, s2)) => quote! { ColumnType::Money(Some((#s1, #s2))) },
|
||||||
|
@ -154,7 +154,7 @@ impl EntityTransformer {
|
|||||||
RelationType::HasMany
|
RelationType::HasMany
|
||||||
};
|
};
|
||||||
rel.rel_type = rel_type;
|
rel.rel_type = rel_type;
|
||||||
rel.ref_table = table_name.clone();
|
rel.ref_table = table_name.to_string();
|
||||||
rel.columns = Vec::new();
|
rel.columns = Vec::new();
|
||||||
rel.ref_columns = Vec::new();
|
rel.ref_columns = Vec::new();
|
||||||
if let Some(vec) = inverse_relations.get_mut(&ref_table) {
|
if let Some(vec) = inverse_relations.get_mut(&ref_table) {
|
||||||
|
@ -330,7 +330,7 @@ impl EntityWriter {
|
|||||||
pub fn write_doc_comment(lines: &mut Vec<String>) {
|
pub fn write_doc_comment(lines: &mut Vec<String>) {
|
||||||
let ver = env!("CARGO_PKG_VERSION");
|
let ver = env!("CARGO_PKG_VERSION");
|
||||||
let comments = vec![format!(
|
let comments = vec![format!(
|
||||||
"//! `SeaORM` Entity. Generated by sea-orm-codegen {ver}"
|
"//! `SeaORM` Entity, @generated by sea-orm-codegen {ver}"
|
||||||
)];
|
)];
|
||||||
lines.extend(comments);
|
lines.extend(comments);
|
||||||
lines.push("".to_owned());
|
lines.push("".to_owned());
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod duplicated_many_to_many_paths;
|
pub mod duplicated_many_to_many_paths;
|
||||||
pub mod many_to_many;
|
pub mod many_to_many;
|
||||||
pub mod many_to_many_multiple;
|
pub mod many_to_many_multiple;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "sea-orm-macros"
|
name = "sea-orm-macros"
|
||||||
version = "1.0.0-rc.3"
|
version = "1.0.0-rc.4"
|
||||||
authors = [ "Billy Chan <ccw.billy.123@gmail.com>" ]
|
authors = [ "Billy Chan <ccw.billy.123@gmail.com>" ]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Derive macros for SeaORM"
|
description = "Derive macros for SeaORM"
|
||||||
|
@ -7,6 +7,7 @@ pub mod derive_attr {
|
|||||||
pub column: Option<syn::Ident>,
|
pub column: Option<syn::Ident>,
|
||||||
pub entity: Option<syn::Ident>,
|
pub entity: Option<syn::Ident>,
|
||||||
pub model: Option<syn::Ident>,
|
pub model: Option<syn::Ident>,
|
||||||
|
pub active_model: Option<syn::Ident>,
|
||||||
pub primary_key: Option<syn::Ident>,
|
pub primary_key: Option<syn::Ident>,
|
||||||
pub relation: Option<syn::Ident>,
|
pub relation: Option<syn::Ident>,
|
||||||
pub schema_name: Option<syn::Lit>,
|
pub schema_name: Option<syn::Lit>,
|
||||||
|
@ -9,6 +9,7 @@ struct DeriveEntity {
|
|||||||
column_ident: syn::Ident,
|
column_ident: syn::Ident,
|
||||||
ident: syn::Ident,
|
ident: syn::Ident,
|
||||||
model_ident: syn::Ident,
|
model_ident: syn::Ident,
|
||||||
|
active_model_ident: syn::Ident,
|
||||||
primary_key_ident: syn::Ident,
|
primary_key_ident: syn::Ident,
|
||||||
relation_ident: syn::Ident,
|
relation_ident: syn::Ident,
|
||||||
schema_name: Option<syn::Lit>,
|
schema_name: Option<syn::Lit>,
|
||||||
@ -22,6 +23,9 @@ impl DeriveEntity {
|
|||||||
let ident = input.ident;
|
let ident = input.ident;
|
||||||
let column_ident = sea_attr.column.unwrap_or_else(|| format_ident!("Column"));
|
let column_ident = sea_attr.column.unwrap_or_else(|| format_ident!("Column"));
|
||||||
let model_ident = sea_attr.model.unwrap_or_else(|| format_ident!("Model"));
|
let model_ident = sea_attr.model.unwrap_or_else(|| format_ident!("Model"));
|
||||||
|
let active_model_ident = sea_attr
|
||||||
|
.active_model
|
||||||
|
.unwrap_or_else(|| format_ident!("ActiveModel"));
|
||||||
let primary_key_ident = sea_attr
|
let primary_key_ident = sea_attr
|
||||||
.primary_key
|
.primary_key
|
||||||
.unwrap_or_else(|| format_ident!("PrimaryKey"));
|
.unwrap_or_else(|| format_ident!("PrimaryKey"));
|
||||||
@ -36,6 +40,7 @@ impl DeriveEntity {
|
|||||||
column_ident,
|
column_ident,
|
||||||
ident,
|
ident,
|
||||||
model_ident,
|
model_ident,
|
||||||
|
active_model_ident,
|
||||||
primary_key_ident,
|
primary_key_ident,
|
||||||
relation_ident,
|
relation_ident,
|
||||||
schema_name,
|
schema_name,
|
||||||
@ -87,6 +92,7 @@ impl DeriveEntity {
|
|||||||
let Self {
|
let Self {
|
||||||
ident,
|
ident,
|
||||||
model_ident,
|
model_ident,
|
||||||
|
active_model_ident,
|
||||||
column_ident,
|
column_ident,
|
||||||
primary_key_ident,
|
primary_key_ident,
|
||||||
relation_ident,
|
relation_ident,
|
||||||
@ -98,6 +104,8 @@ impl DeriveEntity {
|
|||||||
impl sea_orm::entity::EntityTrait for #ident {
|
impl sea_orm::entity::EntityTrait for #ident {
|
||||||
type Model = #model_ident;
|
type Model = #model_ident;
|
||||||
|
|
||||||
|
type ActiveModel = #active_model_ident;
|
||||||
|
|
||||||
type Column = #column_ident;
|
type Column = #column_ident;
|
||||||
|
|
||||||
type PrimaryKey = #primary_key_ident;
|
type PrimaryKey = #primary_key_ident;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
//! Source code adapted from https://github.com/Peternator7/strum
|
//! Source code adapted from https://github.com/Peternator7/strum
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
pub mod enum_iter;
|
pub mod enum_iter;
|
||||||
pub mod helpers;
|
pub mod helpers;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "sea-orm-migration"
|
name = "sea-orm-migration"
|
||||||
version = "1.0.0-rc.3"
|
version = "1.0.0-rc.4"
|
||||||
authors = ["Billy Chan <ccw.billy.123@gmail.com>"]
|
authors = ["Billy Chan <ccw.billy.123@gmail.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Migration utility for SeaORM"
|
description = "Migration utility for SeaORM"
|
||||||
@ -23,9 +23,9 @@ path = "src/lib.rs"
|
|||||||
async-trait = { version = "0.1", default-features = false }
|
async-trait = { version = "0.1", default-features = false }
|
||||||
clap = { version = "4.3", features = ["env", "derive"], optional = true }
|
clap = { version = "4.3", features = ["env", "derive"], optional = true }
|
||||||
dotenvy = { version = "0.15", default-features = false, optional = true }
|
dotenvy = { version = "0.15", default-features = false, optional = true }
|
||||||
sea-orm = { version = "1.0.0-rc.3", path = "../", default-features = false, features = ["macros"] }
|
sea-orm = { version = "1.0.0-rc.4", path = "../", default-features = false, features = ["macros"] }
|
||||||
sea-orm-cli = { version = "1.0.0-rc.3", path = "../sea-orm-cli", default-features = false, optional = true }
|
sea-orm-cli = { version = "1.0.0-rc.4", path = "../sea-orm-cli", default-features = false, optional = true }
|
||||||
sea-schema = { version = "0.15.0-rc.4" }
|
sea-schema = { version = "0.15.0-rc" }
|
||||||
tracing = { version = "0.1", default-features = false, features = ["log"] }
|
tracing = { version = "0.1", default-features = false, features = ["log"] }
|
||||||
tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] }
|
tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] }
|
||||||
futures = { version = "0.3", default-features = false, features = ["std"] }
|
futures = { version = "0.3", default-features = false, features = ["std"] }
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
error::*, ConnectionTrait, DeleteResult, EntityTrait, Iterable, PrimaryKeyToColumn, Value,
|
error::*, ConnectionTrait, DeleteResult, EntityTrait, Iterable, PrimaryKeyArity,
|
||||||
|
PrimaryKeyToColumn, PrimaryKeyTrait, Value,
|
||||||
};
|
};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use sea_query::{Nullable, ValueTuple};
|
use sea_query::{Nullable, ValueTuple};
|
||||||
@ -139,7 +140,7 @@ pub trait ActiveModelTrait: Clone + Debug {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
match <Self::Entity as EntityTrait>::PrimaryKey::iter().count() {
|
match <<<Self::Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType as PrimaryKeyArity>::ARITY {
|
||||||
1 => {
|
1 => {
|
||||||
let s1 = next!();
|
let s1 = next!();
|
||||||
Some(ValueTuple::One(s1))
|
Some(ValueTuple::One(s1))
|
||||||
@ -886,6 +887,26 @@ where
|
|||||||
_ => *self = ActiveValue::Set(value),
|
_ => *self = ActiveValue::Set(value),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the inner value, unless `self` is [NotSet][ActiveValue::NotSet].
|
||||||
|
///
|
||||||
|
/// There's also a panicking version: [ActiveValue::as_ref].
|
||||||
|
///
|
||||||
|
/// ## Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use sea_orm::ActiveValue;
|
||||||
|
/// #
|
||||||
|
/// assert_eq!(ActiveValue::Unchanged(42).try_as_ref(), Some(&42));
|
||||||
|
/// assert_eq!(ActiveValue::Set(42).try_as_ref(), Some(&42));
|
||||||
|
/// assert_eq!(ActiveValue::NotSet.try_as_ref(), None::<&i32>);
|
||||||
|
/// ```
|
||||||
|
pub fn try_as_ref(&self) -> Option<&V> {
|
||||||
|
match self {
|
||||||
|
ActiveValue::Set(value) | ActiveValue::Unchanged(value) => Some(value),
|
||||||
|
ActiveValue::NotSet => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<V> std::convert::AsRef<V> for ActiveValue<V>
|
impl<V> std::convert::AsRef<V> for ActiveValue<V>
|
||||||
@ -894,7 +915,9 @@ where
|
|||||||
{
|
{
|
||||||
/// # Panics
|
/// # Panics
|
||||||
///
|
///
|
||||||
/// Panics if it is [ActiveValue::NotSet]
|
/// Panics if it is [ActiveValue::NotSet].
|
||||||
|
///
|
||||||
|
/// See [ActiveValue::try_as_ref] for a fallible non-panicking version.
|
||||||
fn as_ref(&self) -> &V {
|
fn as_ref(&self) -> &V {
|
||||||
match self {
|
match self {
|
||||||
ActiveValue::Set(value) | ActiveValue::Unchanged(value) => value,
|
ActiveValue::Set(value) | ActiveValue::Unchanged(value) => value,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
ActiveModelTrait, ColumnTrait, Delete, DeleteMany, DeleteOne, FromQueryResult, Insert,
|
ActiveModelBehavior, ActiveModelTrait, ColumnTrait, Delete, DeleteMany, DeleteOne,
|
||||||
ModelTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, Related, RelationBuilder,
|
FromQueryResult, Insert, ModelTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, Related,
|
||||||
RelationTrait, RelationType, Select, Update, UpdateMany, UpdateOne,
|
RelationBuilder, RelationTrait, RelationType, Select, Update, UpdateMany, UpdateOne,
|
||||||
};
|
};
|
||||||
use sea_query::{Alias, Iden, IntoIden, IntoTableRef, IntoValueTuple, TableRef};
|
use sea_query::{Alias, Iden, IntoIden, IntoTableRef, IntoValueTuple, TableRef};
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
@ -58,6 +58,9 @@ pub trait EntityTrait: EntityName {
|
|||||||
#[allow(missing_docs)]
|
#[allow(missing_docs)]
|
||||||
type Model: ModelTrait<Entity = Self> + FromQueryResult;
|
type Model: ModelTrait<Entity = Self> + FromQueryResult;
|
||||||
|
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
type ActiveModel: ActiveModelBehavior<Entity = Self>;
|
||||||
|
|
||||||
#[allow(missing_docs)]
|
#[allow(missing_docs)]
|
||||||
type Column: ColumnTrait;
|
type Column: ColumnTrait;
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@ pub use crate::{
|
|||||||
ActiveEnum, ActiveModelBehavior, ActiveModelTrait, ColumnDef, ColumnTrait, ColumnType,
|
ActiveEnum, ActiveModelBehavior, ActiveModelTrait, ColumnDef, ColumnTrait, ColumnType,
|
||||||
ColumnTypeTrait, ConnectionTrait, CursorTrait, DatabaseConnection, DbConn, EntityName,
|
ColumnTypeTrait, ConnectionTrait, CursorTrait, DatabaseConnection, DbConn, EntityName,
|
||||||
EntityTrait, EnumIter, ForeignKeyAction, Iden, IdenStatic, Linked, LoaderTrait, ModelTrait,
|
EntityTrait, EnumIter, ForeignKeyAction, Iden, IdenStatic, Linked, LoaderTrait, ModelTrait,
|
||||||
PaginatorTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, QueryResult, Related,
|
PaginatorTrait, PrimaryKeyArity, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, QueryResult,
|
||||||
RelationDef, RelationTrait, Select, Value,
|
Related, RelationDef, RelationTrait, Select, Value,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "macros")]
|
#[cfg(feature = "macros")]
|
||||||
|
@ -46,9 +46,10 @@ pub trait PrimaryKeyTrait: IdenStatic + Iterable {
|
|||||||
+ IntoValueTuple
|
+ IntoValueTuple
|
||||||
+ FromValueTuple
|
+ FromValueTuple
|
||||||
+ TryGetableMany
|
+ TryGetableMany
|
||||||
+ TryFromU64;
|
+ TryFromU64
|
||||||
|
+ PrimaryKeyArity;
|
||||||
|
|
||||||
/// Method to call to perform `AUTOINCREMENT` operation on a Primary Kay
|
/// Method to call to perform `AUTOINCREMENT` operation on a Primary Key
|
||||||
fn auto_increment() -> bool;
|
fn auto_increment() -> bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,6 +67,40 @@ pub trait PrimaryKeyToColumn {
|
|||||||
Self: Sized;
|
Self: Sized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// How many columns this Primary Key comprises
|
||||||
|
pub trait PrimaryKeyArity {
|
||||||
|
/// Arity of the Primary Key
|
||||||
|
const ARITY: usize;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<V> PrimaryKeyArity for V
|
||||||
|
where
|
||||||
|
V: crate::TryGetable,
|
||||||
|
{
|
||||||
|
const ARITY: usize = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_pk_arity {
|
||||||
|
($len:expr, $($tuple_arg:ident),*) => {
|
||||||
|
impl<$($tuple_arg: crate::TryGetableMany,)*> PrimaryKeyArity for ($($tuple_arg,)*) {
|
||||||
|
const ARITY: usize = $len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_pk_arity!(1, T1);
|
||||||
|
impl_pk_arity!(2, T1, T2);
|
||||||
|
impl_pk_arity!(3, T1, T2, T3);
|
||||||
|
impl_pk_arity!(4, T1, T2, T3, T4);
|
||||||
|
impl_pk_arity!(5, T1, T2, T3, T4, T5);
|
||||||
|
impl_pk_arity!(6, T1, T2, T3, T4, T5, T6);
|
||||||
|
impl_pk_arity!(7, T1, T2, T3, T4, T5, T6, T7);
|
||||||
|
impl_pk_arity!(8, T1, T2, T3, T4, T5, T6, T7, T8);
|
||||||
|
impl_pk_arity!(9, T1, T2, T3, T4, T5, T6, T7, T8, T9);
|
||||||
|
impl_pk_arity!(10, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
|
||||||
|
impl_pk_arity!(11, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
|
||||||
|
impl_pk_arity!(12, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12);
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -116,7 +116,7 @@ where
|
|||||||
{
|
{
|
||||||
// so that self is dropped before entering await
|
// so that self is dropped before entering await
|
||||||
let mut query = self.query;
|
let mut query = self.query;
|
||||||
if db.support_returning() && <A::Entity as EntityTrait>::PrimaryKey::iter().count() > 0 {
|
if db.support_returning() {
|
||||||
let db_backend = db.get_database_backend();
|
let db_backend = db.get_database_backend();
|
||||||
let returning =
|
let returning =
|
||||||
Query::returning().exprs(<A::Entity as EntityTrait>::PrimaryKey::iter().map(|c| {
|
Query::returning().exprs(<A::Entity as EntityTrait>::PrimaryKey::iter().map(|c| {
|
||||||
|
@ -115,6 +115,41 @@ impl QueryResult {
|
|||||||
{
|
{
|
||||||
Ok(T::try_get_many_by_index(self)?)
|
Ok(T::try_get_many_by_index(self)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Retrieves the names of the columns in the result set
|
||||||
|
pub fn column_names(&self) -> Vec<String> {
|
||||||
|
#[cfg(feature = "sqlx-dep")]
|
||||||
|
use sqlx::Column;
|
||||||
|
|
||||||
|
match &self.row {
|
||||||
|
#[cfg(feature = "sqlx-mysql")]
|
||||||
|
QueryResultRow::SqlxMySql(row) => {
|
||||||
|
row.columns().iter().map(|c| c.name().to_string()).collect()
|
||||||
|
}
|
||||||
|
#[cfg(feature = "sqlx-postgres")]
|
||||||
|
QueryResultRow::SqlxPostgres(row) => {
|
||||||
|
row.columns().iter().map(|c| c.name().to_string()).collect()
|
||||||
|
}
|
||||||
|
#[cfg(feature = "sqlx-sqlite")]
|
||||||
|
QueryResultRow::SqlxSqlite(row) => {
|
||||||
|
row.columns().iter().map(|c| c.name().to_string()).collect()
|
||||||
|
}
|
||||||
|
#[cfg(feature = "mock")]
|
||||||
|
QueryResultRow::Mock(row) => row
|
||||||
|
.clone()
|
||||||
|
.into_column_value_tuples()
|
||||||
|
.map(|(c, _)| c.to_string())
|
||||||
|
.collect(),
|
||||||
|
#[cfg(feature = "proxy")]
|
||||||
|
QueryResultRow::Proxy(row) => row
|
||||||
|
.clone()
|
||||||
|
.into_column_value_tuples()
|
||||||
|
.map(|(c, _)| c.to_string())
|
||||||
|
.collect(),
|
||||||
|
#[allow(unreachable_patterns)]
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
@ -1258,8 +1293,11 @@ try_from_u64_err!(uuid::Uuid);
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::TryGetError;
|
use std::collections::BTreeMap;
|
||||||
use crate::error::*;
|
|
||||||
|
use sea_query::Value;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn from_try_get_error() {
|
fn from_try_get_error() {
|
||||||
@ -1347,4 +1385,21 @@ mod tests {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn column_names_from_query_result() {
|
||||||
|
let mut values = BTreeMap::new();
|
||||||
|
values.insert("id".to_string(), Value::Int(Some(1)));
|
||||||
|
values.insert(
|
||||||
|
"name".to_string(),
|
||||||
|
Value::String(Some(Box::new("Abc".to_owned()))),
|
||||||
|
);
|
||||||
|
let query_result = QueryResult {
|
||||||
|
row: QueryResultRow::Mock(crate::MockRow { values }),
|
||||||
|
};
|
||||||
|
assert_eq!(
|
||||||
|
query_result.column_names(),
|
||||||
|
vec!["id".to_owned(), "name".to_owned()]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
error::*, ConnectionTrait, DbBackend, EntityTrait, FromQueryResult, IdenStatic, Iterable,
|
error::*, ConnectionTrait, DbBackend, EntityTrait, FromQueryResult, IdenStatic, Iterable,
|
||||||
ModelTrait, PartialModelTrait, PrimaryKeyToColumn, QueryResult, QuerySelect, Select, SelectA,
|
ModelTrait, PartialModelTrait, PrimaryKeyArity, PrimaryKeyToColumn, PrimaryKeyTrait,
|
||||||
SelectB, SelectTwo, SelectTwoMany, Statement, StreamTrait, TryGetableMany,
|
QueryResult, QuerySelect, Select, SelectA, SelectB, SelectTwo, SelectTwoMany, Statement,
|
||||||
|
StreamTrait, TryGetableMany,
|
||||||
};
|
};
|
||||||
use futures::{Stream, TryStreamExt};
|
use futures::{Stream, TryStreamExt};
|
||||||
use sea_query::{SelectStatement, Value};
|
use sea_query::{SelectStatement, Value};
|
||||||
@ -990,6 +991,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::unwrap_used)]
|
||||||
fn consolidate_query_result<L, R>(
|
fn consolidate_query_result<L, R>(
|
||||||
rows: Vec<(L::Model, Option<R::Model>)>,
|
rows: Vec<(L::Model, Option<R::Model>)>,
|
||||||
) -> Vec<(L::Model, Vec<R::Model>)>
|
) -> Vec<(L::Model, Vec<R::Model>)>
|
||||||
@ -997,15 +999,26 @@ where
|
|||||||
L: EntityTrait,
|
L: EntityTrait,
|
||||||
R: EntityTrait,
|
R: EntityTrait,
|
||||||
{
|
{
|
||||||
// This is a strong point to consider adding a trait associated constant
|
match <<L::PrimaryKey as PrimaryKeyTrait>::ValueType as PrimaryKeyArity>::ARITY {
|
||||||
// to PrimaryKeyTrait to indicate the arity
|
1 => {
|
||||||
let pkcol: Vec<_> = <L::PrimaryKey as Iterable>::iter()
|
let col = <L::PrimaryKey as Iterable>::iter()
|
||||||
.map(|pk| pk.into_column())
|
.next()
|
||||||
.collect();
|
.unwrap()
|
||||||
if pkcol.len() == 1 {
|
.into_column();
|
||||||
consolidate_query_result_of::<L, R, UnitPk<L>>(rows, UnitPk(pkcol[0]))
|
consolidate_query_result_of::<L, R, UnitPk<L>>(rows, UnitPk(col))
|
||||||
} else {
|
}
|
||||||
consolidate_query_result_of::<L, R, TuplePk<L>>(rows, TuplePk(pkcol))
|
2 => {
|
||||||
|
let mut iter = <L::PrimaryKey as Iterable>::iter();
|
||||||
|
let col1 = iter.next().unwrap().into_column();
|
||||||
|
let col2 = iter.next().unwrap().into_column();
|
||||||
|
consolidate_query_result_of::<L, R, PairPk<L>>(rows, PairPk(col1, col2))
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
let cols: Vec<_> = <L::PrimaryKey as Iterable>::iter()
|
||||||
|
.map(|pk| pk.into_column())
|
||||||
|
.collect();
|
||||||
|
consolidate_query_result_of::<L, R, TuplePk<L>>(rows, TuplePk(cols))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1014,8 +1027,9 @@ trait ModelKey<E: EntityTrait> {
|
|||||||
fn get(&self, model: &E::Model) -> Self::Type;
|
fn get(&self, model: &E::Model) -> Self::Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This could have been an array of [E::Column; <E::PrimaryKey as PrimaryKeyTrait>::ARITY]
|
// This could have been an array of [E::Column; <E::PrimaryKey as PrimaryKeyTrait>::ARITY], but it still doesn't compile
|
||||||
struct UnitPk<E: EntityTrait>(E::Column);
|
struct UnitPk<E: EntityTrait>(E::Column);
|
||||||
|
struct PairPk<E: EntityTrait>(E::Column, E::Column);
|
||||||
struct TuplePk<E: EntityTrait>(Vec<E::Column>);
|
struct TuplePk<E: EntityTrait>(Vec<E::Column>);
|
||||||
|
|
||||||
impl<E: EntityTrait> ModelKey<E> for UnitPk<E> {
|
impl<E: EntityTrait> ModelKey<E> for UnitPk<E> {
|
||||||
@ -1025,6 +1039,13 @@ impl<E: EntityTrait> ModelKey<E> for UnitPk<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<E: EntityTrait> ModelKey<E> for PairPk<E> {
|
||||||
|
type Type = (Value, Value);
|
||||||
|
fn get(&self, model: &E::Model) -> Self::Type {
|
||||||
|
(model.get(self.0), model.get(self.1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<E: EntityTrait> ModelKey<E> for TuplePk<E> {
|
impl<E: EntityTrait> ModelKey<E> for TuplePk<E> {
|
||||||
type Type = Vec<Value>;
|
type Type = Vec<Value>;
|
||||||
fn get(&self, model: &E::Model) -> Self::Type {
|
fn get(&self, model: &E::Model) -> Self::Type {
|
||||||
@ -1054,8 +1075,8 @@ where
|
|||||||
} else {
|
} else {
|
||||||
acc.insert(key, vec![value]);
|
acc.insert(key, vec![value]);
|
||||||
}
|
}
|
||||||
} else if acc.get(&key).is_none() {
|
} else {
|
||||||
acc.insert(key, vec![]);
|
acc.entry(key).or_default();
|
||||||
}
|
}
|
||||||
|
|
||||||
acc
|
acc
|
||||||
|
@ -284,7 +284,7 @@ pub trait QuerySelect: Sized {
|
|||||||
|
|
||||||
/// Add an AND HAVING expression
|
/// Add an AND HAVING expression
|
||||||
/// ```
|
/// ```
|
||||||
/// use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend};
|
/// use sea_orm::{sea_query::{Alias, Expr}, entity::*, query::*, tests_cfg::cake, DbBackend};
|
||||||
///
|
///
|
||||||
/// assert_eq!(
|
/// assert_eq!(
|
||||||
/// cake::Entity::find()
|
/// cake::Entity::find()
|
||||||
@ -301,10 +301,10 @@ pub trait QuerySelect: Sized {
|
|||||||
/// .column_as(cake::Column::Id.count(), "count")
|
/// .column_as(cake::Column::Id.count(), "count")
|
||||||
/// .column_as(cake::Column::Id.sum(), "sum_of_id")
|
/// .column_as(cake::Column::Id.sum(), "sum_of_id")
|
||||||
/// .group_by(cake::Column::Name)
|
/// .group_by(cake::Column::Name)
|
||||||
/// .having(cake::Column::Id.gt(6))
|
/// .having(Expr::col(Alias::new("count")).gt(6))
|
||||||
/// .build(DbBackend::MySql)
|
/// .build(DbBackend::MySql)
|
||||||
/// .to_string(),
|
/// .to_string(),
|
||||||
/// "SELECT COUNT(`cake`.`id`) AS `count`, SUM(`cake`.`id`) AS `sum_of_id` FROM `cake` GROUP BY `cake`.`name` HAVING `cake`.`id` > 6"
|
/// "SELECT COUNT(`cake`.`id`) AS `count`, SUM(`cake`.`id`) AS `sum_of_id` FROM `cake` GROUP BY `cake`.`name` HAVING `count` > 6"
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
fn having<F>(mut self, filter: F) -> Self
|
fn having<F>(mut self, filter: F) -> Self
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
ActiveEnum, ColumnTrait, ColumnType, DbBackend, EntityTrait, Iterable, PrimaryKeyToColumn,
|
ActiveEnum, ColumnTrait, ColumnType, DbBackend, EntityTrait, Iterable, PrimaryKeyArity,
|
||||||
PrimaryKeyTrait, RelationTrait, Schema,
|
PrimaryKeyToColumn, PrimaryKeyTrait, RelationTrait, Schema,
|
||||||
};
|
};
|
||||||
use sea_query::{
|
use sea_query::{
|
||||||
extension::postgres::{Type, TypeCreateStatement},
|
extension::postgres::{Type, TypeCreateStatement},
|
||||||
@ -172,7 +172,7 @@ where
|
|||||||
stmt.col(&mut column_def);
|
stmt.col(&mut column_def);
|
||||||
}
|
}
|
||||||
|
|
||||||
if E::PrimaryKey::iter().count() > 1 {
|
if <<E::PrimaryKey as PrimaryKeyTrait>::ValueType as PrimaryKeyArity>::ARITY > 1 {
|
||||||
let mut idx_pk = Index::create();
|
let mut idx_pk = Index::create();
|
||||||
for primary_key in E::PrimaryKey::iter() {
|
for primary_key in E::PrimaryKey::iter() {
|
||||||
idx_pk.col(primary_key);
|
idx_pk.col(primary_key);
|
||||||
@ -228,7 +228,7 @@ where
|
|||||||
if E::PrimaryKey::auto_increment() {
|
if E::PrimaryKey::auto_increment() {
|
||||||
column_def.auto_increment();
|
column_def.auto_increment();
|
||||||
}
|
}
|
||||||
if E::PrimaryKey::iter().count() == 1 {
|
if <<E::PrimaryKey as PrimaryKeyTrait>::ValueType as PrimaryKeyArity>::ARITY == 1 {
|
||||||
column_def.primary_key();
|
column_def.primary_key();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
//! Configurations for test cases and examples. Not intended for actual use.
|
//! Configurations for test cases and examples. Not intended for actual use.
|
||||||
|
|
||||||
pub mod cake;
|
pub mod cake;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
use active_enum::Entity as ActiveEnumEntity;
|
use active_enum::Entity as ActiveEnumEntity;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use sea_orm::{entity::*, error::*, query::*, sea_query, tests_cfg::*, Database, DbConn};
|
pub use sea_orm::{entity::*, error::*, query::*, sea_query, tests_cfg::*, Database, DbConn};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
use common::features::*;
|
use common::features::*;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
mod crud;
|
mod crud;
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel};
|
use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
use sea_orm::entity::prelude::*;
|
use sea_orm::entity::prelude::*;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
mod crud;
|
mod crud;
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{
|
pub use common::{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
@ -86,7 +88,7 @@ pub async fn insert_json_struct_vec_derive(db: &DatabaseConnection) -> Result<()
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
let result = json_vec.clone().into_active_model().insert(db).await?;
|
let _result = json_vec.clone().into_active_model().insert(db).await?;
|
||||||
|
|
||||||
let model = json_vec_derive::json_struct_vec::Entity::find()
|
let model = json_vec_derive::json_struct_vec::Entity::find()
|
||||||
.filter(json_vec_derive::json_struct_vec::Column::Id.eq(json_vec.id))
|
.filter(json_vec_derive::json_struct_vec::Column::Id.eq(json_vec.id))
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
use entity::{Column, Entity};
|
use entity::{Column, Entity};
|
||||||
use sea_orm::{ColumnTrait, DerivePartialModel, EntityTrait, FromQueryResult, ModelTrait};
|
use sea_orm::{ColumnTrait, DerivePartialModel, EntityTrait, FromQueryResult, ModelTrait};
|
||||||
use sea_query::Expr;
|
use sea_query::Expr;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
use common::{features::*, setup::*, TestContext};
|
use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use chrono::offset::Utc;
|
pub use chrono::offset::Utc;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use chrono::offset::Utc;
|
use chrono::offset::Utc;
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
pub use rust_decimal::prelude::*;
|
use rust_decimal::prelude::*;
|
||||||
pub use sea_orm::{entity::*, query::*, DatabaseConnection, FromQueryResult};
|
use sea_orm::{entity::*, query::*, DatabaseConnection, FromQueryResult};
|
||||||
pub use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
// Run the test locally:
|
// Run the test locally:
|
||||||
// DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std --test sequential_op_tests
|
// DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std --test sequential_op_tests
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
pub use sea_orm::{
|
pub use sea_orm::{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
use pretty_assertions::assert_eq;
|
use pretty_assertions::assert_eq;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
use pretty_assertions::assert_eq;
|
use pretty_assertions::assert_eq;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{bakery_chain::*, setup::*, TestContext};
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
use sea_orm::{IntoActiveValue, TryFromU64, TryGetable, Value};
|
use sea_orm::{IntoActiveValue, TryFromU64, TryGetable, Value};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
pub use common::{features::*, setup::*, TestContext};
|
pub use common::{features::*, setup::*, TestContext};
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![allow(unused_imports, dead_code)]
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user