Skip to content

Commit 9e97636

Browse files
authored
chore: remove redundant error transformation (#1232)
1 parent c609dfa commit 9e97636

File tree

3 files changed

+103
-174
lines changed

3 files changed

+103
-174
lines changed

python/tests/test_dataframe.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ def test_valid_window_frame(units, start_bound, end_bound):
783783
],
784784
)
785785
def test_invalid_window_frame(units, start_bound, end_bound):
786-
with pytest.raises(RuntimeError):
786+
with pytest.raises(NotImplementedError, match=f"(?i){units}"):
787787
WindowFrame(units, start_bound, end_bound)
788788

789789

src/common/data_type.rs

Lines changed: 94 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717

1818
use datafusion::arrow::array::Array;
1919
use datafusion::arrow::datatypes::{DataType, IntervalUnit, TimeUnit};
20-
use datafusion::common::{DataFusionError, ScalarValue};
20+
use datafusion::common::ScalarValue;
2121
use datafusion::logical_expr::sqlparser::ast::NullTreatment as DFNullTreatment;
22+
use pyo3::exceptions::PyNotImplementedError;
2223
use pyo3::{exceptions::PyValueError, prelude::*};
2324

24-
use crate::errors::py_datafusion_err;
25-
2625
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd)]
2726
pub struct PyScalarValue(pub ScalarValue);
2827

@@ -171,9 +170,7 @@ impl DataTypeMap {
171170
PythonType::Datetime,
172171
SqlType::DATE,
173172
)),
174-
DataType::Duration(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
175-
format!("{arrow_type:?}"),
176-
))),
173+
DataType::Duration(_) => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
177174
DataType::Interval(interval_unit) => Ok(DataTypeMap::new(
178175
DataType::Interval(*interval_unit),
179176
PythonType::Datetime,
@@ -188,9 +185,9 @@ impl DataTypeMap {
188185
PythonType::Bytes,
189186
SqlType::BINARY,
190187
)),
191-
DataType::FixedSizeBinary(_) => Err(py_datafusion_err(
192-
DataFusionError::NotImplemented(format!("{arrow_type:?}")),
193-
)),
188+
DataType::FixedSizeBinary(_) => {
189+
Err(PyNotImplementedError::new_err(format!("{arrow_type:?}")))
190+
}
194191
DataType::LargeBinary => Ok(DataTypeMap::new(
195192
DataType::LargeBinary,
196193
PythonType::Bytes,
@@ -206,24 +203,18 @@ impl DataTypeMap {
206203
PythonType::Str,
207204
SqlType::VARCHAR,
208205
)),
209-
DataType::List(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
210-
"{arrow_type:?}"
211-
)))),
212-
DataType::FixedSizeList(_, _) => Err(py_datafusion_err(
213-
DataFusionError::NotImplemented(format!("{arrow_type:?}")),
214-
)),
215-
DataType::LargeList(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
216-
format!("{arrow_type:?}"),
217-
))),
218-
DataType::Struct(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
219-
format!("{arrow_type:?}"),
220-
))),
221-
DataType::Union(_, _) => Err(py_datafusion_err(DataFusionError::NotImplemented(
222-
format!("{arrow_type:?}"),
223-
))),
224-
DataType::Dictionary(_, _) => Err(py_datafusion_err(DataFusionError::NotImplemented(
225-
format!("{arrow_type:?}"),
226-
))),
206+
DataType::List(_) => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
207+
DataType::FixedSizeList(_, _) => {
208+
Err(PyNotImplementedError::new_err(format!("{arrow_type:?}")))
209+
}
210+
DataType::LargeList(_) => {
211+
Err(PyNotImplementedError::new_err(format!("{arrow_type:?}")))
212+
}
213+
DataType::Struct(_) => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
214+
DataType::Union(_, _) => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
215+
DataType::Dictionary(_, _) => {
216+
Err(PyNotImplementedError::new_err(format!("{arrow_type:?}")))
217+
}
227218
DataType::Decimal128(precision, scale) => Ok(DataTypeMap::new(
228219
DataType::Decimal128(*precision, *scale),
229220
PythonType::Float,
@@ -234,24 +225,16 @@ impl DataTypeMap {
234225
PythonType::Float,
235226
SqlType::DECIMAL,
236227
)),
237-
DataType::Map(_, _) => Err(py_datafusion_err(DataFusionError::NotImplemented(
238-
format!("{arrow_type:?}"),
239-
))),
240-
DataType::RunEndEncoded(_, _) => Err(py_datafusion_err(
241-
DataFusionError::NotImplemented(format!("{arrow_type:?}")),
242-
)),
243-
DataType::BinaryView => Err(py_datafusion_err(DataFusionError::NotImplemented(
244-
format!("{arrow_type:?}"),
245-
))),
246-
DataType::Utf8View => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
247-
"{arrow_type:?}"
248-
)))),
249-
DataType::ListView(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
250-
format!("{arrow_type:?}"),
251-
))),
252-
DataType::LargeListView(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
253-
format!("{arrow_type:?}"),
254-
))),
228+
DataType::Map(_, _) => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
229+
DataType::RunEndEncoded(_, _) => {
230+
Err(PyNotImplementedError::new_err(format!("{arrow_type:?}")))
231+
}
232+
DataType::BinaryView => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
233+
DataType::Utf8View => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
234+
DataType::ListView(_) => Err(PyNotImplementedError::new_err(format!("{arrow_type:?}"))),
235+
DataType::LargeListView(_) => {
236+
Err(PyNotImplementedError::new_err(format!("{arrow_type:?}")))
237+
}
255238
}
256239
}
257240

@@ -317,33 +300,33 @@ impl DataTypeMap {
317300
Ok(DataType::Interval(IntervalUnit::MonthDayNano))
318301
}
319302
ScalarValue::List(arr) => Ok(arr.data_type().to_owned()),
320-
ScalarValue::Struct(_fields) => Err(py_datafusion_err(
321-
DataFusionError::NotImplemented("ScalarValue::Struct".to_string()),
303+
ScalarValue::Struct(_fields) => Err(PyNotImplementedError::new_err(
304+
"ScalarValue::Struct".to_string(),
322305
)),
323306
ScalarValue::FixedSizeBinary(size, _) => Ok(DataType::FixedSizeBinary(*size)),
324307
ScalarValue::FixedSizeList(_array_ref) => {
325308
// The FieldRef was removed from ScalarValue::FixedSizeList in
326309
// https://github.com/apache/arrow-datafusion/pull/8221, so we can no
327310
// longer convert back to a DataType here
328-
Err(py_datafusion_err(DataFusionError::NotImplemented(
311+
Err(PyNotImplementedError::new_err(
329312
"ScalarValue::FixedSizeList".to_string(),
330-
)))
313+
))
331314
}
332-
ScalarValue::LargeList(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
315+
ScalarValue::LargeList(_) => Err(PyNotImplementedError::new_err(
333316
"ScalarValue::LargeList".to_string(),
334-
))),
317+
)),
335318
ScalarValue::DurationSecond(_) => Ok(DataType::Duration(TimeUnit::Second)),
336319
ScalarValue::DurationMillisecond(_) => Ok(DataType::Duration(TimeUnit::Millisecond)),
337320
ScalarValue::DurationMicrosecond(_) => Ok(DataType::Duration(TimeUnit::Microsecond)),
338321
ScalarValue::DurationNanosecond(_) => Ok(DataType::Duration(TimeUnit::Nanosecond)),
339-
ScalarValue::Union(_, _, _) => Err(py_datafusion_err(DataFusionError::NotImplemented(
322+
ScalarValue::Union(_, _, _) => Err(PyNotImplementedError::new_err(
340323
"ScalarValue::LargeList".to_string(),
341-
))),
324+
)),
342325
ScalarValue::Utf8View(_) => Ok(DataType::Utf8View),
343326
ScalarValue::BinaryView(_) => Ok(DataType::BinaryView),
344-
ScalarValue::Map(_) => Err(py_datafusion_err(DataFusionError::NotImplemented(
327+
ScalarValue::Map(_) => Err(PyNotImplementedError::new_err(
345328
"ScalarValue::Map".to_string(),
346-
))),
329+
)),
347330
}
348331
}
349332
}
@@ -400,12 +383,8 @@ impl DataTypeMap {
400383
#[pyo3(name = "sql")]
401384
pub fn py_map_from_sql_type(sql_type: &SqlType) -> PyResult<DataTypeMap> {
402385
match sql_type {
403-
SqlType::ANY => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
404-
"{sql_type:?}"
405-
)))),
406-
SqlType::ARRAY => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
407-
"{sql_type:?}"
408-
)))),
386+
SqlType::ANY => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
387+
SqlType::ARRAY => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
409388
SqlType::BIGINT => Ok(DataTypeMap::new(
410389
DataType::Int64,
411390
PythonType::Int,
@@ -426,12 +405,8 @@ impl DataTypeMap {
426405
PythonType::Int,
427406
SqlType::CHAR,
428407
)),
429-
SqlType::COLUMN_LIST => Err(py_datafusion_err(DataFusionError::NotImplemented(
430-
format!("{sql_type:?}"),
431-
))),
432-
SqlType::CURSOR => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
433-
"{sql_type:?}"
434-
)))),
408+
SqlType::COLUMN_LIST => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
409+
SqlType::CURSOR => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
435410
SqlType::DATE => Ok(DataTypeMap::new(
436411
DataType::Date64,
437412
PythonType::Datetime,
@@ -442,126 +417,88 @@ impl DataTypeMap {
442417
PythonType::Float,
443418
SqlType::DECIMAL,
444419
)),
445-
SqlType::DISTINCT => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
446-
"{sql_type:?}"
447-
)))),
420+
SqlType::DISTINCT => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
448421
SqlType::DOUBLE => Ok(DataTypeMap::new(
449422
DataType::Decimal256(1, 1),
450423
PythonType::Float,
451424
SqlType::DOUBLE,
452425
)),
453-
SqlType::DYNAMIC_STAR => Err(py_datafusion_err(DataFusionError::NotImplemented(
454-
format!("{sql_type:?}"),
455-
))),
426+
SqlType::DYNAMIC_STAR => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
456427
SqlType::FLOAT => Ok(DataTypeMap::new(
457428
DataType::Decimal128(1, 1),
458429
PythonType::Float,
459430
SqlType::FLOAT,
460431
)),
461-
SqlType::GEOMETRY => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
462-
"{sql_type:?}"
463-
)))),
432+
SqlType::GEOMETRY => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
464433
SqlType::INTEGER => Ok(DataTypeMap::new(
465434
DataType::Int8,
466435
PythonType::Int,
467436
SqlType::INTEGER,
468437
)),
469-
SqlType::INTERVAL => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
470-
"{sql_type:?}"
471-
)))),
472-
SqlType::INTERVAL_DAY => Err(py_datafusion_err(DataFusionError::NotImplemented(
473-
format!("{sql_type:?}"),
474-
))),
475-
SqlType::INTERVAL_DAY_HOUR => Err(py_datafusion_err(DataFusionError::NotImplemented(
476-
format!("{sql_type:?}"),
477-
))),
478-
SqlType::INTERVAL_DAY_MINUTE => Err(py_datafusion_err(
479-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
480-
)),
481-
SqlType::INTERVAL_DAY_SECOND => Err(py_datafusion_err(
482-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
483-
)),
484-
SqlType::INTERVAL_HOUR => Err(py_datafusion_err(DataFusionError::NotImplemented(
485-
format!("{sql_type:?}"),
486-
))),
487-
SqlType::INTERVAL_HOUR_MINUTE => Err(py_datafusion_err(
488-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
489-
)),
490-
SqlType::INTERVAL_HOUR_SECOND => Err(py_datafusion_err(
491-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
492-
)),
493-
SqlType::INTERVAL_MINUTE => Err(py_datafusion_err(DataFusionError::NotImplemented(
494-
format!("{sql_type:?}"),
495-
))),
496-
SqlType::INTERVAL_MINUTE_SECOND => Err(py_datafusion_err(
497-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
498-
)),
499-
SqlType::INTERVAL_MONTH => Err(py_datafusion_err(DataFusionError::NotImplemented(
500-
format!("{sql_type:?}"),
501-
))),
502-
SqlType::INTERVAL_SECOND => Err(py_datafusion_err(DataFusionError::NotImplemented(
503-
format!("{sql_type:?}"),
504-
))),
505-
SqlType::INTERVAL_YEAR => Err(py_datafusion_err(DataFusionError::NotImplemented(
506-
format!("{sql_type:?}"),
507-
))),
508-
SqlType::INTERVAL_YEAR_MONTH => Err(py_datafusion_err(
509-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
510-
)),
511-
SqlType::MAP => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
512-
"{sql_type:?}"
513-
)))),
514-
SqlType::MULTISET => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
515-
"{sql_type:?}"
516-
)))),
438+
SqlType::INTERVAL => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
439+
SqlType::INTERVAL_DAY => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
440+
SqlType::INTERVAL_DAY_HOUR => {
441+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
442+
}
443+
SqlType::INTERVAL_DAY_MINUTE => {
444+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
445+
}
446+
SqlType::INTERVAL_DAY_SECOND => {
447+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
448+
}
449+
SqlType::INTERVAL_HOUR => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
450+
SqlType::INTERVAL_HOUR_MINUTE => {
451+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
452+
}
453+
SqlType::INTERVAL_HOUR_SECOND => {
454+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
455+
}
456+
SqlType::INTERVAL_MINUTE => {
457+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
458+
}
459+
SqlType::INTERVAL_MINUTE_SECOND => {
460+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
461+
}
462+
SqlType::INTERVAL_MONTH => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
463+
SqlType::INTERVAL_SECOND => {
464+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
465+
}
466+
SqlType::INTERVAL_YEAR => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
467+
SqlType::INTERVAL_YEAR_MONTH => {
468+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
469+
}
470+
SqlType::MAP => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
471+
SqlType::MULTISET => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
517472
SqlType::NULL => Ok(DataTypeMap::new(
518473
DataType::Null,
519474
PythonType::None,
520475
SqlType::NULL,
521476
)),
522-
SqlType::OTHER => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
523-
"{sql_type:?}"
524-
)))),
525-
SqlType::REAL => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
526-
"{sql_type:?}"
527-
)))),
528-
SqlType::ROW => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
529-
"{sql_type:?}"
530-
)))),
531-
SqlType::SARG => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
532-
"{sql_type:?}"
533-
)))),
477+
SqlType::OTHER => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
478+
SqlType::REAL => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
479+
SqlType::ROW => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
480+
SqlType::SARG => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
534481
SqlType::SMALLINT => Ok(DataTypeMap::new(
535482
DataType::Int16,
536483
PythonType::Int,
537484
SqlType::SMALLINT,
538485
)),
539-
SqlType::STRUCTURED => Err(py_datafusion_err(DataFusionError::NotImplemented(
540-
format!("{sql_type:?}"),
541-
))),
542-
SqlType::SYMBOL => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
543-
"{sql_type:?}"
544-
)))),
545-
SqlType::TIME => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
546-
"{sql_type:?}"
547-
)))),
548-
SqlType::TIME_WITH_LOCAL_TIME_ZONE => Err(py_datafusion_err(
549-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
550-
)),
551-
SqlType::TIMESTAMP => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
552-
"{sql_type:?}"
553-
)))),
554-
SqlType::TIMESTAMP_WITH_LOCAL_TIME_ZONE => Err(py_datafusion_err(
555-
DataFusionError::NotImplemented(format!("{sql_type:?}")),
556-
)),
486+
SqlType::STRUCTURED => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
487+
SqlType::SYMBOL => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
488+
SqlType::TIME => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
489+
SqlType::TIME_WITH_LOCAL_TIME_ZONE => {
490+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
491+
}
492+
SqlType::TIMESTAMP => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
493+
SqlType::TIMESTAMP_WITH_LOCAL_TIME_ZONE => {
494+
Err(PyNotImplementedError::new_err(format!("{sql_type:?}")))
495+
}
557496
SqlType::TINYINT => Ok(DataTypeMap::new(
558497
DataType::Int8,
559498
PythonType::Int,
560499
SqlType::TINYINT,
561500
)),
562-
SqlType::UNKNOWN => Err(py_datafusion_err(DataFusionError::NotImplemented(format!(
563-
"{sql_type:?}"
564-
)))),
501+
SqlType::UNKNOWN => Err(PyNotImplementedError::new_err(format!("{sql_type:?}"))),
565502
SqlType::VARBINARY => Ok(DataTypeMap::new(
566503
DataType::LargeBinary,
567504
PythonType::Bytes,

0 commit comments

Comments
 (0)