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