gluesql_core/translate/
ast_literal.rs1use {
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}