Treat $this param as a special case
This commit is contained in:
parent
892fc99527
commit
cf20cd4396
1 changed files with 27 additions and 12 deletions
|
@ -37,18 +37,33 @@ impl Param {
|
|||
// Find a base variable by name
|
||||
match self.name.parts.first() {
|
||||
// The first part will be a field
|
||||
Some(Part::Field(v)) => match ctx.value::<Value>(&v.name) {
|
||||
// The base variable exists
|
||||
Some(v) => {
|
||||
// Get the path parts
|
||||
let pth: &[Part] = &self.name;
|
||||
// Process the paramater value
|
||||
let res = v.compute(ctx, opt, txn, doc).await?;
|
||||
// Return the desired field
|
||||
res.get(ctx, opt, txn, pth.next()).await
|
||||
}
|
||||
// The base variable does not exist
|
||||
None => Ok(Value::None),
|
||||
Some(Part::Field(v)) => match &v.name[..] {
|
||||
"this" => match doc {
|
||||
// The base document exists
|
||||
Some(v) => {
|
||||
// Get the path parts
|
||||
let pth: &[Part] = &self.name;
|
||||
// Process the paramater value
|
||||
let res = v.compute(ctx, opt, txn, doc).await?;
|
||||
// Return the desired field
|
||||
res.get(ctx, opt, txn, pth.next()).await
|
||||
}
|
||||
// The base document does not exist
|
||||
None => Ok(Value::None),
|
||||
},
|
||||
_ => match ctx.value::<Value>(&v.name) {
|
||||
// The base variable exists
|
||||
Some(v) => {
|
||||
// Get the path parts
|
||||
let pth: &[Part] = &self.name;
|
||||
// Process the paramater value
|
||||
let res = v.compute(ctx, opt, txn, doc).await?;
|
||||
// Return the desired field
|
||||
res.get(ctx, opt, txn, pth.next()).await
|
||||
}
|
||||
// The base variable does not exist
|
||||
None => Ok(Value::None),
|
||||
},
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue