This is an automated email from the ASF dual-hosted git repository.
comphead pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new df806bd314 Add `arrow_err!` macros, optional backtrace to ArrowError
(#8586)
df806bd314 is described below
commit df806bd314df9c2a8087fe1422337bce25dc8614
Author: comphead <[email protected]>
AuthorDate: Thu Dec 21 09:41:51 2023 -0800
Add `arrow_err!` macros, optional backtrace to ArrowError (#8586)
* Introducing `arrow_err!` macros
---
datafusion-cli/Cargo.lock | 80 +++++++++-----------
datafusion-cli/Cargo.toml | 2 +-
datafusion/common/src/error.rs | 85 +++++++++++++++-------
datafusion/common/src/scalar.rs | 9 ++-
datafusion/common/src/utils.rs | 10 +--
.../datasource/avro_to_arrow/arrow_array_reader.rs | 5 +-
.../core/src/datasource/listing_table_factory.rs | 4 +-
datafusion/core/src/datasource/memory.rs | 2 +-
.../datasource/physical_plan/parquet/row_filter.rs | 4 +-
.../core/tests/user_defined/user_defined_plan.rs | 3 +-
.../src/simplify_expressions/expr_simplifier.rs | 42 +++++------
.../physical-expr/src/aggregate/first_last.rs | 4 +-
.../src/aggregate/groups_accumulator/adapter.rs | 7 +-
datafusion/physical-expr/src/expressions/binary.rs | 15 ++--
datafusion/physical-expr/src/regex_expressions.rs | 6 +-
datafusion/physical-expr/src/window/lead_lag.rs | 8 +-
.../physical-plan/src/joins/stream_join_utils.rs | 6 +-
datafusion/physical-plan/src/joins/utils.rs | 14 ++--
datafusion/physical-plan/src/repartition/mod.rs | 9 +--
.../src/windows/bounded_window_agg_exec.rs | 4 +-
datafusion/proto/src/logical_plan/from_proto.rs | 7 +-
datafusion/sqllogictest/test_files/math.slt | 37 +++++-----
22 files changed, 191 insertions(+), 172 deletions(-)
diff --git a/datafusion-cli/Cargo.lock b/datafusion-cli/Cargo.lock
index 19ad670936..ac05ddf10a 100644
--- a/datafusion-cli/Cargo.lock
+++ b/datafusion-cli/Cargo.lock
@@ -384,7 +384,7 @@ checksum =
"a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -1069,12 +1069,12 @@ dependencies = [
[[package]]
name = "ctor"
-version = "0.2.5"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583"
+checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
dependencies = [
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -1576,7 +1576,7 @@ checksum =
"53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -1781,9 +1781,9 @@ checksum =
"9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "0.14.27"
+version = "0.14.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
dependencies = [
"bytes",
"futures-channel",
@@ -1796,7 +1796,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project-lite",
- "socket2 0.4.10",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -2496,7 +2496,7 @@ checksum =
"4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -2715,9 +2715,9 @@ checksum =
"c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "reqwest"
-version = "0.11.22"
+version = "0.11.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41"
dependencies = [
"base64",
"bytes",
@@ -3020,7 +3020,7 @@ checksum =
"43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -3106,16 +3106,6 @@ version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
-[[package]]
-name = "socket2"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
-dependencies = [
- "libc",
- "winapi",
-]
-
[[package]]
name = "socket2"
version = "0.5.5"
@@ -3196,7 +3186,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -3218,9 +3208,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.40"
+version = "2.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e"
+checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269"
dependencies = [
"proc-macro2",
"quote",
@@ -3284,22 +3274,22 @@ checksum =
"222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
[[package]]
name = "thiserror"
-version = "1.0.50"
+version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -3315,9 +3305,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
dependencies = [
"deranged",
"powerfmt",
@@ -3334,9 +3324,9 @@ checksum =
"ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f"
dependencies = [
"time-core",
]
@@ -3378,7 +3368,7 @@ dependencies = [
"num_cpus",
"parking_lot",
"pin-project-lite",
- "socket2 0.5.5",
+ "socket2",
"tokio-macros",
"windows-sys 0.48.0",
]
@@ -3391,7 +3381,7 @@ checksum =
"5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -3488,7 +3478,7 @@ checksum =
"34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -3533,7 +3523,7 @@ checksum =
"f03ca4cb38206e2bef0700092660bb74d696f808514dae47fa1467cbfe26e96e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
@@ -3687,7 +3677,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
"wasm-bindgen-shared",
]
@@ -3721,7 +3711,7 @@ checksum =
"f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3970,22 +3960,22 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.7.30"
+version = "0.7.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7"
+checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.7.30"
+version = "0.7.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba"
+checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.41",
]
[[package]]
diff --git a/datafusion-cli/Cargo.toml b/datafusion-cli/Cargo.toml
index 1bf24808fb..f570976836 100644
--- a/datafusion-cli/Cargo.toml
+++ b/datafusion-cli/Cargo.toml
@@ -35,6 +35,7 @@ aws-config = "0.55"
aws-credential-types = "0.55"
clap = { version = "3", features = ["derive", "cargo"] }
datafusion = { path = "../datafusion/core", version = "34.0.0", features =
["avro", "crypto_expressions", "encoding_expressions", "parquet",
"regex_expressions", "unicode_expressions", "compression"] }
+datafusion-common = { path = "../datafusion/common" }
dirs = "4.0.0"
env_logger = "0.9"
mimalloc = { version = "0.1", default-features = false }
@@ -49,6 +50,5 @@ url = "2.2"
[dev-dependencies]
assert_cmd = "2.0"
ctor = "0.2.0"
-datafusion-common = { path = "../datafusion/common" }
predicates = "3.0"
rstest = "0.17"
diff --git a/datafusion/common/src/error.rs b/datafusion/common/src/error.rs
index 56b52bd73f..515acc6d1c 100644
--- a/datafusion/common/src/error.rs
+++ b/datafusion/common/src/error.rs
@@ -47,7 +47,8 @@ pub type GenericError = Box<dyn Error + Send + Sync>;
#[derive(Debug)]
pub enum DataFusionError {
/// Error returned by arrow.
- ArrowError(ArrowError),
+ /// 2nd argument is for optional backtrace
+ ArrowError(ArrowError, Option<String>),
/// Wraps an error from the Parquet crate
#[cfg(feature = "parquet")]
ParquetError(ParquetError),
@@ -60,7 +61,8 @@ pub enum DataFusionError {
/// Error associated to I/O operations and associated traits.
IoError(io::Error),
/// Error returned when SQL is syntactically incorrect.
- SQL(ParserError),
+ /// 2nd argument is for optional backtrace
+ SQL(ParserError, Option<String>),
/// Error returned on a branch that we know it is possible
/// but to which we still have no implementation for.
/// Often, these errors are tracked in our issue tracker.
@@ -223,14 +225,14 @@ impl From<io::Error> for DataFusionError {
impl From<ArrowError> for DataFusionError {
fn from(e: ArrowError) -> Self {
- DataFusionError::ArrowError(e)
+ DataFusionError::ArrowError(e, None)
}
}
impl From<DataFusionError> for ArrowError {
fn from(e: DataFusionError) -> Self {
match e {
- DataFusionError::ArrowError(e) => e,
+ DataFusionError::ArrowError(e, _) => e,
DataFusionError::External(e) => ArrowError::ExternalError(e),
other => ArrowError::ExternalError(Box::new(other)),
}
@@ -267,7 +269,7 @@ impl From<object_store::path::Error> for DataFusionError {
impl From<ParserError> for DataFusionError {
fn from(e: ParserError) -> Self {
- DataFusionError::SQL(e)
+ DataFusionError::SQL(e, None)
}
}
@@ -280,8 +282,9 @@ impl From<GenericError> for DataFusionError {
impl Display for DataFusionError {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
match *self {
- DataFusionError::ArrowError(ref desc) => {
- write!(f, "Arrow error: {desc}")
+ DataFusionError::ArrowError(ref desc, ref backtrace) => {
+ let backtrace = backtrace.clone().unwrap_or("".to_owned());
+ write!(f, "Arrow error: {desc}{backtrace}")
}
#[cfg(feature = "parquet")]
DataFusionError::ParquetError(ref desc) => {
@@ -294,8 +297,9 @@ impl Display for DataFusionError {
DataFusionError::IoError(ref desc) => {
write!(f, "IO error: {desc}")
}
- DataFusionError::SQL(ref desc) => {
- write!(f, "SQL error: {desc:?}")
+ DataFusionError::SQL(ref desc, ref backtrace) => {
+ let backtrace = backtrace.clone().unwrap_or("".to_owned());
+ write!(f, "SQL error: {desc:?}{backtrace}")
}
DataFusionError::Configuration(ref desc) => {
write!(f, "Invalid or Unsupported Configuration: {desc}")
@@ -339,7 +343,7 @@ impl Display for DataFusionError {
impl Error for DataFusionError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
- DataFusionError::ArrowError(e) => Some(e),
+ DataFusionError::ArrowError(e, _) => Some(e),
#[cfg(feature = "parquet")]
DataFusionError::ParquetError(e) => Some(e),
#[cfg(feature = "avro")]
@@ -347,7 +351,7 @@ impl Error for DataFusionError {
#[cfg(feature = "object_store")]
DataFusionError::ObjectStore(e) => Some(e),
DataFusionError::IoError(e) => Some(e),
- DataFusionError::SQL(e) => Some(e),
+ DataFusionError::SQL(e, _) => Some(e),
DataFusionError::NotImplemented(_) => None,
DataFusionError::Internal(_) => None,
DataFusionError::Configuration(_) => None,
@@ -505,32 +509,57 @@ macro_rules! make_error {
};
}
-// Exposes a macro to create `DataFusionError::Plan`
+// Exposes a macro to create `DataFusionError::Plan` with optional backtrace
make_error!(plan_err, plan_datafusion_err, Plan);
-// Exposes a macro to create `DataFusionError::Internal`
+// Exposes a macro to create `DataFusionError::Internal` with optional
backtrace
make_error!(internal_err, internal_datafusion_err, Internal);
-// Exposes a macro to create `DataFusionError::NotImplemented`
+// Exposes a macro to create `DataFusionError::NotImplemented` with optional
backtrace
make_error!(not_impl_err, not_impl_datafusion_err, NotImplemented);
-// Exposes a macro to create `DataFusionError::Execution`
+// Exposes a macro to create `DataFusionError::Execution` with optional
backtrace
make_error!(exec_err, exec_datafusion_err, Execution);
-// Exposes a macro to create `DataFusionError::Substrait`
+// Exposes a macro to create `DataFusionError::Substrait` with optional
backtrace
make_error!(substrait_err, substrait_datafusion_err, Substrait);
-// Exposes a macro to create `DataFusionError::SQL`
+// Exposes a macro to create `DataFusionError::SQL` with optional backtrace
+#[macro_export]
+macro_rules! sql_datafusion_err {
+ ($ERR:expr) => {
+ DataFusionError::SQL($ERR, Some(DataFusionError::get_back_trace()))
+ };
+}
+
+// Exposes a macro to create `Err(DataFusionError::SQL)` with optional
backtrace
#[macro_export]
macro_rules! sql_err {
($ERR:expr) => {
- Err(DataFusionError::SQL($ERR))
+ Err(datafusion_common::sql_datafusion_err!($ERR))
+ };
+}
+
+// Exposes a macro to create `DataFusionError::ArrowError` with optional
backtrace
+#[macro_export]
+macro_rules! arrow_datafusion_err {
+ ($ERR:expr) => {
+ DataFusionError::ArrowError($ERR,
Some(DataFusionError::get_back_trace()))
+ };
+}
+
+// Exposes a macro to create `Err(DataFusionError::ArrowError)` with optional
backtrace
+#[macro_export]
+macro_rules! arrow_err {
+ ($ERR:expr) => {
+ Err(datafusion_common::arrow_datafusion_err!($ERR))
};
}
// To avoid compiler error when using macro in the same crate:
// macros from the current crate cannot be referred to by absolute paths
pub use exec_err as _exec_err;
+pub use internal_datafusion_err as _internal_datafusion_err;
pub use internal_err as _internal_err;
pub use not_impl_err as _not_impl_err;
pub use plan_err as _plan_err;
@@ -600,9 +629,12 @@ mod test {
);
do_root_test(
- DataFusionError::ArrowError(ArrowError::ExternalError(Box::new(
- DataFusionError::ResourcesExhausted("foo".to_string()),
- ))),
+ DataFusionError::ArrowError(
+
ArrowError::ExternalError(Box::new(DataFusionError::ResourcesExhausted(
+ "foo".to_string(),
+ ))),
+ None,
+ ),
DataFusionError::ResourcesExhausted("foo".to_string()),
);
@@ -621,11 +653,12 @@ mod test {
);
do_root_test(
- DataFusionError::ArrowError(ArrowError::ExternalError(Box::new(
-
ArrowError::ExternalError(Box::new(DataFusionError::ResourcesExhausted(
- "foo".to_string(),
- ))),
- ))),
+ DataFusionError::ArrowError(
+
ArrowError::ExternalError(Box::new(ArrowError::ExternalError(Box::new(
+ DataFusionError::ResourcesExhausted("foo".to_string()),
+ )))),
+ None,
+ ),
DataFusionError::ResourcesExhausted("foo".to_string()),
);
diff --git a/datafusion/common/src/scalar.rs b/datafusion/common/src/scalar.rs
index d730fbf89b..48878aa9bd 100644
--- a/datafusion/common/src/scalar.rs
+++ b/datafusion/common/src/scalar.rs
@@ -24,6 +24,7 @@ use std::convert::{Infallible, TryInto};
use std::str::FromStr;
use std::{convert::TryFrom, fmt, iter::repeat, sync::Arc};
+use crate::arrow_datafusion_err;
use crate::cast::{
as_decimal128_array, as_decimal256_array, as_dictionary_array,
as_fixed_size_binary_array, as_fixed_size_list_array, as_struct_array,
@@ -1654,11 +1655,11 @@ impl ScalarValue {
match value {
Some(val) => Decimal128Array::from(vec![val; size])
.with_precision_and_scale(precision, scale)
- .map_err(DataFusionError::ArrowError),
+ .map_err(|e| arrow_datafusion_err!(e)),
None => {
let mut builder = Decimal128Array::builder(size)
.with_precision_and_scale(precision, scale)
- .map_err(DataFusionError::ArrowError)?;
+ .map_err(|e| arrow_datafusion_err!(e))?;
builder.append_nulls(size);
Ok(builder.finish())
}
@@ -1675,7 +1676,7 @@ impl ScalarValue {
.take(size)
.collect::<Decimal256Array>()
.with_precision_and_scale(precision, scale)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
}
/// Converts `Vec<ScalarValue>` where each element has type corresponding
to
@@ -1882,7 +1883,7 @@ impl ScalarValue {
.take(size)
.collect::<Vec<_>>();
arrow::compute::concat(arrays.as_slice())
- .map_err(DataFusionError::ArrowError)?
+ .map_err(|e| arrow_datafusion_err!(e))?
}
ScalarValue::Date32(e) => {
build_array_from_option!(Date32, Date32Array, e, size)
diff --git a/datafusion/common/src/utils.rs b/datafusion/common/src/utils.rs
index 2d38ca2182..cfdef309a4 100644
--- a/datafusion/common/src/utils.rs
+++ b/datafusion/common/src/utils.rs
@@ -17,8 +17,8 @@
//! This module provides the bisect function, which implements binary search.
-use crate::error::_internal_err;
-use crate::{DataFusionError, Result, ScalarValue};
+use crate::error::{_internal_datafusion_err, _internal_err};
+use crate::{arrow_datafusion_err, DataFusionError, Result, ScalarValue};
use arrow::array::{ArrayRef, PrimitiveArray};
use arrow::buffer::OffsetBuffer;
use arrow::compute;
@@ -95,7 +95,7 @@ pub fn get_record_batch_at_indices(
new_columns,
&RecordBatchOptions::new().with_row_count(Some(indices.len())),
)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
}
/// This function compares two tuples depending on the given sort options.
@@ -117,7 +117,7 @@ pub fn compare_rows(
lhs.partial_cmp(rhs)
}
.ok_or_else(|| {
- DataFusionError::Internal("Column array shouldn't be
empty".to_string())
+ _internal_datafusion_err!("Column array shouldn't be empty")
})?,
(true, true, _) => continue,
};
@@ -291,7 +291,7 @@ pub fn get_arrayref_at_indices(
indices,
None, // None: no index check
)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
})
.collect()
}
diff --git a/datafusion/core/src/datasource/avro_to_arrow/arrow_array_reader.rs
b/datafusion/core/src/datasource/avro_to_arrow/arrow_array_reader.rs
index 855a8d0dbf..a16c1ae333 100644
--- a/datafusion/core/src/datasource/avro_to_arrow/arrow_array_reader.rs
+++ b/datafusion/core/src/datasource/avro_to_arrow/arrow_array_reader.rs
@@ -45,6 +45,7 @@ use arrow::array::{BinaryArray, FixedSizeBinaryArray,
GenericListArray};
use arrow::datatypes::{Fields, SchemaRef};
use arrow::error::ArrowError::SchemaError;
use arrow::error::Result as ArrowResult;
+use datafusion_common::arrow_err;
use num_traits::NumCast;
use std::collections::BTreeMap;
use std::io::Read;
@@ -86,9 +87,9 @@ impl<'a, R: Read> AvroArrowArrayReader<'a, R> {
}
Ok(lookup)
}
- _ => Err(DataFusionError::ArrowError(SchemaError(
+ _ => arrow_err!(SchemaError(
"expected avro schema to be a record".to_string(),
- ))),
+ )),
}
}
diff --git a/datafusion/core/src/datasource/listing_table_factory.rs
b/datafusion/core/src/datasource/listing_table_factory.rs
index 7c859ee988..68c97bbb78 100644
--- a/datafusion/core/src/datasource/listing_table_factory.rs
+++ b/datafusion/core/src/datasource/listing_table_factory.rs
@@ -36,7 +36,7 @@ use crate::execution::context::SessionState;
use arrow::datatypes::{DataType, SchemaRef};
use datafusion_common::file_options::{FileTypeWriterOptions, StatementOptions};
-use datafusion_common::{plan_err, DataFusionError, FileType};
+use datafusion_common::{arrow_datafusion_err, plan_err, DataFusionError,
FileType};
use datafusion_expr::CreateExternalTable;
use async_trait::async_trait;
@@ -114,7 +114,7 @@ impl TableProviderFactory for ListingTableFactory {
.map(|col| {
schema
.field_with_name(col)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
})
.collect::<datafusion_common::Result<Vec<_>>>()?
.into_iter()
diff --git a/datafusion/core/src/datasource/memory.rs
b/datafusion/core/src/datasource/memory.rs
index 7c044b2936..7c61cc5368 100644
--- a/datafusion/core/src/datasource/memory.rs
+++ b/datafusion/core/src/datasource/memory.rs
@@ -423,7 +423,7 @@ mod tests {
.scan(&session_ctx.state(), Some(&projection), &[], None)
.await
{
- Err(DataFusionError::ArrowError(ArrowError::SchemaError(e))) => {
+ Err(DataFusionError::ArrowError(ArrowError::SchemaError(e), _)) =>
{
assert_eq!(
"\"project index 4 out of bounds, max field 3\"",
format!("{e:?}")
diff --git a/datafusion/core/src/datasource/physical_plan/parquet/row_filter.rs
b/datafusion/core/src/datasource/physical_plan/parquet/row_filter.rs
index 5fe0a0a13a..151ab5f657 100644
--- a/datafusion/core/src/datasource/physical_plan/parquet/row_filter.rs
+++ b/datafusion/core/src/datasource/physical_plan/parquet/row_filter.rs
@@ -21,7 +21,7 @@ use arrow::error::{ArrowError, Result as ArrowResult};
use arrow::record_batch::RecordBatch;
use datafusion_common::cast::as_boolean_array;
use datafusion_common::tree_node::{RewriteRecursion, TreeNode,
TreeNodeRewriter};
-use datafusion_common::{DataFusionError, Result, ScalarValue};
+use datafusion_common::{arrow_err, DataFusionError, Result, ScalarValue};
use datafusion_physical_expr::expressions::{Column, Literal};
use datafusion_physical_expr::utils::reassign_predicate_columns;
use std::collections::BTreeSet;
@@ -243,7 +243,7 @@ impl<'a> TreeNodeRewriter for FilterCandidateBuilder<'a> {
}
Err(e) => {
// If the column is not in the table schema, should
throw the error
- Err(DataFusionError::ArrowError(e))
+ arrow_err!(e)
}
};
}
diff --git a/datafusion/core/tests/user_defined/user_defined_plan.rs
b/datafusion/core/tests/user_defined/user_defined_plan.rs
index d4a8842c0a..29708c4422 100644
--- a/datafusion/core/tests/user_defined/user_defined_plan.rs
+++ b/datafusion/core/tests/user_defined/user_defined_plan.rs
@@ -91,6 +91,7 @@ use datafusion::{
};
use async_trait::async_trait;
+use datafusion_common::arrow_datafusion_err;
use futures::{Stream, StreamExt};
/// Execute the specified sql and return the resulting record batches
@@ -99,7 +100,7 @@ async fn exec_sql(ctx: &mut SessionContext, sql: &str) ->
Result<String> {
let df = ctx.sql(sql).await?;
let batches = df.collect().await?;
pretty_format_batches(&batches)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
.map(|d| d.to_string())
}
diff --git a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
index e2fbd5e927..5a300e2ff2 100644
--- a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
+++ b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
@@ -29,11 +29,11 @@ use crate::simplify_expressions::SimplifyInfo;
use arrow::{
array::new_null_array,
datatypes::{DataType, Field, Schema},
- error::ArrowError,
record_batch::RecordBatch,
};
use datafusion_common::{
cast::{as_large_list_array, as_list_array},
+ plan_err,
tree_node::{RewriteRecursion, TreeNode, TreeNodeRewriter},
};
use datafusion_common::{
@@ -792,7 +792,7 @@ impl<'a, S: SimplifyInfo> TreeNodeRewriter for
Simplifier<'a, S> {
op: Divide,
right,
}) if is_null(&right) => *right,
- // A / 0 -> DivideByZero Error if A is not null and not floating
+ // A / 0 -> Divide by zero error if A is not null and not floating
// (float / 0 -> inf | -inf | NAN)
Expr::BinaryExpr(BinaryExpr {
left,
@@ -802,7 +802,7 @@ impl<'a, S: SimplifyInfo> TreeNodeRewriter for
Simplifier<'a, S> {
&& !info.get_data_type(&left)?.is_floating()
&& is_zero(&right) =>
{
- return
Err(DataFusionError::ArrowError(ArrowError::DivideByZero));
+ return plan_err!("Divide by zero");
}
//
@@ -832,7 +832,7 @@ impl<'a, S: SimplifyInfo> TreeNodeRewriter for
Simplifier<'a, S> {
{
lit(0)
}
- // A % 0 --> DivideByZero Error (if A is not floating and not null)
+ // A % 0 --> Divide by zero Error (if A is not floating and not
null)
// A % 0 --> NAN (if A is floating and not null)
Expr::BinaryExpr(BinaryExpr {
left,
@@ -843,9 +843,7 @@ impl<'a, S: SimplifyInfo> TreeNodeRewriter for
Simplifier<'a, S> {
DataType::Float32 => lit(f32::NAN),
DataType::Float64 => lit(f64::NAN),
_ => {
- return Err(DataFusionError::ArrowError(
- ArrowError::DivideByZero,
- ));
+ return plan_err!("Divide by zero");
}
}
}
@@ -1315,7 +1313,9 @@ mod tests {
array::{ArrayRef, Int32Array},
datatypes::{DataType, Field, Schema},
};
- use datafusion_common::{assert_contains, cast::as_int32_array, DFField,
ToDFSchema};
+ use datafusion_common::{
+ assert_contains, cast::as_int32_array, plan_datafusion_err, DFField,
ToDFSchema,
+ };
use datafusion_expr::{interval_arithmetic::Interval, *};
use datafusion_physical_expr::{
execution_props::ExecutionProps, functions::make_scalar_function,
@@ -1771,25 +1771,23 @@ mod tests {
#[test]
fn test_simplify_divide_zero_by_zero() {
- // 0 / 0 -> DivideByZero
+ // 0 / 0 -> Divide by zero
let expr = lit(0) / lit(0);
let err = try_simplify(expr).unwrap_err();
- assert!(
- matches!(err,
DataFusionError::ArrowError(ArrowError::DivideByZero)),
- "{err}"
- );
+ let _expected = plan_datafusion_err!("Divide by zero");
+
+ assert!(matches!(err, ref _expected), "{err}");
}
#[test]
- #[should_panic(
- expected = "called `Result::unwrap()` on an `Err` value:
ArrowError(DivideByZero)"
- )]
fn test_simplify_divide_by_zero() {
// A / 0 -> DivideByZeroError
let expr = col("c2_non_null") / lit(0);
-
- simplify(expr);
+ assert_eq!(
+ try_simplify(expr).unwrap_err().strip_backtrace(),
+ "Error during planning: Divide by zero"
+ );
}
#[test]
@@ -2209,12 +2207,12 @@ mod tests {
}
#[test]
- #[should_panic(
- expected = "called `Result::unwrap()` on an `Err` value:
ArrowError(DivideByZero)"
- )]
fn test_simplify_modulo_by_zero_non_null() {
let expr = col("c2_non_null") % lit(0);
- simplify(expr);
+ assert_eq!(
+ try_simplify(expr).unwrap_err().strip_backtrace(),
+ "Error during planning: Divide by zero"
+ );
}
#[test]
diff --git a/datafusion/physical-expr/src/aggregate/first_last.rs
b/datafusion/physical-expr/src/aggregate/first_last.rs
index 5e2012bdbb..c009881d89 100644
--- a/datafusion/physical-expr/src/aggregate/first_last.rs
+++ b/datafusion/physical-expr/src/aggregate/first_last.rs
@@ -31,7 +31,7 @@ use arrow::compute::{self, lexsort_to_indices, SortColumn};
use arrow::datatypes::{DataType, Field};
use arrow_schema::SortOptions;
use datafusion_common::utils::{compare_rows, get_arrayref_at_indices,
get_row_at_idx};
-use datafusion_common::{DataFusionError, Result, ScalarValue};
+use datafusion_common::{arrow_datafusion_err, DataFusionError, Result,
ScalarValue};
use datafusion_expr::Accumulator;
/// FIRST_VALUE aggregate expression
@@ -541,7 +541,7 @@ fn filter_states_according_to_is_set(
) -> Result<Vec<ArrayRef>> {
states
.iter()
- .map(|state| compute::filter(state,
flags).map_err(DataFusionError::ArrowError))
+ .map(|state| compute::filter(state, flags).map_err(|e|
arrow_datafusion_err!(e)))
.collect::<Result<Vec<_>>>()
}
diff --git
a/datafusion/physical-expr/src/aggregate/groups_accumulator/adapter.rs
b/datafusion/physical-expr/src/aggregate/groups_accumulator/adapter.rs
index cf980f4c3f..c6fd17a69b 100644
--- a/datafusion/physical-expr/src/aggregate/groups_accumulator/adapter.rs
+++ b/datafusion/physical-expr/src/aggregate/groups_accumulator/adapter.rs
@@ -25,7 +25,8 @@ use arrow::{
};
use arrow_array::{ArrayRef, BooleanArray, PrimitiveArray};
use datafusion_common::{
- utils::get_arrayref_at_indices, DataFusionError, Result, ScalarValue,
+ arrow_datafusion_err, utils::get_arrayref_at_indices, DataFusionError,
Result,
+ ScalarValue,
};
use datafusion_expr::Accumulator;
@@ -372,7 +373,7 @@ fn get_filter_at_indices(
)
})
.transpose()
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
}
// Copied from physical-plan
@@ -394,7 +395,7 @@ pub(crate) fn slice_and_maybe_filter(
sliced_arrays
.iter()
.map(|array| {
- compute::filter(array,
filter_array).map_err(DataFusionError::ArrowError)
+ compute::filter(array, filter_array).map_err(|e|
arrow_datafusion_err!(e))
})
.collect()
} else {
diff --git a/datafusion/physical-expr/src/expressions/binary.rs
b/datafusion/physical-expr/src/expressions/binary.rs
index 9c7fdd2e81..c17081398c 100644
--- a/datafusion/physical-expr/src/expressions/binary.rs
+++ b/datafusion/physical-expr/src/expressions/binary.rs
@@ -629,8 +629,7 @@ mod tests {
use arrow::datatypes::{
ArrowNumericType, Decimal128Type, Field, Int32Type, SchemaRef,
};
- use arrow_schema::ArrowError;
- use datafusion_common::Result;
+ use datafusion_common::{plan_datafusion_err, Result};
use datafusion_expr::type_coercion::binary::get_input_types;
/// Performs a binary operation, applying any type coercion necessary
@@ -3608,10 +3607,9 @@ mod tests {
)
.unwrap_err();
- assert!(
- matches!(err,
DataFusionError::ArrowError(ArrowError::DivideByZero)),
- "{err}"
- );
+ let _expected = plan_datafusion_err!("Divide by zero");
+
+ assert!(matches!(err, ref _expected), "{err}");
// decimal
let schema = Arc::new(Schema::new(vec![
@@ -3633,10 +3631,7 @@ mod tests {
)
.unwrap_err();
- assert!(
- matches!(err,
DataFusionError::ArrowError(ArrowError::DivideByZero)),
- "{err}"
- );
+ assert!(matches!(err, ref _expected), "{err}");
Ok(())
}
diff --git a/datafusion/physical-expr/src/regex_expressions.rs
b/datafusion/physical-expr/src/regex_expressions.rs
index 41cd019495..7bafed072b 100644
--- a/datafusion/physical-expr/src/regex_expressions.rs
+++ b/datafusion/physical-expr/src/regex_expressions.rs
@@ -26,7 +26,7 @@ use arrow::array::{
OffsetSizeTrait,
};
use arrow::compute;
-use datafusion_common::plan_err;
+use datafusion_common::{arrow_datafusion_err, plan_err};
use datafusion_common::{
cast::as_generic_string_array, internal_err, DataFusionError, Result,
};
@@ -58,7 +58,7 @@ pub fn regexp_match<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
2 => {
let values = as_generic_string_array::<T>(&args[0])?;
let regex = as_generic_string_array::<T>(&args[1])?;
- compute::regexp_match(values, regex,
None).map_err(DataFusionError::ArrowError)
+ compute::regexp_match(values, regex, None).map_err(|e|
arrow_datafusion_err!(e))
}
3 => {
let values = as_generic_string_array::<T>(&args[0])?;
@@ -69,7 +69,7 @@ pub fn regexp_match<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
Some(f) if f.iter().any(|s| s == Some("g")) => {
plan_err!("regexp_match() does not support the \"global\"
option")
},
- _ => compute::regexp_match(values, regex,
flags).map_err(DataFusionError::ArrowError),
+ _ => compute::regexp_match(values, regex, flags).map_err(|e|
arrow_datafusion_err!(e)),
}
}
other => internal_err!(
diff --git a/datafusion/physical-expr/src/window/lead_lag.rs
b/datafusion/physical-expr/src/window/lead_lag.rs
index d22660d41e..7ee736ce9c 100644
--- a/datafusion/physical-expr/src/window/lead_lag.rs
+++ b/datafusion/physical-expr/src/window/lead_lag.rs
@@ -23,7 +23,7 @@ use crate::PhysicalExpr;
use arrow::array::ArrayRef;
use arrow::compute::cast;
use arrow::datatypes::{DataType, Field};
-use datafusion_common::ScalarValue;
+use datafusion_common::{arrow_datafusion_err, ScalarValue};
use datafusion_common::{internal_err, DataFusionError, Result};
use datafusion_expr::PartitionEvaluator;
use std::any::Any;
@@ -142,7 +142,7 @@ fn create_empty_array(
.transpose()?
.unwrap_or_else(|| new_null_array(data_type, size));
if array.data_type() != data_type {
- cast(&array, data_type).map_err(DataFusionError::ArrowError)
+ cast(&array, data_type).map_err(|e| arrow_datafusion_err!(e))
} else {
Ok(array)
}
@@ -172,10 +172,10 @@ fn shift_with_default_value(
// Concatenate both arrays, add nulls after if shift > 0 else before
if offset > 0 {
concat(&[default_values.as_ref(), slice.as_ref()])
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
} else {
concat(&[slice.as_ref(), default_values.as_ref()])
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
}
}
}
diff --git a/datafusion/physical-plan/src/joins/stream_join_utils.rs
b/datafusion/physical-plan/src/joins/stream_join_utils.rs
index 64a976a1e3..50b1618a35 100644
--- a/datafusion/physical-plan/src/joins/stream_join_utils.rs
+++ b/datafusion/physical-plan/src/joins/stream_join_utils.rs
@@ -33,7 +33,9 @@ use arrow_buffer::{ArrowNativeType, BooleanBufferBuilder};
use arrow_schema::{Schema, SchemaRef};
use async_trait::async_trait;
use datafusion_common::tree_node::{Transformed, TreeNode};
-use datafusion_common::{DataFusionError, JoinSide, Result, ScalarValue};
+use datafusion_common::{
+ arrow_datafusion_err, DataFusionError, JoinSide, Result, ScalarValue,
+};
use datafusion_execution::SendableRecordBatchStream;
use datafusion_expr::interval_arithmetic::Interval;
use datafusion_physical_expr::expressions::Column;
@@ -595,7 +597,7 @@ pub fn combine_two_batches(
(Some(left_batch), Some(right_batch)) => {
// If both batches are present, concatenate them:
concat_batches(output_schema, &[left_batch, right_batch])
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
.map(Some)
}
(None, None) => {
diff --git a/datafusion/physical-plan/src/joins/utils.rs
b/datafusion/physical-plan/src/joins/utils.rs
index eae65ce9c2..c902ba85f2 100644
--- a/datafusion/physical-plan/src/joins/utils.rs
+++ b/datafusion/physical-plan/src/joins/utils.rs
@@ -1370,7 +1370,7 @@ mod tests {
use arrow::error::{ArrowError, Result as ArrowResult};
use arrow_schema::SortOptions;
- use datafusion_common::ScalarValue;
+ use datafusion_common::{arrow_datafusion_err, arrow_err, ScalarValue};
fn check(left: &[Column], right: &[Column], on: &[(Column, Column)]) ->
Result<()> {
let left = left
@@ -1406,9 +1406,7 @@ mod tests {
#[tokio::test]
async fn check_error_nesting() {
let once_fut = OnceFut::<()>::new(async {
- Err(DataFusionError::ArrowError(ArrowError::CsvError(
- "some error".to_string(),
- )))
+ arrow_err!(ArrowError::CsvError("some error".to_string()))
});
struct TestFut(OnceFut<()>);
@@ -1432,10 +1430,10 @@ mod tests {
let wrapped_err = DataFusionError::from(arrow_err_from_fut);
let root_err = wrapped_err.find_root();
- assert!(matches!(
- root_err,
- DataFusionError::ArrowError(ArrowError::CsvError(_))
- ))
+ let _expected =
+ arrow_datafusion_err!(ArrowError::CsvError("some
error".to_owned()));
+
+ assert!(matches!(root_err, _expected))
}
#[test]
diff --git a/datafusion/physical-plan/src/repartition/mod.rs
b/datafusion/physical-plan/src/repartition/mod.rs
index 769dc5e0e1..07693f747f 100644
--- a/datafusion/physical-plan/src/repartition/mod.rs
+++ b/datafusion/physical-plan/src/repartition/mod.rs
@@ -34,7 +34,7 @@ use log::trace;
use parking_lot::Mutex;
use tokio::task::JoinHandle;
-use datafusion_common::{not_impl_err, DataFusionError, Result};
+use datafusion_common::{arrow_datafusion_err, not_impl_err, DataFusionError,
Result};
use datafusion_execution::memory_pool::MemoryConsumer;
use datafusion_execution::TaskContext;
use datafusion_physical_expr::{EquivalenceProperties, PhysicalExpr};
@@ -200,7 +200,7 @@ impl BatchPartitioner {
.iter()
.map(|c| {
arrow::compute::take(c.as_ref(), &indices,
None)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
})
.collect::<Result<Vec<ArrayRef>>>()?;
@@ -1414,9 +1414,8 @@ mod tests {
// pull partitions
for i in 0..exec.partitioning.partition_count() {
let mut stream = exec.execute(i, task_ctx.clone())?;
- let err = DataFusionError::ArrowError(
- stream.next().await.unwrap().unwrap_err().into(),
- );
+ let err =
+
arrow_datafusion_err!(stream.next().await.unwrap().unwrap_err().into());
let err = err.find_root();
assert!(
matches!(err, DataFusionError::ResourcesExhausted(_)),
diff --git a/datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs
b/datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs
index 431a43bc60..0871ec0d7f 100644
--- a/datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs
+++ b/datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs
@@ -51,7 +51,7 @@ use datafusion_common::utils::{
evaluate_partition_ranges, get_arrayref_at_indices, get_at_indices,
get_record_batch_at_indices, get_row_at_idx,
};
-use datafusion_common::{exec_err, DataFusionError, Result};
+use datafusion_common::{arrow_datafusion_err, exec_err, DataFusionError,
Result};
use datafusion_execution::TaskContext;
use datafusion_expr::window_state::{PartitionBatchState, WindowAggState};
use datafusion_expr::ColumnarValue;
@@ -499,7 +499,7 @@ impl PartitionSearcher for LinearSearch {
.iter()
.map(|items| {
concat(&items.iter().map(|e| e.as_ref()).collect::<Vec<_>>())
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
})
.collect::<Result<Vec<_>>>()?;
// We should emit columns according to row index ordering.
diff --git a/datafusion/proto/src/logical_plan/from_proto.rs
b/datafusion/proto/src/logical_plan/from_proto.rs
index 854bfda9a8..c582e92dc1 100644
--- a/datafusion/proto/src/logical_plan/from_proto.rs
+++ b/datafusion/proto/src/logical_plan/from_proto.rs
@@ -36,8 +36,9 @@ use arrow::{
};
use datafusion::execution::registry::FunctionRegistry;
use datafusion_common::{
- internal_err, plan_datafusion_err, Column, Constraint, Constraints,
DFField,
- DFSchema, DFSchemaRef, DataFusionError, OwnedTableReference, Result,
ScalarValue,
+ arrow_datafusion_err, internal_err, plan_datafusion_err, Column,
Constraint,
+ Constraints, DFField, DFSchema, DFSchemaRef, DataFusionError,
OwnedTableReference,
+ Result, ScalarValue,
};
use datafusion_expr::window_frame::{check_window_frame,
regularize_window_order_by};
use datafusion_expr::{
@@ -717,7 +718,7 @@ impl TryFrom<&protobuf::ScalarValue> for ScalarValue {
None,
&message.version(),
)
- .map_err(DataFusionError::ArrowError)
+ .map_err(|e| arrow_datafusion_err!(e))
.map_err(|e| e.context("Decoding ScalarValue::List Value"))?;
let arr = record_batch.column(0);
match value {
diff --git a/datafusion/sqllogictest/test_files/math.slt
b/datafusion/sqllogictest/test_files/math.slt
index ee1e345f94..0fa7ff9c20 100644
--- a/datafusion/sqllogictest/test_files/math.slt
+++ b/datafusion/sqllogictest/test_files/math.slt
@@ -293,53 +293,52 @@ select c1*0, c2*0, c3*0, c4*0, c5*0, c6*0, c7*0, c8*0
from test_non_nullable_int
----
0 0 0 0 0 0 0 0
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c1/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c2/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c3/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c4/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c5/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c6/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c7/0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c8/0 FROM test_non_nullable_integer
-
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c1%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c2%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c3%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c4%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c5%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c6%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c7%0 FROM test_non_nullable_integer
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c8%0 FROM test_non_nullable_integer
statement ok
@@ -557,10 +556,10 @@ SELECT c1*0 FROM test_non_nullable_decimal
----
0
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c1/0 FROM test_non_nullable_decimal
-query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nArrow error: Divide by zero error
+query error DataFusion error: Optimizer rule 'simplify_expressions'
failed\ncaused by\nError during planning: Divide by zero
SELECT c1%0 FROM test_non_nullable_decimal
statement ok