11use crate :: errors:: ConnectorXPythonError ;
22use crate :: pandas:: { destination:: PandasDestination , typesystem:: PandasTypeSystem } ;
33use chrono:: { DateTime , NaiveDate , NaiveDateTime , NaiveTime , Utc } ;
4+ use connectorx:: sources:: postgres:: { Bit , HalfVector , IpInet , SparseVector , Vector } ;
45use connectorx:: {
56 impl_transport,
67 sources:: postgres:: {
@@ -28,35 +29,40 @@ macro_rules! impl_postgres_transport {
2829 systems = PostgresTypeSystem => PandasTypeSystem ,
2930 route = PostgresSource <$proto, $tls> => PandasDestination <' tp>,
3031 mappings = {
31- { Float4 [ f32 ] => F64 [ f64 ] | conversion auto }
32- { Float8 [ f64 ] => F64 [ f64 ] | conversion auto }
33- { Numeric [ Decimal ] => F64 [ f64 ] | conversion option }
34- { Int2 [ i16 ] => I64 [ i64 ] | conversion auto }
35- { Int4 [ i32 ] => I64 [ i64 ] | conversion auto }
36- { Int8 [ i64 ] => I64 [ i64 ] | conversion auto }
37- { BoolArray [ Vec <Option <bool >>] => BoolArray [ Vec <bool >] | conversion option }
38- { Int2Array [ Vec <Option <i16 >>] => I64Array [ Vec <i64 >] | conversion option }
39- { Int4Array [ Vec <Option <i32 >>] => I64Array [ Vec <i64 >] | conversion option }
40- { Int8Array [ Vec <Option <i64 >>] => I64Array [ Vec <i64 >] | conversion option }
41- { Float4Array [ Vec <Option <f32 >>] => F64Array [ Vec <f64 >] | conversion option }
42- { Float8Array [ Vec <Option <f64 >>] => F64Array [ Vec <f64 >] | conversion option }
43- { NumericArray [ Vec <Option <Decimal >>] => F64Array [ Vec <f64 >] | conversion option }
44- { Bool [ bool ] => Bool [ bool ] | conversion auto }
45- { Char [ i8 ] => Char [ char ] | conversion option }
46- { Text [ & ' r str ] => Str [ & ' r str ] | conversion auto }
47- { BpChar [ & ' r str ] => Str [ & ' r str ] | conversion none }
48- { VarChar [ & ' r str ] => Str [ & ' r str ] | conversion none }
49- { Name [ & ' r str ] => Str [ & ' r str ] | conversion none }
50- { Timestamp [ NaiveDateTime ] => DateTime [ DateTime <Utc >] | conversion option }
51- { TimestampTz [ DateTime <Utc >] => DateTime [ DateTime <Utc >] | conversion auto }
52- { Date [ NaiveDate ] => DateTime [ DateTime <Utc >] | conversion option }
53- { UUID [ Uuid ] => String [ String ] | conversion option }
54- { JSON [ Value ] => String [ String ] | conversion option }
55- { JSONB [ Value ] => String [ String ] | conversion none }
56- { Time [ NaiveTime ] => String [ String ] | conversion option }
57- { ByteA [ Vec <u8 >] => Bytes [ Vec <u8 >] | conversion auto }
58- { Enum [ & ' r str ] => Str [ & ' r str ] | conversion none }
59- { HSTORE [ HashMap <String , Option <String >>] => String [ String ] | conversion option }
32+ { Float4 [ f32 ] => F64 [ f64 ] | conversion auto }
33+ { Float8 [ f64 ] => F64 [ f64 ] | conversion auto }
34+ { Numeric [ Decimal ] => F64 [ f64 ] | conversion option }
35+ { Int2 [ i16 ] => I64 [ i64 ] | conversion auto }
36+ { Int4 [ i32 ] => I64 [ i64 ] | conversion auto }
37+ { Int8 [ i64 ] => I64 [ i64 ] | conversion auto }
38+ { BoolArray [ Vec <Option <bool >>] => BoolArray [ Vec <bool >] | conversion option }
39+ { Int2Array [ Vec <Option <i16 >>] => I64Array [ Vec <i64 >] | conversion option }
40+ { Int4Array [ Vec <Option <i32 >>] => I64Array [ Vec <i64 >] | conversion option }
41+ { Int8Array [ Vec <Option <i64 >>] => I64Array [ Vec <i64 >] | conversion option }
42+ { Float4Array [ Vec <Option <f32 >>] => F64Array [ Vec <f64 >] | conversion option }
43+ { Float8Array [ Vec <Option <f64 >>] => F64Array [ Vec <f64 >] | conversion option }
44+ { NumericArray [ Vec <Option <Decimal >>] => F64Array [ Vec <f64 >] | conversion option }
45+ { Vector [ Vector ] => F64Array [ Vec <f64 >] | conversion option }
46+ { HalfVec [ HalfVector ] => F64Array [ Vec <f64 >] | conversion option }
47+ { Bit [ Bit ] => Bytes [ Vec <u8 >] | conversion option }
48+ { SparseVec [ SparseVector ] => F64Array [ Vec <f64 >] | conversion option }
49+ { Bool [ bool ] => Bool [ bool ] | conversion auto }
50+ { Char [ i8 ] => Char [ char ] | conversion option }
51+ { Text [ & ' r str ] => Str [ & ' r str ] | conversion auto }
52+ { BpChar [ & ' r str ] => Str [ & ' r str ] | conversion none }
53+ { VarChar [ & ' r str ] => Str [ & ' r str ] | conversion none }
54+ { Name [ & ' r str ] => Str [ & ' r str ] | conversion none }
55+ { Timestamp [ NaiveDateTime ] => DateTime [ DateTime <Utc >] | conversion option }
56+ { TimestampTz [ DateTime <Utc >] => DateTime [ DateTime <Utc >] | conversion auto }
57+ { Date [ NaiveDate ] => DateTime [ DateTime <Utc >] | conversion option }
58+ { UUID [ Uuid ] => String [ String ] | conversion option }
59+ { JSON [ Value ] => String [ String ] | conversion option }
60+ { JSONB [ Value ] => String [ String ] | conversion none }
61+ { Inet [ IpInet ] => String [ String ] | conversion none }
62+ { Time [ NaiveTime ] => String [ String ] | conversion option }
63+ { ByteA [ Vec <u8 >] => Bytes [ Vec <u8 >] | conversion auto }
64+ { Enum [ & ' r str ] => Str [ & ' r str ] | conversion none }
65+ { HSTORE [ HashMap <String , Option <String >>] => String [ String ] | conversion option }
6066 }
6167 ) ;
6268 }
@@ -71,6 +77,45 @@ impl_postgres_transport!(CursorProtocol, MakeTlsConnector);
7177impl_postgres_transport ! ( SimpleProtocol , NoTls ) ;
7278impl_postgres_transport ! ( SimpleProtocol , MakeTlsConnector ) ;
7379
80+
81+ impl < ' py , P , C > TypeConversion < Vector , Vec < f64 > > for PostgresPandasTransport < ' py , P , C > {
82+ fn convert ( val : Vector ) -> Vec < f64 > {
83+ val. to_vec ( ) . into_iter ( ) . map ( |v| v as f64 ) . collect ( )
84+ }
85+ }
86+
87+ impl < ' py , P , C > TypeConversion < HalfVector , Vec < f64 > > for PostgresPandasTransport < ' py , P , C > {
88+ fn convert ( val : HalfVector ) -> Vec < f64 > {
89+ val. to_vec ( ) . into_iter ( ) . map ( |v| v. to_f64 ( ) ) . collect ( )
90+ }
91+ }
92+
93+ impl < ' py , P , C > TypeConversion < Bit , Vec < u8 > > for PostgresPandasTransport < ' py , P , C > {
94+ fn convert ( val : Bit ) -> Vec < u8 > {
95+ val. as_bytes ( ) . to_vec ( )
96+ }
97+ }
98+
99+ impl < ' py , P , C > TypeConversion < SparseVector , Vec < f64 > > for PostgresPandasTransport < ' py , P , C > {
100+ fn convert ( val : SparseVector ) -> Vec < f64 > {
101+ val. to_vec ( ) . into_iter ( ) . map ( |v| v as f64 ) . collect ( )
102+ }
103+ }
104+
105+ impl < ' py , P , C > TypeConversion < IpInet , String > for PostgresPandasTransport < ' py , P , C > {
106+ fn convert ( val : IpInet ) -> String {
107+ val. to_string ( )
108+ }
109+ }
110+
111+ impl < ' py , P , C > TypeConversion < Option < IpInet > , Option < String > >
112+ for PostgresPandasTransport < ' py , P , C >
113+ {
114+ fn convert ( val : Option < IpInet > ) -> Option < String > {
115+ val. map ( |val| val. to_string ( ) )
116+ }
117+ }
118+
74119impl < ' py , P , C > TypeConversion < HashMap < String , Option < String > > , String >
75120 for PostgresPandasTransport < ' py , P , C >
76121{
0 commit comments