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 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 { Float[f64] => Float64[f64] | conversion none }
35 { BinaryFloat[f64] => Float64[f64] | conversion none }
36 { BinaryDouble[f64] => Float64[f64] | conversion none }
37 { NumInt[i64] => Int64[i64] | conversion auto }
38 { Blob[Vec<u8>] => LargeBinary[Vec<u8>] | conversion auto }
39 { Clob[String] => LargeUtf8[String] | conversion none }
40 { VarChar[String] => LargeUtf8[String] | conversion auto }
41 { Char[String] => LargeUtf8[String] | conversion none }
42 { NVarChar[String] => LargeUtf8[String] | conversion none }
43 { NChar[String] => LargeUtf8[String] | conversion none }
44 { Date[NaiveDateTime] => Date64Micro[NaiveDateTimeWrapperMicro] | conversion option }
45 { Timestamp[NaiveDateTime] => Date64Micro[NaiveDateTimeWrapperMicro] | conversion none }
46 { TimestampNano[NaiveDateTime] => Date64[NaiveDateTime] | conversion auto }
47 { TimestampTz[DateTime<Utc>] => DateTimeTz[DateTimeWrapperMicro] | conversion option }
48 { TimestampTzNano[DateTime<Utc>] => DateTimeTz[DateTime<Utc>] | conversion auto }
49 }
50);
51
52impl TypeConversion<NaiveDateTime, NaiveDateTimeWrapperMicro> for OracleArrowTransport {
53 fn convert(val: NaiveDateTime) -> NaiveDateTimeWrapperMicro {
54 NaiveDateTimeWrapperMicro(val)
55 }
56}
57
58impl TypeConversion<DateTime<Utc>, DateTimeWrapperMicro> for OracleArrowTransport {
59 fn convert(val: DateTime<Utc>) -> DateTimeWrapperMicro {
60 DateTimeWrapperMicro(val)
61 }
62}