connector_arrow 0.11.0

Load data from databases to Apache Arrow, the fastest way.
Documentation
use arrow::datatypes::{i256, DataType};

pub fn decimal128_to_string(ty: &DataType, value: i128) -> String {
    let DataType::Decimal128(_, scale) = ty else {
        unreachable!();
    };
    insert_dot(scale, value.to_string())
}

pub fn decimal256_to_string(ty: &DataType, value: i256) -> String {
    let DataType::Decimal256(_, scale) = ty else {
        unreachable!();
    };
    insert_dot(scale, value.to_string())
}

fn insert_dot(scale: &i8, value: String) -> String {
    if *scale > 0 {
        let minus_len: usize = if value.starts_with('-') { 1 } else { 0 };

        let fracs = *scale as usize;
        if fracs >= value.len() - minus_len {
            let (minus, value) = value.split_at(minus_len);
            format!("{minus}0.{}{value}", "0".repeat(fracs - value.len()))
        } else {
            let mut value = value;
            value.insert(value.len() - fracs, '.');
            value
        }
    } else {
        value
    }
}