connectorx/transports/
oracle_arrowstream.rs1use 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);