gluesql_core/translate/
ast_literal.rs

1use {
2    super::TranslateError,
3    crate::{
4        ast::{AstLiteral, DateTimeField, TrimWhereField},
5        result::Result,
6    },
7    sqlparser::ast::{
8        DateTimeField as SqlDateTimeField, TrimWhereField as SqlTrimWhereField, Value as SqlValue,
9    },
10};
11
12pub fn translate_ast_literal(sql_value: &SqlValue) -> Result<AstLiteral> {
13    Ok(match sql_value {
14        SqlValue::Boolean(v) => AstLiteral::Boolean(*v),
15        SqlValue::Number(v, _) => AstLiteral::Number(v.clone()),
16        SqlValue::SingleQuotedString(v) => AstLiteral::QuotedString(v.clone()),
17        SqlValue::HexStringLiteral(v) => AstLiteral::HexString(v.clone()),
18        SqlValue::Null => AstLiteral::Null,
19        _ => {
20            return Err(TranslateError::UnsupportedAstLiteral(sql_value.to_string()).into());
21        }
22    })
23}
24
25pub fn translate_datetime_field(sql_datetime_field: &SqlDateTimeField) -> Result<DateTimeField> {
26    Ok(match sql_datetime_field {
27        SqlDateTimeField::Year => DateTimeField::Year,
28        SqlDateTimeField::Month => DateTimeField::Month,
29        SqlDateTimeField::Day => DateTimeField::Day,
30        SqlDateTimeField::Hour => DateTimeField::Hour,
31        SqlDateTimeField::Minute => DateTimeField::Minute,
32        SqlDateTimeField::Second => DateTimeField::Second,
33        _ => {
34            return Err(
35                TranslateError::UnsupportedDateTimeField(sql_datetime_field.to_string()).into(),
36            );
37        }
38    })
39}
40
41pub fn translate_trim_where_field(sql_trim_where_field: &SqlTrimWhereField) -> TrimWhereField {
42    use TrimWhereField::*;
43    match sql_trim_where_field {
44        SqlTrimWhereField::Both => Both,
45        SqlTrimWhereField::Leading => Leading,
46        SqlTrimWhereField::Trailing => Trailing,
47    }
48}