@@ -28,9 +28,13 @@ use arrow::compute::kernels;
28
28
use arrow:: datatypes:: { DataType , Field , Schema } ;
29
29
use arrow:: error:: ArrowError ;
30
30
use arrow:: ffi_stream:: ArrowArrayStreamReader ;
31
- use arrow:: pyarrow:: PyArrowConvert ;
31
+ use arrow:: pyarrow:: { PyArrowConvert , PyArrowException , PyArrowType } ;
32
32
use arrow:: record_batch:: RecordBatch ;
33
33
34
+ fn to_py_err ( err : ArrowError ) -> PyErr {
35
+ PyArrowException :: new_err ( err. to_string ( ) )
36
+ }
37
+
34
38
/// Returns `array + array` of an int64 array.
35
39
#[ pyfunction]
36
40
fn double ( array : & PyAny , py : Python ) -> PyResult < PyObject > {
@@ -41,8 +45,10 @@ fn double(array: &PyAny, py: Python) -> PyResult<PyObject> {
41
45
let array = array
42
46
. as_any ( )
43
47
. downcast_ref :: < Int64Array > ( )
44
- . ok_or ( ArrowError :: ParseError ( "Expects an int64" . to_string ( ) ) ) ?;
45
- let array = kernels:: arithmetic:: add ( array, array) ?;
48
+ . ok_or_else ( || ArrowError :: ParseError ( "Expects an int64" . to_string ( ) ) )
49
+ . map_err ( to_py_err) ?;
50
+
51
+ let array = kernels:: arithmetic:: add ( array, array) . map_err ( to_py_err) ?;
46
52
47
53
// export
48
54
array. to_pyarrow ( py)
@@ -66,56 +72,61 @@ fn double_py(lambda: &PyAny, py: Python) -> PyResult<bool> {
66
72
67
73
/// Returns the substring
68
74
#[ pyfunction]
69
- fn substring ( array : ArrayData , start : i64 ) -> PyResult < ArrayData > {
75
+ fn substring (
76
+ array : PyArrowType < ArrayData > ,
77
+ start : i64 ,
78
+ ) -> PyResult < PyArrowType < ArrayData > > {
70
79
// import
71
- let array = ArrayRef :: from ( array) ;
80
+ let array = ArrayRef :: from ( array. 0 ) ;
72
81
73
82
// substring
74
- let array = kernels:: substring:: substring ( array. as_ref ( ) , start, None ) ?;
83
+ let array = kernels:: substring:: substring ( array. as_ref ( ) , start, None ) . map_err ( to_py_err ) ?;
75
84
76
- Ok ( array. data ( ) . to_owned ( ) )
85
+ Ok ( array. data ( ) . to_owned ( ) . into ( ) )
77
86
}
78
87
79
88
/// Returns the concatenate
80
89
#[ pyfunction]
81
- fn concatenate ( array : ArrayData , py : Python ) -> PyResult < PyObject > {
82
- let array = ArrayRef :: from ( array) ;
90
+ fn concatenate ( array : PyArrowType < ArrayData > , py : Python ) -> PyResult < PyObject > {
91
+ let array = ArrayRef :: from ( array. 0 ) ;
83
92
84
93
// concat
85
- let array = kernels:: concat:: concat ( & [ array. as_ref ( ) , array. as_ref ( ) ] ) ?;
94
+ let array = kernels:: concat:: concat ( & [ array. as_ref ( ) , array. as_ref ( ) ] ) . map_err ( to_py_err ) ?;
86
95
87
96
array. to_pyarrow ( py)
88
97
}
89
98
90
99
#[ pyfunction]
91
- fn round_trip_type ( obj : DataType ) -> PyResult < DataType > {
100
+ fn round_trip_type ( obj : PyArrowType < DataType > ) -> PyResult < PyArrowType < DataType > > {
92
101
Ok ( obj)
93
102
}
94
103
95
104
#[ pyfunction]
96
- fn round_trip_field ( obj : Field ) -> PyResult < Field > {
105
+ fn round_trip_field ( obj : PyArrowType < Field > ) -> PyResult < PyArrowType < Field > > {
97
106
Ok ( obj)
98
107
}
99
108
100
109
#[ pyfunction]
101
- fn round_trip_schema ( obj : Schema ) -> PyResult < Schema > {
110
+ fn round_trip_schema ( obj : PyArrowType < Schema > ) -> PyResult < PyArrowType < Schema > > {
102
111
Ok ( obj)
103
112
}
104
113
105
114
#[ pyfunction]
106
- fn round_trip_array ( obj : ArrayData ) -> PyResult < ArrayData > {
115
+ fn round_trip_array ( obj : PyArrowType < ArrayData > ) -> PyResult < PyArrowType < ArrayData > > {
107
116
Ok ( obj)
108
117
}
109
118
110
119
#[ pyfunction]
111
- fn round_trip_record_batch ( obj : RecordBatch ) -> PyResult < RecordBatch > {
120
+ fn round_trip_record_batch (
121
+ obj : PyArrowType < RecordBatch > ,
122
+ ) -> PyResult < PyArrowType < RecordBatch > > {
112
123
Ok ( obj)
113
124
}
114
125
115
126
#[ pyfunction]
116
127
fn round_trip_record_batch_reader (
117
- obj : ArrowArrayStreamReader ,
118
- ) -> PyResult < ArrowArrayStreamReader > {
128
+ obj : PyArrowType < ArrowArrayStreamReader > ,
129
+ ) -> PyResult < PyArrowType < ArrowArrayStreamReader > > {
119
130
Ok ( obj)
120
131
}
121
132
0 commit comments