Fix loader panic on empty
This commit is contained in:
parent
e61b066b59
commit
5a6acd6731
@ -382,7 +382,6 @@ where
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg(feature = "mock")]
|
#[cfg(feature = "mock")]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
|
||||||
use crate::entity::prelude::*;
|
use crate::entity::prelude::*;
|
||||||
use crate::tests_cfg::*;
|
use crate::tests_cfg::*;
|
||||||
use crate::{DbBackend, MockDatabase, Statement, Transaction};
|
use crate::{DbBackend, MockDatabase, Statement, Transaction};
|
||||||
|
@ -143,6 +143,10 @@ where
|
|||||||
return Err(query_err("Relation is HasMany instead of HasOne"));
|
return Err(query_err("Relation is HasMany instead of HasOne"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.is_empty() {
|
||||||
|
return Ok(Vec::new());
|
||||||
|
}
|
||||||
|
|
||||||
let keys: Vec<ValueTuple> = self
|
let keys: Vec<ValueTuple> = self
|
||||||
.iter()
|
.iter()
|
||||||
.map(|model: &M| extract_key(&rel_def.from_col, model))
|
.map(|model: &M| extract_key(&rel_def.from_col, model))
|
||||||
@ -194,6 +198,10 @@ where
|
|||||||
return Err(query_err("Relation is HasOne instead of HasMany"));
|
return Err(query_err("Relation is HasOne instead of HasMany"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.is_empty() {
|
||||||
|
return Ok(Vec::new());
|
||||||
|
}
|
||||||
|
|
||||||
let keys: Vec<ValueTuple> = self
|
let keys: Vec<ValueTuple> = self
|
||||||
.iter()
|
.iter()
|
||||||
.map(|model: &M| extract_key(&rel_def.from_col, model))
|
.map(|model: &M| extract_key(&rel_def.from_col, model))
|
||||||
@ -269,6 +277,10 @@ where
|
|||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.is_empty() {
|
||||||
|
return Ok(Vec::new());
|
||||||
|
}
|
||||||
|
|
||||||
let pkeys: Vec<ValueTuple> = self
|
let pkeys: Vec<ValueTuple> = self
|
||||||
.iter()
|
.iter()
|
||||||
.map(|model: &M| extract_key(&via_rel.from_col, model))
|
.map(|model: &M| extract_key(&via_rel.from_col, model))
|
||||||
@ -587,14 +599,11 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: load many with empty vector will panic
|
#[tokio::test]
|
||||||
// #[tokio::test]
|
|
||||||
async fn test_load_many_empty() {
|
async fn test_load_many_empty() {
|
||||||
use sea_orm::{entity::prelude::*, tests_cfg::*, DbBackend, MockDatabase};
|
use sea_orm::{entity::prelude::*, tests_cfg::*, DbBackend, MockDatabase};
|
||||||
|
|
||||||
let db = MockDatabase::new(DbBackend::Postgres)
|
let db = MockDatabase::new(DbBackend::Postgres).into_connection();
|
||||||
.append_query_results([[fruit_model(1, Some(1)), fruit_model(2, Some(1))]])
|
|
||||||
.into_connection();
|
|
||||||
|
|
||||||
let cakes: Vec<cake::Model> = vec![];
|
let cakes: Vec<cake::Model> = vec![];
|
||||||
|
|
||||||
@ -610,9 +619,7 @@ mod tests {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_load_many_to_many_base() {
|
async fn test_load_many_to_many_base() {
|
||||||
use sea_orm::{
|
use sea_orm::{tests_cfg::*, DbBackend, IntoMockRow, LoaderTrait, MockDatabase};
|
||||||
entity::prelude::*, tests_cfg::*, DbBackend, IntoMockRow, LoaderTrait, MockDatabase,
|
|
||||||
};
|
|
||||||
|
|
||||||
let db = MockDatabase::new(DbBackend::Postgres)
|
let db = MockDatabase::new(DbBackend::Postgres)
|
||||||
.append_query_results([
|
.append_query_results([
|
||||||
@ -633,9 +640,7 @@ mod tests {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_load_many_to_many_complex() {
|
async fn test_load_many_to_many_complex() {
|
||||||
use sea_orm::{
|
use sea_orm::{tests_cfg::*, DbBackend, IntoMockRow, LoaderTrait, MockDatabase};
|
||||||
entity::prelude::*, tests_cfg::*, DbBackend, IntoMockRow, LoaderTrait, MockDatabase,
|
|
||||||
};
|
|
||||||
|
|
||||||
let db = MockDatabase::new(DbBackend::Postgres)
|
let db = MockDatabase::new(DbBackend::Postgres)
|
||||||
.append_query_results([
|
.append_query_results([
|
||||||
@ -675,9 +680,7 @@ mod tests {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_load_many_to_many_empty() {
|
async fn test_load_many_to_many_empty() {
|
||||||
use sea_orm::{
|
use sea_orm::{tests_cfg::*, DbBackend, IntoMockRow, LoaderTrait, MockDatabase};
|
||||||
entity::prelude::*, tests_cfg::*, DbBackend, IntoMockRow, LoaderTrait, MockDatabase,
|
|
||||||
};
|
|
||||||
|
|
||||||
let db = MockDatabase::new(DbBackend::Postgres)
|
let db = MockDatabase::new(DbBackend::Postgres)
|
||||||
.append_query_results([
|
.append_query_results([
|
||||||
|
Loading…
x
Reference in New Issue
Block a user