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