Skip to content

Commit 4391859

Browse files
committed
Make FilterParser internal and use CompositeFilter to parse
1 parent 206aa40 commit 4391859

File tree

3 files changed

+33
-40
lines changed

3 files changed

+33
-40
lines changed

examples/simple.rs

+26-37
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use delta_search::data::FieldValue;
1+
use anyhow::Error;
22
use delta_search::fixtures::{
33
create_players_storage, cristiano_ronaldo, david, lionel_messi, michael_jordan, roger,
44
DecreaseScoreDelta, Sport, SwitchSportsDelta,
@@ -10,7 +10,7 @@ use delta_search::Engine;
1010
use time::{Date, Month};
1111

1212
#[tokio::main]
13-
async fn main() {
13+
async fn main() -> Result<(), Error> {
1414
println!("Welcome to the simple Player search!");
1515

1616
let michael_jordan = michael_jordan();
@@ -43,10 +43,7 @@ async fn main() {
4343
println!("Filter possibilities:\n{:?}\n", filter_options);
4444

4545
let query = QueryExecution::new()
46-
.with_filter(CompositeFilter::eq(
47-
"sport",
48-
FieldValue::String(Sport::Basketball.as_string()),
49-
))
46+
.with_filter(CompositeFilter::parse("sport = \"Basketball\"")?)
5047
.with_sort(Sort::new("score").with_direction(SortDirection::DESC));
5148
let players = engine.query(name, query).await;
5249

@@ -56,11 +53,9 @@ async fn main() {
5653
.query(
5754
name,
5855
QueryExecution::new()
59-
.with_filter(CompositeFilter::between(
60-
"birth_date",
61-
FieldValue::str("1980-01-01"),
62-
FieldValue::str("1989-12-31"),
63-
))
56+
.with_filter(CompositeFilter::parse(
57+
"birth_date >= \"1980-01-01\" && birth_date <= \"1989-12-31\"",
58+
)?)
6459
.with_sort(Sort::new("name").with_direction(SortDirection::ASC)),
6560
)
6661
.await;
@@ -72,73 +67,67 @@ async fn main() {
7267
SwitchSportsDelta::create(lionel_messi_id, Sport::Football, Sport::Basketball),
7368
];
7469

75-
let delta_scope = DeltaScope::date(Date::from_calendar_date(2023, Month::January, 1).unwrap());
70+
let delta_scope = DeltaScope::date(Date::from_calendar_date(2023, Month::January, 1)?);
7671

7772
engine
7873
.store_deltas(name, &delta_scope, &switch_sports)
7974
.await
8075
.unwrap();
8176

8277
let query = QueryExecution::new()
83-
.with_filter(CompositeFilter::eq(
84-
"sport",
85-
FieldValue::String(Sport::Basketball.as_string()),
86-
))
78+
.with_filter(CompositeFilter::parse("sport = \"Basketball\"")?)
8779
.with_sort(Sort::new("score").with_direction(SortDirection::DESC))
88-
.with_scope(DeltaScope::date(
89-
Date::from_calendar_date(2024, Month::January, 1).unwrap(),
90-
));
80+
.with_scope(DeltaScope::date(Date::from_calendar_date(
81+
2024,
82+
Month::January,
83+
1,
84+
)?));
9185

92-
let players = engine.query(name, query).await;
86+
let players = engine.query(name, query).await?;
9387

9488
println!(
9589
"Basketball players sorted by score after switching sports in 2023:\n{:?}\n",
96-
players.unwrap()
90+
players
9791
);
9892

9993
let lower_scores = vec![
10094
DecreaseScoreDelta::create(michael_jordan_id, 10.0),
10195
DecreaseScoreDelta::create(lionel_messi_id, 9.0),
10296
];
10397

104-
let delta_scope = DeltaScope::context(
105-
0,
106-
Date::from_calendar_date(2023, Month::January, 1).unwrap(),
107-
);
98+
let delta_scope = DeltaScope::context(0, Date::from_calendar_date(2023, Month::January, 1)?);
10899

109100
engine
110101
.store_deltas(name, &delta_scope, &lower_scores)
111-
.await
112-
.unwrap();
102+
.await?;
113103

114104
let query = QueryExecution::new()
115105
.with_sort(Sort::new("score").with_direction(SortDirection::DESC))
116106
.with_scope(DeltaScope::context(
117107
0,
118-
Date::from_calendar_date(2024, Month::January, 1).unwrap(),
108+
Date::from_calendar_date(2024, Month::January, 1)?,
119109
));
120110

121-
let players = engine.query(name, query).await;
111+
let players = engine.query(name, query).await?;
122112

123113
println!(
124114
"Players sorted by score after decreasing their score by 1:\n{:?}\n",
125-
players.unwrap()
115+
players
126116
);
127117

128-
engine.remove(name, &david_id).await.unwrap();
118+
engine.remove(name, &david_id).await?;
129119

130120
let players = engine
131121
.query(
132122
name,
133-
QueryExecution::new().with_filter(CompositeFilter::eq(
134-
"sport",
135-
FieldValue::String(Sport::Basketball.as_string()),
136-
)),
123+
QueryExecution::new().with_filter(CompositeFilter::parse("sport = \"Basketball\"")?),
137124
)
138-
.await;
125+
.await?;
139126

140127
println!(
141128
"Players playing basketball after deletion:\n{:?}\n",
142-
players.unwrap()
129+
players
143130
);
131+
132+
Ok(())
144133
}

src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use delta_search::data::{
1818
};
1919
use delta_search::index::TypeDescriptor;
2020
use delta_search::query::{
21-
DeltaChange, DeltaScope, FilterOption, FilterParser, OptionsQueryExecution, Pagination,
21+
CompositeFilter, DeltaChange, DeltaScope, FilterOption, OptionsQueryExecution, Pagination,
2222
QueryExecution, Sort, SortDirection,
2323
};
2424
use delta_search::storage::CreateFieldIndex;
@@ -115,7 +115,7 @@ impl App {
115115

116116
if let Some(filter) = &input.filter {
117117
let parsed_filter =
118-
FilterParser::parse_query(filter).map_err(|_| AppError::InvalidFilterQuery)?;
118+
CompositeFilter::parse(filter).map_err(|_| AppError::InvalidFilterQuery)?;
119119
execution = execution.with_filter(parsed_filter);
120120
}
121121

src/query.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ pub enum CompositeFilter {
279279
}
280280

281281
impl CompositeFilter {
282+
pub fn parse(query: &str) -> Result<CompositeFilter, ParseError> {
283+
FilterParser::parse_query(query)
284+
}
285+
282286
pub fn eq(name: &str, value: FieldValue) -> Self {
283287
CompositeFilter::Single(Filter {
284288
name: name.to_string(),
@@ -471,7 +475,7 @@ impl DeltaChange {
471475
statement = { "("{0, 1} ~ name ~ SPACE_SEPARATOR* ~ comparison_operator ~ value ~ ")"{0, 1} }
472476
composite = { "("{0, 1} ~ statement ~ logical_operator* ~ composite* ~ ")"{0, 1} }
473477
"#]
474-
pub struct FilterParser;
478+
pub(crate) struct FilterParser;
475479

476480
impl FilterParser {
477481
pub fn parse_query(input: &str) -> Result<CompositeFilter, ParseError> {

0 commit comments

Comments
 (0)