Skip to content

Commit 44f72eb

Browse files
author
longshan.lu
committed
feat(constants): introduce default Decimal128 constants for Arrow integration
- Added DEFAULT_ARROW_DECIMAL_PRECISION, DEFAULT_ARROW_DECIMAL_SCALE, and DEFAULT_ARROW_DECIMAL constants to support Decimal128 in Arrow. - Updated imports in arrow_assoc modules to utilize the new constants. - Removed redundant constant definitions from arrow_assoc implementations.
1 parent c5d63a2 commit 44f72eb

File tree

5 files changed

+17
-58
lines changed

5 files changed

+17
-58
lines changed

connectorx/src/constants.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
#[cfg(feature = "dst_arrow")]
2+
use arrow::datatypes::DataType as ArrowDataType;
3+
4+
#[cfg(feature = "dst_arrow")]
5+
pub const DEFAULT_ARROW_DECIMAL_PRECISION: u8 = 38;
6+
7+
#[cfg(feature = "dst_arrow")]
8+
pub const DEFAULT_ARROW_DECIMAL_SCALE: i8 = 10;
9+
10+
#[cfg(feature = "dst_arrow")]
11+
pub const DEFAULT_ARROW_DECIMAL: ArrowDataType =
12+
ArrowDataType::Decimal128(DEFAULT_ARROW_DECIMAL_PRECISION, DEFAULT_ARROW_DECIMAL_SCALE);
13+
114
#[cfg(feature = "dst_arrow")]
215
pub(crate) const SECONDS_IN_DAY: i64 = 86_400;
316

connectorx/src/destinations/arrow/arrow_assoc.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::{
22
errors::{ArrowDestinationError, Result},
33
typesystem::{DateTimeWrapperMicro, NaiveDateTimeWrapperMicro, NaiveTimeWrapperMicro},
44
};
5-
use crate::{constants::SECONDS_IN_DAY, utils::decimal_to_i128};
5+
use crate::{constants::{DEFAULT_ARROW_DECIMAL, DEFAULT_ARROW_DECIMAL_SCALE, SECONDS_IN_DAY}, utils::decimal_to_i128};
66
use arrow::array::{
77
ArrayBuilder, BooleanBuilder, Date32Builder, Decimal128Builder, Float32Builder, Float64Builder,
88
Int16Builder, Int32Builder, Int64Builder, LargeBinaryBuilder, LargeListBuilder, StringBuilder,
@@ -72,10 +72,7 @@ impl_arrow_assoc!(f32, ArrowDataType::Float32, Float32Builder);
7272
impl_arrow_assoc!(f64, ArrowDataType::Float64, Float64Builder);
7373
impl_arrow_assoc!(bool, ArrowDataType::Boolean, BooleanBuilder);
7474

75-
const DEFAULT_ARROW_DECIMAL_PRECISION: u8 = 38;
76-
const DEFAULT_ARROW_DECIMAL_SCALE: i8 = 10;
77-
const DEFAULT_ARROW_DECIMAL: ArrowDataType =
78-
ArrowDataType::Decimal128(DEFAULT_ARROW_DECIMAL_PRECISION, DEFAULT_ARROW_DECIMAL_SCALE);
75+
7976

8077
impl ArrowAssoc for Decimal {
8178
type Builder = Decimal128Builder;

connectorx/src/destinations/arrowstream/arrow_assoc.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::errors::{ArrowDestinationError, Result};
2-
use crate::constants::SECONDS_IN_DAY;
2+
use crate::constants::{DEFAULT_ARROW_DECIMAL, DEFAULT_ARROW_DECIMAL_SCALE, SECONDS_IN_DAY};
33
use crate::utils::decimal_to_i128;
44
use arrow::array::{
55
ArrayBuilder, BooleanBuilder, Date32Builder, Date64Builder, Decimal128Builder, Float32Builder,
@@ -11,11 +11,6 @@ use arrow::datatypes::{DataType as ArrowDataType, TimeUnit};
1111
use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc};
1212
use fehler::throws;
1313
use rust_decimal::Decimal;
14-
15-
const DEFAULT_ARROW_DECIMAL_PRECISION: u8 = 38;
16-
const DEFAULT_ARROW_DECIMAL_SCALE: i8 = 10;
17-
const DEFAULT_ARROW_DECIMAL: ArrowDataType =
18-
ArrowDataType::Decimal128(DEFAULT_ARROW_DECIMAL_PRECISION, DEFAULT_ARROW_DECIMAL_SCALE);
1914
/// Associate arrow builder with native type
2015
pub trait ArrowAssoc {
2116
type Builder: ArrayBuilder + Send;

connectorx/src/transports/postgres_arrowstream.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ macro_rules! impl_postgres_transport {
4242
mappings = {
4343
{ Float4[f32] => Float64[f64] | conversion auto }
4444
{ Float8[f64] => Float64[f64] | conversion auto }
45-
{ Numeric[Decimal] => Decimal[Decimal] | conversion option }
45+
{ Numeric[Decimal] => Decimal[Decimal] | conversion auto }
4646
{ Int2[i16] => Int64[i64] | conversion auto }
4747
{ Int4[i32] => Int64[i64] | conversion auto }
4848
{ Int8[i64] => Int64[i64] | conversion auto }
@@ -80,12 +80,6 @@ impl<P, C> TypeConversion<Uuid, String> for PostgresArrowTransport<P, C> {
8080
}
8181
}
8282

83-
impl<P, C> TypeConversion<Decimal, Decimal> for PostgresArrowTransport<P, C> {
84-
fn convert(val: Decimal) -> Decimal {
85-
val
86-
}
87-
}
88-
8983
impl<P, C> TypeConversion<Value, String> for PostgresArrowTransport<P, C> {
9084
fn convert(val: Value) -> String {
9185
val.to_string()

connectorx/tests/test_postgres.rs

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -26,46 +26,6 @@ use postgres::NoTls;
2626
use std::env;
2727
use url::Url;
2828

29-
#[test]
30-
fn test_types_simple_postgres_aa() {
31-
let _ = env_logger::builder().is_test(true).try_init();
32-
33-
let dburl = env::var("POSTGRES_URL").unwrap();
34-
35-
let vars = vec!["test_numeric"].join(",");
36-
37-
let queries = [CXQuery::naked(format!("select {vars} from test_types"))];
38-
let url = Url::parse(dburl.as_str()).unwrap();
39-
let (config, _tls) = rewrite_tls_args(&url).unwrap();
40-
let builder = PostgresSource::<SimpleProtocol, NoTls>::new(config, NoTls, 2).unwrap();
41-
let mut destination = ArrowDestination::new();
42-
let dispatcher = Dispatcher::<_, _, PostgresArrowTransport<SimpleProtocol, NoTls>>::new(
43-
builder,
44-
&mut destination,
45-
&queries,
46-
Some(String::from("select * from test_types")),
47-
);
48-
49-
dispatcher.run().expect("run dispatcher");
50-
51-
let result = destination.arrow().unwrap();
52-
53-
arrow::util::pretty::print_batches(&result).unwrap();
54-
}
55-
56-
#[test]
57-
fn test_decimal_128() {
58-
let mut builder = Decimal128Builder::new();
59-
builder.append_value(1);
60-
builder.append_value(1234567890);
61-
builder.append_value(1234567890);
62-
builder.append_value(1234567890);
63-
builder.append_value(1234567890);
64-
let decimal = builder.finish();
65-
66-
println!("decimal: {:#?}", decimal.value_as_string(0));
67-
}
68-
6929
#[test]
7030
fn load_and_parse() {
7131
let _ = env_logger::builder().is_test(true).try_init();

0 commit comments

Comments
 (0)