connectorx/transports/
oracle_arrowstream.rs

1use crate::{
2    destinations::arrowstream::{
3        typesystem::ArrowTypeSystem, ArrowDestination, ArrowDestinationError,
4    },
5    impl_transport,
6    sources::oracle::{OracleSource, OracleSourceError, OracleTypeSystem},
7    typesystem::TypeConversion,
8};
9use chrono::{DateTime, NaiveDateTime, Utc};
10use thiserror::Error;
11
12#[derive(Error, Debug)]
13pub enum OracleArrowTransportError {
14    #[error(transparent)]
15    Source(#[from] OracleSourceError),
16
17    #[error(transparent)]
18    Destination(#[from] ArrowDestinationError),
19
20    #[error(transparent)]
21    ConnectorX(#[from] crate::errors::ConnectorXError),
22}
23
24pub struct OracleArrowTransport;
25
26impl_transport!(
27    name = OracleArrowTransport,
28    error = OracleArrowTransportError,
29    systems = OracleTypeSystem => ArrowTypeSystem,
30    route = OracleSource => ArrowDestination,
31    mappings = {
32        { NumFloat[f64]              => Float64[f64]               | conversion auto }
33        { Float[f64]                 => Float64[f64]               | conversion none }
34        { BinaryFloat[f64]           => Float64[f64]               | conversion none }
35        { BinaryDouble[f64]          => Float64[f64]               | conversion none }
36        { NumInt[i64]                => Int64[i64]                 | conversion auto }
37        { Blob[Vec<u8>]              => LargeBinary[Vec<u8>]       | conversion auto }
38        { Clob[String]               => LargeUtf8[String]          | conversion none }
39        { VarChar[String]            => LargeUtf8[String]          | conversion auto }
40        { Char[String]               => LargeUtf8[String]          | conversion none }
41        { NVarChar[String]           => LargeUtf8[String]          | conversion none }
42        { NChar[String]              => LargeUtf8[String]          | conversion none }
43        { Date[NaiveDateTime]        => Date64[NaiveDateTime]      | conversion auto }
44        { Timestamp[NaiveDateTime]   => Date64[NaiveDateTime]      | conversion none }
45        { TimestampTz[DateTime<Utc>] => DateTimeTz[DateTime<Utc>]  | conversion auto }
46    }
47);