fixed nested filtering syntax
This commit is contained in:
@ -64,11 +64,7 @@ impl<'a> Compiler<'a> {
|
||||
|
||||
fn compile_array(&mut self, node: Node<'a>) -> Result<(String, String), String> {
|
||||
if let Some(items) = &node.schema.obj.items {
|
||||
let next_path = if node.ast_path.is_empty() {
|
||||
String::from("#")
|
||||
} else {
|
||||
format!("{}.#", node.ast_path)
|
||||
};
|
||||
let next_path = node.ast_path.clone();
|
||||
|
||||
if let Some(ref_id) = &items.obj.r#ref {
|
||||
if let Some(type_def) = self.db.types.get(ref_id) {
|
||||
@ -448,22 +444,21 @@ impl<'a> Compiler<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
let mut child_node = node.clone();
|
||||
child_node.parent_alias = owner_alias.clone();
|
||||
let arc_aliases = std::sync::Arc::new(table_aliases.clone());
|
||||
child_node.parent_type_aliases = Some(arc_aliases);
|
||||
child_node.parent_type = Some(r#type);
|
||||
child_node.parent_schema = Some(std::sync::Arc::clone(&node.schema));
|
||||
child_node.property_name = Some(prop_key.clone());
|
||||
child_node.depth += 1;
|
||||
let next_path = if node.ast_path.is_empty() {
|
||||
prop_key.clone()
|
||||
} else {
|
||||
format!("{}.{}", node.ast_path, prop_key)
|
||||
let child_node = Node {
|
||||
schema: std::sync::Arc::clone(prop_schema),
|
||||
parent_alias: owner_alias.clone(),
|
||||
parent_type_aliases: Some(std::sync::Arc::new(table_aliases.clone())),
|
||||
parent_type: Some(r#type),
|
||||
parent_schema: Some(std::sync::Arc::clone(&node.schema)),
|
||||
property_name: Some(prop_key.clone()),
|
||||
depth: node.depth + 1,
|
||||
ast_path: if node.ast_path.is_empty() {
|
||||
prop_key.clone()
|
||||
} else {
|
||||
format!("{}/{}", node.ast_path, prop_key)
|
||||
},
|
||||
};
|
||||
|
||||
child_node.ast_path = next_path;
|
||||
child_node.schema = std::sync::Arc::clone(prop_schema);
|
||||
|
||||
let (val_sql, val_type) = self.compile_node(child_node)?;
|
||||
|
||||
@ -587,15 +582,15 @@ impl<'a> Compiler<'a> {
|
||||
let op = parts.next().unwrap_or("$eq");
|
||||
|
||||
let field_name = if node.ast_path.is_empty() {
|
||||
if full_field_path.contains('.') || full_field_path.contains('#') {
|
||||
if full_field_path.contains('/') {
|
||||
continue;
|
||||
}
|
||||
full_field_path
|
||||
} else {
|
||||
let prefix = format!("{}.", node.ast_path);
|
||||
let prefix = format!("{}/", node.ast_path);
|
||||
if full_field_path.starts_with(&prefix) {
|
||||
let remainder = &full_field_path[prefix.len()..];
|
||||
if remainder.contains('.') || remainder.contains('#') {
|
||||
if remainder.contains('/') {
|
||||
continue;
|
||||
}
|
||||
remainder
|
||||
|
||||
Reference in New Issue
Block a user