connectorx/transports/
bigquery_arrowstream.rs1use crate::{
4 destinations::arrowstream::{
5 typesystem::{
6 ArrowTypeSystem, DateTimeWrapperMicro, NaiveDateTimeWrapperMicro, NaiveTimeWrapperMicro,
7 },
8 ArrowDestination, ArrowDestinationError,
9 },
10 impl_transport,
11 sources::bigquery::{BigQuerySource, BigQuerySourceError, BigQueryTypeSystem},
12 typesystem::TypeConversion,
13};
14use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc};
15use thiserror::Error;
16
17#[derive(Error, Debug)]
18pub enum BigQueryArrowTransportError {
19 #[error(transparent)]
20 Source(#[from] BigQuerySourceError),
21
22 #[error(transparent)]
23 Destination(#[from] ArrowDestinationError),
24
25 #[error(transparent)]
26 ConnectorX(#[from] crate::errors::ConnectorXError),
27}
28
29pub struct BigQueryArrowTransport;
31
32impl_transport!(
33 name = BigQueryArrowTransport,
34 error = BigQueryArrowTransportError,
35 systems = BigQueryTypeSystem => ArrowTypeSystem,
36 route = BigQuerySource => ArrowDestination,
37 mappings = {
38 { Bool[bool] => Boolean[bool] | conversion auto }
39 { Boolean[bool] => Boolean[bool] | conversion none }
40 { Int64[i64] => Int64[i64] | conversion auto }
41 { Integer[i64] => Int64[i64] | conversion none }
42 { Float64[f64] => Float64[f64] | conversion auto }
43 { Float[f64] => Float64[f64] | conversion none }
44 { Numeric[f64] => Float64[f64] | conversion none }
45 { Bignumeric[f64] => Float64[f64] | conversion none }
46 { String[String] => LargeUtf8[String] | conversion auto }
47 { Bytes[String] => LargeUtf8[String] | conversion none }
48 { Date[NaiveDate] => Date32[NaiveDate] | conversion auto }
49 { Datetime[NaiveDateTime] => Date64Micro[NaiveDateTimeWrapperMicro] | conversion option }
50 { Time[NaiveTime] => Time64Micro[NaiveTimeWrapperMicro] | conversion option }
51 { Timestamp[DateTime<Utc>] => DateTimeTzMicro[DateTimeWrapperMicro] | conversion option }
52 }
53);
54
55impl TypeConversion<NaiveDateTime, NaiveDateTimeWrapperMicro> for BigQueryArrowTransport {
56 fn convert(val: NaiveDateTime) -> NaiveDateTimeWrapperMicro {
57 NaiveDateTimeWrapperMicro(val)
58 }
59}
60
61impl TypeConversion<NaiveTime, NaiveTimeWrapperMicro> for BigQueryArrowTransport {
62 fn convert(val: NaiveTime) -> NaiveTimeWrapperMicro {
63 NaiveTimeWrapperMicro(val)
64 }
65}
66
67impl TypeConversion<DateTime<Utc>, DateTimeWrapperMicro> for BigQueryArrowTransport {
68 fn convert(val: DateTime<Utc>) -> DateTimeWrapperMicro {
69 DateTimeWrapperMicro(val)
70 }
71}