diff --git a/rasql-core/src/rust/mod.rs b/rasql-core/src/rust/mod.rs index 204c446..4153050 100644 --- a/rasql-core/src/rust/mod.rs +++ b/rasql-core/src/rust/mod.rs @@ -47,110 +47,6 @@ fn sql_ident_to_module_name(ident: &sqlparser::ast::Ident) -> syn::Ident { sql_ident_to_field_name(ident) } -fn sql_datatype_to_rust_type(datatype: &sqlparser::ast::DataType) -> syn::Type { - match datatype { - sqlparser::ast::DataType::Character(..) - | sqlparser::ast::DataType::Char(..) - | sqlparser::ast::DataType::CharacterVarying(..) - | sqlparser::ast::DataType::CharVarying(..) - | sqlparser::ast::DataType::Varchar(..) - | sqlparser::ast::DataType::Nvarchar(..) - | sqlparser::ast::DataType::Text - | sqlparser::ast::DataType::TinyText - | sqlparser::ast::DataType::MediumText - | sqlparser::ast::DataType::LongText - | sqlparser::ast::DataType::String(_) - | sqlparser::ast::DataType::FixedString(_) => syn::Type::Verbatim(quote::quote! {String}), - sqlparser::ast::DataType::Uuid => todo!(), - sqlparser::ast::DataType::CharacterLargeObject(_) => todo!(), - sqlparser::ast::DataType::CharLargeObject(_) => todo!(), - sqlparser::ast::DataType::Clob(_) => todo!(), - sqlparser::ast::DataType::Binary(_) => todo!(), - sqlparser::ast::DataType::Varbinary(_) => todo!(), - sqlparser::ast::DataType::Blob(_) => todo!(), - sqlparser::ast::DataType::TinyBlob => todo!(), - sqlparser::ast::DataType::MediumBlob => todo!(), - sqlparser::ast::DataType::LongBlob => todo!(), - sqlparser::ast::DataType::Bytes(_) => todo!(), - sqlparser::ast::DataType::Numeric(exact_number_info) => todo!(), - sqlparser::ast::DataType::Decimal(exact_number_info) => todo!(), - sqlparser::ast::DataType::BigNumeric(exact_number_info) => todo!(), - sqlparser::ast::DataType::BigDecimal(exact_number_info) => todo!(), - sqlparser::ast::DataType::Dec(exact_number_info) => todo!(), - sqlparser::ast::DataType::Float(_) => todo!(), - sqlparser::ast::DataType::TinyInt(_) => todo!(), - sqlparser::ast::DataType::UnsignedTinyInt(_) => todo!(), - sqlparser::ast::DataType::Int2(_) => todo!(), - sqlparser::ast::DataType::UnsignedInt2(_) => todo!(), - sqlparser::ast::DataType::SmallInt(_) => todo!(), - sqlparser::ast::DataType::UnsignedSmallInt(_) => todo!(), - sqlparser::ast::DataType::MediumInt(_) => todo!(), - sqlparser::ast::DataType::UnsignedMediumInt(_) => todo!(), - sqlparser::ast::DataType::Int(_) => todo!(), - sqlparser::ast::DataType::Int16 => todo!(), - sqlparser::ast::DataType::Int128 => todo!(), - sqlparser::ast::DataType::Int256 => todo!(), - 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::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::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::Bytea => todo!(), - sqlparser::ast::DataType::Bit(_) => todo!(), - sqlparser::ast::DataType::BitVarying(_) => todo!(), - sqlparser::ast::DataType::Custom(object_name, vec) => todo!(), - sqlparser::ast::DataType::Array(array_elem_type_def) => match array_elem_type_def { - sqlparser::ast::ArrayElemTypeDef::None => unimplemented!(), - sqlparser::ast::ArrayElemTypeDef::AngleBracket(data_type) - | sqlparser::ast::ArrayElemTypeDef::SquareBracket(data_type, _) - | sqlparser::ast::ArrayElemTypeDef::Parenthesis(data_type) => todo!(), - }, - 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::Unspecified => todo!(), - sqlparser::ast::DataType::Trigger => todo!(), - sqlparser::ast::DataType::AnyType => todo!(), - } -} - fn generate_table_struct_and_impls< Traits: rasql_traits::DbTraits, TypeGen: TypeGenerator, @@ -199,7 +95,7 @@ fn generate_table_struct_and_impls< let r#type = match (&field_config.override_type, field_config.id_promote_mode) { (Some(r#type), _) => r#type.clone(), - (None, IdPromoteMode::None) => column.data_type, + (None, IdPromoteMode::None) => TypeGen::sql_datatype_to_rust_type(&column.data_type), (None, IdPromoteMode::TrustedId) => todo!(), (None, IdPromoteMode::Id) => todo!(), }; diff --git a/rasql-core/src/rust/type_gen.rs b/rasql-core/src/rust/type_gen.rs index 5c24509..ad4fd4e 100644 --- a/rasql-core/src/rust/type_gen.rs +++ b/rasql-core/src/rust/type_gen.rs @@ -27,7 +27,107 @@ impl TokioPostgresGenerator { #[cfg(feature = "tokio-postgres")] impl TypeGenerator for TokioPostgresGenerator { fn sql_datatype_to_rust_type(datatype: &sqlparser::ast::DataType) -> syn::Type { - todo!() + match datatype { + sqlparser::ast::DataType::Character(..) + | sqlparser::ast::DataType::Char(..) + | sqlparser::ast::DataType::CharacterVarying(..) + | sqlparser::ast::DataType::CharVarying(..) + | sqlparser::ast::DataType::Varchar(..) + | sqlparser::ast::DataType::Nvarchar(..) + | sqlparser::ast::DataType::Text + | sqlparser::ast::DataType::TinyText + | sqlparser::ast::DataType::MediumText + | sqlparser::ast::DataType::LongText + | sqlparser::ast::DataType::String(_) + | sqlparser::ast::DataType::FixedString(_) => syn::Type::Verbatim(quote::quote! {String}), + sqlparser::ast::DataType::Uuid => todo!(), + sqlparser::ast::DataType::CharacterLargeObject(_) => todo!(), + sqlparser::ast::DataType::CharLargeObject(_) => todo!(), + sqlparser::ast::DataType::Clob(_) => todo!(), + sqlparser::ast::DataType::Binary(_) => todo!(), + sqlparser::ast::DataType::Varbinary(_) => todo!(), + sqlparser::ast::DataType::Blob(_) => todo!(), + sqlparser::ast::DataType::TinyBlob => todo!(), + sqlparser::ast::DataType::MediumBlob => todo!(), + sqlparser::ast::DataType::LongBlob => todo!(), + sqlparser::ast::DataType::Bytes(_) => todo!(), + sqlparser::ast::DataType::Numeric(exact_number_info) => todo!(), + sqlparser::ast::DataType::Decimal(exact_number_info) => todo!(), + sqlparser::ast::DataType::BigNumeric(exact_number_info) => todo!(), + sqlparser::ast::DataType::BigDecimal(exact_number_info) => todo!(), + sqlparser::ast::DataType::Dec(exact_number_info) => todo!(), + sqlparser::ast::DataType::Float(_) => todo!(), + sqlparser::ast::DataType::TinyInt(_) => todo!(), + sqlparser::ast::DataType::UnsignedTinyInt(_) => todo!(), + sqlparser::ast::DataType::Int2(_) => todo!(), + sqlparser::ast::DataType::UnsignedInt2(_) => todo!(), + sqlparser::ast::DataType::SmallInt(_) => todo!(), + sqlparser::ast::DataType::UnsignedSmallInt(_) => todo!(), + sqlparser::ast::DataType::MediumInt(_) => todo!(), + sqlparser::ast::DataType::UnsignedMediumInt(_) => todo!(), + sqlparser::ast::DataType::Int(_) => todo!(), + sqlparser::ast::DataType::Int16 => todo!(), + sqlparser::ast::DataType::Int128 => todo!(), + sqlparser::ast::DataType::Int256 => todo!(), + 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::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::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::Bytea => todo!(), + sqlparser::ast::DataType::Bit(_) => todo!(), + sqlparser::ast::DataType::BitVarying(_) => todo!(), + sqlparser::ast::DataType::Custom(object_name, vec) => todo!(), + sqlparser::ast::DataType::Array(array_elem_type_def) => match array_elem_type_def { + sqlparser::ast::ArrayElemTypeDef::None => unimplemented!(), + sqlparser::ast::ArrayElemTypeDef::AngleBracket(data_type) + | sqlparser::ast::ArrayElemTypeDef::SquareBracket(data_type, _) + | sqlparser::ast::ArrayElemTypeDef::Parenthesis(data_type) => todo!(), + }, + 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::Unspecified => todo!(), + sqlparser::ast::DataType::Trigger => todo!(), + sqlparser::ast::DataType::AnyType => todo!(), + } } fn generate_table_struct(table_struct: &TableStruct) -> proc_macro2::TokenStream {