Fix validation on schemafull RELATE
(#4226)
This commit is contained in:
parent
6935412c4b
commit
e25ddfc408
2 changed files with 52 additions and 2 deletions
|
@ -37,10 +37,10 @@ impl<'a> Document<'a> {
|
||||||
opt: &Options,
|
opt: &Options,
|
||||||
stm: &Statement<'_>,
|
stm: &Statement<'_>,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
// Store record edges
|
|
||||||
self.edges(ctx, opt, stm).await?;
|
|
||||||
// Alter record data
|
// Alter record data
|
||||||
self.alter(stk, ctx, opt, stm).await?;
|
self.alter(stk, ctx, opt, stm).await?;
|
||||||
|
// Store record edges
|
||||||
|
self.edges(ctx, opt, stm).await?;
|
||||||
// Merge fields data
|
// Merge fields data
|
||||||
self.field(stk, ctx, opt, stm).await?;
|
self.field(stk, ctx, opt, stm).await?;
|
||||||
// Reset fields data
|
// Reset fields data
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
mod parse;
|
mod parse;
|
||||||
|
|
||||||
use parse::Parse;
|
use parse::Parse;
|
||||||
|
|
||||||
mod helpers;
|
mod helpers;
|
||||||
|
use crate::helpers::Test;
|
||||||
|
|
||||||
use helpers::new_ds;
|
use helpers::new_ds;
|
||||||
use surrealdb::dbs::Session;
|
use surrealdb::dbs::Session;
|
||||||
|
@ -207,3 +210,50 @@ async fn relate_with_complex_table() -> Result<(), Error> {
|
||||||
//
|
//
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn schemafull_relate() -> Result<(), Error> {
|
||||||
|
let sql = r#"
|
||||||
|
INSERT INTO person [
|
||||||
|
{ id: 1 },
|
||||||
|
{ id: 2 }
|
||||||
|
];
|
||||||
|
|
||||||
|
DEFINE TABLE likes TYPE RELATION FROM person TO person;
|
||||||
|
DEFINE FIELD reason ON likes TYPE string;
|
||||||
|
|
||||||
|
RELATE person:1 -> likes -> person:2 CONTENT {id: 1, reason: "nice smile"};
|
||||||
|
RELATE person:2 -> likes -> person:1 CONTENT {id: 2, reason: true};
|
||||||
|
RELATE dog:1 -> likes -> person:2 CONTENT {id: 3, reason: "nice smell"};
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let mut t = Test::new(sql).await?;
|
||||||
|
|
||||||
|
t.expect_val(
|
||||||
|
"[
|
||||||
|
{id: person:1},
|
||||||
|
{id: person:2}
|
||||||
|
]",
|
||||||
|
)?;
|
||||||
|
|
||||||
|
t.skip_ok(2)?;
|
||||||
|
|
||||||
|
t.expect_val(
|
||||||
|
"[
|
||||||
|
{
|
||||||
|
id: likes:1,
|
||||||
|
in: person:1,
|
||||||
|
out: person:2,
|
||||||
|
reason: 'nice smile'
|
||||||
|
}
|
||||||
|
]",
|
||||||
|
)?;
|
||||||
|
|
||||||
|
// reason is bool not string
|
||||||
|
t.expect_error_func(|e| matches!(e, Error::FieldCheck { .. }))?;
|
||||||
|
|
||||||
|
// dog:1 is not a person
|
||||||
|
t.expect_error_func(|e| matches!(e, Error::FieldCheck { .. }))?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue