Finish sql_datatype_to_rust_type
This commit is contained in:
parent
120ac1e20d
commit
7aa5e6fd82
1 changed files with 32 additions and 50 deletions
|
|
@ -1,9 +1,9 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use crate::rust::{
|
||||
sql_ident_to_field_name, sql_ident_to_type_name, type_gen::UnsupportedDataType,
|
||||
GeneratedTableStruct, IdPromoteMode, ModuleCodeGenConfig, StructCodeGenConfig,
|
||||
StructFieldCodeGenConfig, TableStruct, TableStructField,
|
||||
sql_ident_to_field_name, sql_ident_to_module_name, sql_ident_to_type_name,
|
||||
type_gen::UnsupportedDataType, GeneratedTableStruct, IdPromoteMode, ModuleCodeGenConfig,
|
||||
StructCodeGenConfig, StructFieldCodeGenConfig, TableStruct, TableStructField,
|
||||
};
|
||||
|
||||
fn generate_table_struct_and_impls(
|
||||
|
|
@ -107,50 +107,42 @@ fn sql_datatype_to_rust_type(
|
|||
syn::Type::Verbatim(quote::quote! {i16})
|
||||
}
|
||||
sqlparser::ast::DataType::UnsignedInt2(_) => syn::Type::Verbatim(quote::quote! {u16}),
|
||||
sqlparser::ast::DataType::Int16 => todo!(),
|
||||
sqlparser::ast::DataType::Int128 => todo!(),
|
||||
sqlparser::ast::DataType::Int256 => todo!(),
|
||||
sqlparser::ast::DataType::Int(_)
|
||||
| sqlparser::ast::DataType::Int32
|
||||
| sqlparser::ast::DataType::Int4(_)
|
||||
| sqlparser::ast::DataType::Integer(_) => syn::Type::Verbatim(quote::quote! {i32}),
|
||||
sqlparser::ast::DataType::UnsignedInt(_) => todo!(),
|
||||
sqlparser::ast::DataType::UnsignedInt4(_) => todo!(),
|
||||
sqlparser::ast::DataType::UnsignedInteger(_) => todo!(),
|
||||
sqlparser::ast::DataType::UInt8 => todo!(),
|
||||
sqlparser::ast::DataType::UInt16 => todo!(),
|
||||
sqlparser::ast::DataType::UInt32 => todo!(),
|
||||
sqlparser::ast::DataType::UInt64 => todo!(),
|
||||
sqlparser::ast::DataType::UInt128 => todo!(),
|
||||
sqlparser::ast::DataType::UInt256 => todo!(),
|
||||
sqlparser::ast::DataType::Int8(_)
|
||||
| sqlparser::ast::DataType::Int64
|
||||
| sqlparser::ast::DataType::BigInt(_) => syn::Type::Verbatim(quote::quote! {i64}),
|
||||
sqlparser::ast::DataType::UnsignedBigInt(_) => todo!(),
|
||||
sqlparser::ast::DataType::UnsignedInt8(_) => todo!(),
|
||||
sqlparser::ast::DataType::Int8(_) | sqlparser::ast::DataType::BigInt(_) => {
|
||||
syn::Type::Verbatim(quote::quote! {i64})
|
||||
}
|
||||
sqlparser::ast::DataType::Float(_)
|
||||
| sqlparser::ast::DataType::Float4
|
||||
| sqlparser::ast::DataType::Real
|
||||
| sqlparser::ast::DataType::Float32 => syn::Type::Verbatim(quote::quote! {f32}),
|
||||
sqlparser::ast::DataType::Float64
|
||||
| sqlparser::ast::DataType::Float8
|
||||
| sqlparser::ast::DataType::Real => syn::Type::Verbatim(quote::quote! {f32}),
|
||||
sqlparser::ast::DataType::Float8
|
||||
| sqlparser::ast::DataType::Double(..)
|
||||
| sqlparser::ast::DataType::DoublePrecision => syn::Type::Verbatim(quote::quote! {f64}),
|
||||
sqlparser::ast::DataType::Bool => todo!(),
|
||||
sqlparser::ast::DataType::Boolean => todo!(),
|
||||
sqlparser::ast::DataType::Date => todo!(),
|
||||
sqlparser::ast::DataType::Date32 => todo!(),
|
||||
sqlparser::ast::DataType::Time(_, timezone_info) => todo!(),
|
||||
sqlparser::ast::DataType::Datetime(_) => todo!(),
|
||||
sqlparser::ast::DataType::Datetime64(_, _) => todo!(),
|
||||
sqlparser::ast::DataType::Timestamp(_, timezone_info) => todo!(),
|
||||
sqlparser::ast::DataType::Interval => todo!(),
|
||||
sqlparser::ast::DataType::JSON => todo!(),
|
||||
sqlparser::ast::DataType::JSONB => todo!(),
|
||||
sqlparser::ast::DataType::Regclass => todo!(),
|
||||
sqlparser::ast::DataType::Bit(_) => todo!(),
|
||||
sqlparser::ast::DataType::BitVarying(_) => todo!(),
|
||||
sqlparser::ast::DataType::Custom(object_name, vec) => todo!(),
|
||||
sqlparser::ast::DataType::Bool | sqlparser::ast::DataType::Boolean => {
|
||||
syn::Type::Verbatim(quote::quote! {bool})
|
||||
}
|
||||
sqlparser::ast::DataType::Date => syn::Type::Verbatim(quote::quote! {time::Date}),
|
||||
sqlparser::ast::DataType::Time(_, _) => syn::Type::Verbatim(quote::quote! {time::Time}),
|
||||
sqlparser::ast::DataType::Timestamp(_, _) => {
|
||||
syn::Type::Verbatim(quote::quote! {time::PrimitiveDateTime})
|
||||
}
|
||||
sqlparser::ast::DataType::Interval => syn::Type::Verbatim(quote::quote! {time::Duration}),
|
||||
sqlparser::ast::DataType::JSON | sqlparser::ast::DataType::JSONB => {
|
||||
syn::Type::Verbatim(quote::quote! {time::Duration})
|
||||
}
|
||||
sqlparser::ast::DataType::Custom(object_name, vec) => {
|
||||
if object_name.0.len() == 1 {
|
||||
let rust_type_name = sql_ident_to_type_name(&object_name.0[0]);
|
||||
syn::Type::Verbatim(quote::quote! {crate::#rust_type_name})
|
||||
} else {
|
||||
let rust_type_name =
|
||||
sql_ident_to_type_name(&object_name.0[object_name.0.len() - 1]);
|
||||
let rust_module_name =
|
||||
sql_ident_to_module_name(&object_name.0[object_name.0.len() - 2]);
|
||||
syn::Type::Verbatim(quote::quote! {crate::#rust_module_name::#rust_type_name})
|
||||
}
|
||||
}
|
||||
sqlparser::ast::DataType::Array(array_elem_type_def) => match array_elem_type_def {
|
||||
sqlparser::ast::ArrayElemTypeDef::None => {
|
||||
return Err(UnsupportedDataType(datatype.clone()))
|
||||
|
|
@ -162,16 +154,6 @@ fn sql_datatype_to_rust_type(
|
|||
syn::Type::Verbatim(quote::quote! {Vec<#inner_type>})
|
||||
}
|
||||
},
|
||||
sqlparser::ast::DataType::Map(data_type, data_type1) => todo!(),
|
||||
sqlparser::ast::DataType::Tuple(vec) => todo!(),
|
||||
sqlparser::ast::DataType::Nested(vec) => todo!(),
|
||||
sqlparser::ast::DataType::Enum(vec, _) => todo!(),
|
||||
sqlparser::ast::DataType::Set(vec) => todo!(),
|
||||
sqlparser::ast::DataType::Struct(vec, struct_bracket_kind) => todo!(),
|
||||
sqlparser::ast::DataType::Union(vec) => todo!(),
|
||||
sqlparser::ast::DataType::Nullable(data_type) => todo!(),
|
||||
sqlparser::ast::DataType::LowCardinality(data_type) => todo!(),
|
||||
sqlparser::ast::DataType::Trigger => todo!(),
|
||||
_ => return Err(UnsupportedDataType(datatype.clone())),
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue