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