1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use {
super::{error::ValueError, Value},
crate::result::{Error, Result},
sqlparser::ast::Value as AstValue,
std::convert::TryFrom,
};
impl<'a> TryFrom<&'a AstValue> for Value {
type Error = Error;
fn try_from(ast_value: &'a AstValue) -> Result<Self> {
match ast_value {
AstValue::Boolean(value) => Ok(Value::Bool(*value)),
AstValue::Number(value, false) => value
.parse::<i64>()
.map_or_else(
|_| value.parse::<f64>().map(Value::F64),
|value| Ok(Value::I64(value)),
)
.map_err(|_| ValueError::FailedToParseNumber.into()),
AstValue::SingleQuotedString(value) => Ok(Value::Str(value.clone())),
AstValue::Null => Ok(Value::Null),
_ => Err(ValueError::UnimplementedLiteralType.into()),
}
}
}