mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-27 07:14:26 +01:00
Return spanned pest error while parsing numbers in facet filters
This commit is contained in:
parent
54d5cec582
commit
a50f63840f
@ -1,6 +1,7 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::ops::Bound::{self, Unbounded, Included, Excluded};
|
use std::ops::Bound::{self, Unbounded, Included, Excluded};
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
use heed::types::{ByteSlice, DecodeIgnore};
|
use heed::types::{ByteSlice, DecodeIgnore};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
@ -115,6 +116,21 @@ fn get_field_id_facet_type<'a>(
|
|||||||
Ok((field_id, facet_type))
|
Ok((field_id, facet_type))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pest_parse<T>(pair: Pair<Rule>) -> Result<T, pest::error::Error<Rule>>
|
||||||
|
where T: FromStr,
|
||||||
|
T::Err: ToString,
|
||||||
|
{
|
||||||
|
match pair.as_str().parse() {
|
||||||
|
Ok(value) => Ok(value),
|
||||||
|
Err(e) => {
|
||||||
|
Err(PestError::<Rule>::new_from_span(
|
||||||
|
ErrorVariant::CustomError { message: e.to_string() },
|
||||||
|
pair.as_span(),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FacetCondition {
|
impl FacetCondition {
|
||||||
pub fn from_str(
|
pub fn from_str(
|
||||||
rtxn: &heed::RoTxn,
|
rtxn: &heed::RoTxn,
|
||||||
@ -188,13 +204,13 @@ impl FacetCondition {
|
|||||||
let rvalue = items.next().unwrap();
|
let rvalue = items.next().unwrap();
|
||||||
match ftype {
|
match ftype {
|
||||||
FacetType::Integer => {
|
FacetType::Integer => {
|
||||||
let lvalue = lvalue.as_str().parse()?;
|
let lvalue = pest_parse(lvalue)?;
|
||||||
let rvalue = rvalue.as_str().parse()?;
|
let rvalue = pest_parse(rvalue)?;
|
||||||
Ok(OperatorI64(fid, Between(lvalue, rvalue)))
|
Ok(OperatorI64(fid, Between(lvalue, rvalue)))
|
||||||
},
|
},
|
||||||
FacetType::Float => {
|
FacetType::Float => {
|
||||||
let lvalue = lvalue.as_str().parse()?;
|
let lvalue = pest_parse(lvalue)?;
|
||||||
let rvalue = rvalue.as_str().parse()?;
|
let rvalue = pest_parse(rvalue)?;
|
||||||
Ok(OperatorF64(fid, Between(lvalue, rvalue)))
|
Ok(OperatorF64(fid, Between(lvalue, rvalue)))
|
||||||
},
|
},
|
||||||
FacetType::String => {
|
FacetType::String => {
|
||||||
@ -218,8 +234,8 @@ impl FacetCondition {
|
|||||||
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
||||||
let value = items.next().unwrap();
|
let value = items.next().unwrap();
|
||||||
match ftype {
|
match ftype {
|
||||||
FacetType::Integer => Ok(OperatorI64(fid, Equal(value.as_str().parse()?))),
|
FacetType::Integer => Ok(OperatorI64(fid, Equal(pest_parse(value)?))),
|
||||||
FacetType::Float => Ok(OperatorF64(fid, Equal(value.as_str().parse()?))),
|
FacetType::Float => Ok(OperatorF64(fid, Equal(pest_parse(value)?))),
|
||||||
FacetType::String => {
|
FacetType::String => {
|
||||||
Ok(OperatorString(fid, FacetStringOperator::Equal(value.as_str().to_string())))
|
Ok(OperatorString(fid, FacetStringOperator::Equal(value.as_str().to_string())))
|
||||||
},
|
},
|
||||||
@ -237,8 +253,8 @@ impl FacetCondition {
|
|||||||
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
||||||
let value = items.next().unwrap();
|
let value = items.next().unwrap();
|
||||||
match ftype {
|
match ftype {
|
||||||
FacetType::Integer => Ok(OperatorI64(fid, GreaterThan(value.as_str().parse()?))),
|
FacetType::Integer => Ok(OperatorI64(fid, GreaterThan(pest_parse(value)?))),
|
||||||
FacetType::Float => Ok(OperatorF64(fid, GreaterThan(value.as_str().parse()?))),
|
FacetType::Float => Ok(OperatorF64(fid, GreaterThan(pest_parse(value)?))),
|
||||||
FacetType::String => {
|
FacetType::String => {
|
||||||
Err(PestError::<Rule>::new_from_span(
|
Err(PestError::<Rule>::new_from_span(
|
||||||
ErrorVariant::CustomError {
|
ErrorVariant::CustomError {
|
||||||
@ -261,8 +277,8 @@ impl FacetCondition {
|
|||||||
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
||||||
let value = items.next().unwrap();
|
let value = items.next().unwrap();
|
||||||
match ftype {
|
match ftype {
|
||||||
FacetType::Integer => Ok(OperatorI64(fid, GreaterThanOrEqual(value.as_str().parse()?))),
|
FacetType::Integer => Ok(OperatorI64(fid, GreaterThanOrEqual(pest_parse(value)?))),
|
||||||
FacetType::Float => Ok(OperatorF64(fid, GreaterThanOrEqual(value.as_str().parse()?))),
|
FacetType::Float => Ok(OperatorF64(fid, GreaterThanOrEqual(pest_parse(value)?))),
|
||||||
FacetType::String => {
|
FacetType::String => {
|
||||||
Err(PestError::<Rule>::new_from_span(
|
Err(PestError::<Rule>::new_from_span(
|
||||||
ErrorVariant::CustomError {
|
ErrorVariant::CustomError {
|
||||||
@ -285,8 +301,8 @@ impl FacetCondition {
|
|||||||
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
||||||
let value = items.next().unwrap();
|
let value = items.next().unwrap();
|
||||||
match ftype {
|
match ftype {
|
||||||
FacetType::Integer => Ok(OperatorI64(fid, LowerThan(value.as_str().parse()?))),
|
FacetType::Integer => Ok(OperatorI64(fid, LowerThan(pest_parse(value)?))),
|
||||||
FacetType::Float => Ok(OperatorF64(fid, LowerThan(value.as_str().parse()?))),
|
FacetType::Float => Ok(OperatorF64(fid, LowerThan(pest_parse(value)?))),
|
||||||
FacetType::String => {
|
FacetType::String => {
|
||||||
Err(PestError::<Rule>::new_from_span(
|
Err(PestError::<Rule>::new_from_span(
|
||||||
ErrorVariant::CustomError {
|
ErrorVariant::CustomError {
|
||||||
@ -309,8 +325,8 @@ impl FacetCondition {
|
|||||||
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
let (fid, ftype) = get_field_id_facet_type(fields_ids_map, faceted_fields, &mut items)?;
|
||||||
let value = items.next().unwrap();
|
let value = items.next().unwrap();
|
||||||
match ftype {
|
match ftype {
|
||||||
FacetType::Integer => Ok(OperatorI64(fid, LowerThanOrEqual(value.as_str().parse()?))),
|
FacetType::Integer => Ok(OperatorI64(fid, LowerThanOrEqual(pest_parse(value)?))),
|
||||||
FacetType::Float => Ok(OperatorF64(fid, LowerThanOrEqual(value.as_str().parse()?))),
|
FacetType::Float => Ok(OperatorF64(fid, LowerThanOrEqual(pest_parse(value)?))),
|
||||||
FacetType::String => {
|
FacetType::String => {
|
||||||
Err(PestError::<Rule>::new_from_span(
|
Err(PestError::<Rule>::new_from_span(
|
||||||
ErrorVariant::CustomError {
|
ErrorVariant::CustomError {
|
||||||
|
Loading…
Reference in New Issue
Block a user