1717
1818use datafusion::arrow::array::Array;
1919use datafusion::arrow::datatypes::{DataType, IntervalUnit, TimeUnit};
20- use datafusion::common::{DataFusionError, ScalarValue} ;
20+ use datafusion::common::ScalarValue;
2121use datafusion::logical_expr::sqlparser::ast::NullTreatment as DFNullTreatment;
22+ use pyo3::exceptions::PyNotImplementedError;
2223use pyo3::{exceptions::PyValueError, prelude::*};
2324
24- use crate::errors::py_datafusion_err;
25-
2625#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd)]
2726pub 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