diff --git a/datafusion-postgres/src/datatypes.rs b/datafusion-postgres/src/datatypes.rs index ca199b1..5714e2a 100644 --- a/datafusion-postgres/src/datatypes.rs +++ b/datafusion-postgres/src/datatypes.rs @@ -70,6 +70,7 @@ pub(crate) fn into_pg_type(df_type: &DataType) -> PgWireResult { } } } + DataType::Utf8View => Type::TEXT, _ => { return Err(PgWireError::UserError(Box::new(ErrorInfo::new( "ERROR".to_owned(), @@ -161,6 +162,13 @@ get_primitive_list_value!(get_u64_list_value, UInt64Type, i64, |val: u64| { get_primitive_list_value!(get_f32_list_value, Float32Type, f32); get_primitive_list_value!(get_f64_list_value, Float64Type, f64); +fn get_utf8_view_value(arr: &Arc, idx: usize) -> &str { + arr.as_any() + .downcast_ref::() + .unwrap() + .value(idx) +} + fn get_utf8_value(arr: &Arc, idx: usize) -> &str { arr.as_any() .downcast_ref::() @@ -249,6 +257,7 @@ fn encode_value( DataType::Float32 => encoder.encode_field(&get_f32_value(arr, idx))?, DataType::Float64 => encoder.encode_field(&get_f64_value(arr, idx))?, DataType::Utf8 => encoder.encode_field(&get_utf8_value(arr, idx))?, + DataType::Utf8View => encoder.encode_field(&get_utf8_view_value(arr, idx))?, DataType::LargeUtf8 => encoder.encode_field(&get_large_utf8_value(arr, idx))?, DataType::Binary => encoder.encode_field(&get_binary_value(arr, idx))?, DataType::LargeBinary => encoder.encode_field(&get_large_binary_value(arr, idx))?,