From eea214bdac4e8b02528ce9055a43dd36e77f0ce7 Mon Sep 17 00:00:00 2001 From: Yaroslav Litvinov Date: Fri, 21 Feb 2025 02:54:03 +0200 Subject: [PATCH 1/5] map float types to real logical_type --- crates/control_plane/src/models/mod.rs | 8 ++++++-- crates/control_plane/src/utils.rs | 11 +++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/crates/control_plane/src/models/mod.rs b/crates/control_plane/src/models/mod.rs index 62ea71c76..ce08b1544 100644 --- a/crates/control_plane/src/models/mod.rs +++ b/crates/control_plane/src/models/mod.rs @@ -485,12 +485,16 @@ impl ColumnInfo { | DataType::UInt8 | DataType::UInt16 | DataType::UInt32 - | DataType::UInt64 - | DataType::Float32 => { + | DataType::UInt64 => { column_info.r#type = "fixed".to_string(); column_info.precision = Some(38); column_info.scale = Some(0); } + DataType::Float16 | DataType::Float32 | DataType::Float64 => { + column_info.r#type = "real".to_string(); + column_info.precision = Some(38); + column_info.scale = Some(16); + } DataType::Decimal128(precision, scale) | DataType::Decimal256(precision, scale) => { column_info.r#type = "fixed".to_string(); column_info.precision = Some(i32::from(*precision)); diff --git a/crates/control_plane/src/utils.rs b/crates/control_plane/src/utils.rs index 39074104a..030a890dc 100644 --- a/crates/control_plane/src/utils.rs +++ b/crates/control_plane/src/utils.rs @@ -503,7 +503,11 @@ mod tests { assert_eq!(converted_timestamp_array.value(2), 1_627_846_262); } - #[allow(clippy::needless_pass_by_value)] + #[allow( + clippy::needless_pass_by_value, + clippy::cast_sign_loss, + clippy::cast_possible_truncation + )] fn check_record_batches_uint_to_int( batches: Vec, converted_batches: Vec, @@ -540,7 +544,10 @@ mod tests { assert_eq!(column_info.scale.unwrap(), metadata_scale); match field.data_type() { DataType::UInt64 => { - assert_eq!(*converted_field.data_type(), DataType::Decimal128(38, 0)); + assert_eq!( + *converted_field.data_type(), + DataType::Decimal128(metadata_precision as u8, metadata_scale as i8) + ); let values: Decimal128Array = converted_column .as_any() .downcast_ref::() From 4bd7deac8cbb5276a5e52b6a1046b56cb9692ca3 Mon Sep 17 00:00:00 2001 From: Yaroslav Litvinov Date: Fri, 21 Feb 2025 10:22:09 +0200 Subject: [PATCH 2/5] separate sessions tests to avoid blocking issues --- crates/control_plane/src/service.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/control_plane/src/service.rs b/crates/control_plane/src/service.rs index a8fe34302..c47858929 100644 --- a/crates/control_plane/src/service.rs +++ b/crates/control_plane/src/service.rs @@ -799,7 +799,11 @@ mod tests { assert!(result.is_ok()); let sessions = service.df_sessions.read().await; assert!(!sessions.contains_key(&session_id)); + } + #[tokio::test] + async fn test_delete_non_existent_session() { + let service = service(); let session_id = "non_existent_session".to_string(); let result = service.delete_session(session_id.clone()).await; assert!(result.is_ok()); From ae6c6240ae80d74a1f63ed894e436bd16a5786cb Mon Sep 17 00:00:00 2001 From: Yaroslav Litvinov Date: Fri, 21 Feb 2025 10:26:13 +0200 Subject: [PATCH 3/5] unit test for floats datatype maped into real logical type --- crates/control_plane/src/models/mod.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/control_plane/src/models/mod.rs b/crates/control_plane/src/models/mod.rs index ce08b1544..6c44e5bdb 100644 --- a/crates/control_plane/src/models/mod.rs +++ b/crates/control_plane/src/models/mod.rs @@ -777,6 +777,26 @@ mod tests { assert_eq!(column_info.r#type, "text"); assert_eq!(column_info.byte_length, None); assert_eq!(column_info.length, None); + + let floats = [ + (DataType::Float16, 16, true), + (DataType::Float32, 16, true), + (DataType::Float64, 16, true), + (DataType::Float64, 17, false), + ]; + for (float_datatype, scale, outcome) in floats { + let field = Field::new("test_field", float_datatype, false); + let column_info = ColumnInfo::from_field(&field); + assert_eq!(column_info.name, "test_field"); + assert_eq!(column_info.r#type, "real"); + assert_eq!(column_info.precision.unwrap(), 38); + if outcome == true { + assert_eq!(column_info.scale.unwrap(), scale); + } else { + assert_ne!(column_info.scale.unwrap(), scale); + } + } + } #[tokio::test] From 9694faeb7a5268bb4dcc0cf4a479525bc0e3a65d Mon Sep 17 00:00:00 2001 From: Yaroslav Litvinov Date: Fri, 21 Feb 2025 10:27:53 +0200 Subject: [PATCH 4/5] fmt --- crates/control_plane/src/models/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/control_plane/src/models/mod.rs b/crates/control_plane/src/models/mod.rs index 6c44e5bdb..86c165073 100644 --- a/crates/control_plane/src/models/mod.rs +++ b/crates/control_plane/src/models/mod.rs @@ -796,7 +796,6 @@ mod tests { assert_ne!(column_info.scale.unwrap(), scale); } } - } #[tokio::test] From 6efe604b2279f8b590a616d1171373f33f9eb213 Mon Sep 17 00:00:00 2001 From: Yaroslav Litvinov Date: Fri, 21 Feb 2025 11:20:42 +0200 Subject: [PATCH 5/5] clippy --- crates/control_plane/src/models/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/control_plane/src/models/mod.rs b/crates/control_plane/src/models/mod.rs index 86c165073..14dbe5642 100644 --- a/crates/control_plane/src/models/mod.rs +++ b/crates/control_plane/src/models/mod.rs @@ -790,7 +790,7 @@ mod tests { assert_eq!(column_info.name, "test_field"); assert_eq!(column_info.r#type, "real"); assert_eq!(column_info.precision.unwrap(), 38); - if outcome == true { + if outcome { assert_eq!(column_info.scale.unwrap(), scale); } else { assert_ne!(column_info.scale.unwrap(), scale);