From 1c40972ab219157513f8253b0836379165ba9468 Mon Sep 17 00:00:00 2001 From: oshadmi Date: Sun, 31 Oct 2021 10:32:45 +0200 Subject: [PATCH 1/3] Avoid panic on unimplemeted filter syntax --- src/select/mod.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/select/mod.rs b/src/select/mod.rs index d3e59670..0e15c086 100644 --- a/src/select/mod.rs +++ b/src/select/mod.rs @@ -767,7 +767,8 @@ where fn visit_keys(&mut self, keys: &[String]) { if !self.selector_filter.is_term_empty() { - unimplemented!("keys in filter"); + //unimplemented!("keys in filter"); // TODO: Filter Enhancement + return; } if let Some(ParseToken::Array) = self.tokens.pop() { @@ -825,7 +826,8 @@ where fn visit_range(&mut self, from: &Option, to: &Option, step: &Option) { if !self.selector_filter.is_term_empty() { - unimplemented!("range syntax in filter"); + //unimplemented!("range syntax in filter"); // TODO: Filter Enhancement + return; } if let Some(ParseToken::Array) = self.tokens.pop() { @@ -864,7 +866,8 @@ where fn visit_union(&mut self, indices: &[isize]) { if !self.selector_filter.is_term_empty() { - unimplemented!("union syntax in filter"); + //unimplemented!("union syntax in filter"); // TODO: Filter Enhancement + return; } if let Some(ParseToken::Array) = self.tokens.pop() { From 263ffd50b891228a440bfa2c3cabe3a5be988073 Mon Sep 17 00:00:00 2001 From: oshadmi Date: Sun, 31 Oct 2021 19:10:41 +0200 Subject: [PATCH 2/3] Unimplemeted filter syntax - add unit test --- tests/filter.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/filter.rs b/tests/filter.rs index c847dab3..6582c52f 100644 --- a/tests/filter.rs +++ b/tests/filter.rs @@ -277,4 +277,53 @@ fn bugs38_array_notation_in_filter() { ]), json!([{"seq": 2, "subKey": "subKey2"}]), ); +} + +#[test] +fn unimplemented_in_filter() { + setup(); + + let json = json!([{ + "store": { + "book": [ + {"authors": [ + {"firstName": "Nigel", + "lastName": "Rees"}, + {"firstName": "Evelyn", + "lastName": "Waugh"} + ], + "title": "SayingsoftheCentury"}, + {"authors": [ + {"firstName": "Herman", + "lastName": "Melville"}, + {"firstName": "Somebody", + "lastName": "Else"} + ], + "title": "MobyDick"} + ]} + }]); + + // Should not panic + // unimplemented!("range syntax in filter") + select_and_then_compare( + "$.store[?(@.book.authors)]", + json.clone(), + json!([]), + ); + + // Should not panic + // unimplemented!("union syntax in filter") + select_and_then_compare( + "$.store.book[?(@.authors[0,1])]", + json.clone(), + json!([]), + ); + + // Should not panic + // unimplemented!("keys in filter"); + select_and_then_compare( + "$.store[?(@.book['authors', 'title'])]", + json.clone(), + json!([]), + ); } \ No newline at end of file From 6c92d8739ac8fe25cc56a741c7f482150cff0f3c Mon Sep 17 00:00:00 2001 From: oshadmi Date: Sun, 31 Oct 2021 19:14:17 +0200 Subject: [PATCH 3/3] Unimplemeted filter syntax - add unit test (2) cargo test unimplemented_in_filter --- tests/filter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/filter.rs b/tests/filter.rs index 6582c52f..bf0b2ac6 100644 --- a/tests/filter.rs +++ b/tests/filter.rs @@ -306,7 +306,7 @@ fn unimplemented_in_filter() { // Should not panic // unimplemented!("range syntax in filter") select_and_then_compare( - "$.store[?(@.book.authors)]", + "$.store.book[?(@.authors[0:1])]", json.clone(), json!([]), );