risingwave_frontend/utils/
data_type.rsuse risingwave_common::types::DataType;
use risingwave_sqlparser::ast::{DataType as AstDataType, StructField};
#[easy_ext::ext(DataTypeToAst)]
impl DataType {
pub fn to_ast(&self) -> AstDataType {
match self {
DataType::Boolean => AstDataType::Boolean,
DataType::Int16 => AstDataType::SmallInt,
DataType::Int32 => AstDataType::Int,
DataType::Int64 => AstDataType::BigInt,
DataType::Float32 => AstDataType::Real,
DataType::Float64 => AstDataType::Double,
DataType::Decimal => AstDataType::Decimal(None, None),
DataType::Date => AstDataType::Date,
DataType::Varchar => AstDataType::Varchar,
DataType::Time => AstDataType::Time(false),
DataType::Timestamp => AstDataType::Timestamp(false),
DataType::Timestamptz => AstDataType::Timestamp(true),
DataType::Interval => AstDataType::Interval,
DataType::Jsonb => AstDataType::Jsonb,
DataType::Bytea => AstDataType::Bytea,
DataType::List(item_ty) => AstDataType::Array(Box::new(item_ty.to_ast())),
DataType::Struct(fields) => {
let fields = fields
.iter()
.map(|(name, ty)| StructField {
name: name.into(),
data_type: ty.to_ast(),
})
.collect();
AstDataType::Struct(fields)
}
DataType::Int256 => AstDataType::Custom(vec!["rw_int256".into()].into()),
DataType::Map(map) => {
AstDataType::Map(Box::new((map.key().to_ast(), map.value().to_ast())))
}
DataType::Serial => unreachable!("serial type should not be user-defined"),
}
}
}