connectorx/transports/
oracle_arrow.rs1use crate::{
2 destinations::arrow::{
3 typesystem::{ArrowTypeSystem, DateTimeWrapperMicro, NaiveDateTimeWrapperMicro},
4 ArrowDestination, ArrowDestinationError,
5 },
6 sources::oracle::{OracleSource, OracleSourceError, OracleTypeSystem},
7 typesystem::TypeConversion,
8};
9use chrono::{DateTime, NaiveDateTime, Utc};
10use rust_decimal::Decimal;
11use thiserror::Error;
12
13#[derive(Error, Debug)]
14pub enum OracleArrowTransportError {
15 #[error(transparent)]
16 Source(#[from] OracleSourceError),
17
18 #[error(transparent)]
19 Destination(#[from] ArrowDestinationError),
20
21 #[error(transparent)]
22 ConnectorX(#[from] crate::errors::ConnectorXError),
23}
24
25pub struct OracleArrowTransport;
26
27impl_transport!(
28 name = OracleArrowTransport,
29 error = OracleArrowTransportError,
30 systems = OracleTypeSystem => ArrowTypeSystem,
31 route = OracleSource => ArrowDestination,
32 mappings = {
33 { NumFloat[f64] => Float64[f64] | conversion auto }
34 { NumDecimal[Decimal] => Decimal[Decimal] | conversion auto }
35 { Float[f64] => Float64[f64] | conversion none }
36 { BinaryFloat[f64] => Float64[f64] | conversion none }
37 { BinaryDouble[f64] => Float64[f64] | conversion none }
38 { NumInt[i64] => Int64[i64] | conversion auto }
39 { Blob[Vec<u8>] => LargeBinary[Vec<u8>] | conversion auto }
40 { Clob[String] => LargeUtf8[String] | conversion none }
41 { VarChar[String] => LargeUtf8[String] | conversion auto }
42 { Char[String] => LargeUtf8[String] | conversion none }
43 { NVarChar[String] => LargeUtf8[String] | conversion none }
44 { NChar[String] => LargeUtf8[String] | conversion none }
45 { Date[NaiveDateTime] => Date64Micro[NaiveDateTimeWrapperMicro] | conversion option }
46 { Timestamp[NaiveDateTime] => Date64Micro[NaiveDateTimeWrapperMicro] | conversion none }
47 { TimestampNano[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto }
48 { TimestampTz[DateTime<Utc>] => DateTimeTz[DateTimeWrapperMicro] | conversion option }
49 { TimestampTzNano[DateTime<Utc>] => DateTimeTz[DateTime<Utc>] | conversion auto }
50 }
51);
52
53impl TypeConversion<NaiveDateTime, NaiveDateTimeWrapperMicro> for OracleArrowTransport {
54 fn convert(val: NaiveDateTime) -> NaiveDateTimeWrapperMicro {
55 NaiveDateTimeWrapperMicro(val)
56 }
57}
58
59impl TypeConversion<DateTime<Utc>, DateTimeWrapperMicro> for OracleArrowTransport {
60 fn convert(val: DateTime<Utc>) -> DateTimeWrapperMicro {
61 DateTimeWrapperMicro(val)
62 }
63}