This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 4df83f5af4 Derive `Debug` for `SessionStateBuilder`, adding `Debug`
requirements to fields (#12632)
4df83f5af4 is described below
commit 4df83f5af42176763da8b10dd93341875544e17a
Author: AnthonyZhOon <[email protected]>
AuthorDate: Sat Sep 28 09:17:35 2024 +1000
Derive `Debug` for `SessionStateBuilder`, adding `Debug` requirements to
fields (#12632)
* Require Debug for PhysicalOptimizerRule
* Add reference to meet &JoinType type required
* Revert "Add reference to meet &JoinType type required" as clippy lint
informs this is unnecessary
This reverts commit f69d73c0f5c130d78f0b3bcf0967185466fd9c50.
* Require `Debug` for `CatalogProvider`, `CatalogProviderList`,
UrlTableFactory
* Add derive Debug to meet api-change
* Add derive Debug in datafusion-cli to support api-change of
CatalogProviderList
* Require Debug for ExprPlanner
* Require Debug for QueryPlanner
* Require Debug for TableFunctionImpl
* Require Debug for SerializerRegistry
* Require Debug for FunctionFactory
* Derive `Debug` on `SessionStateBuilder`
* Implement `Debug` for `SessionStateBuilder` to reorder output fields,
keep consistent Debug field order with `SessionState`
* Settle TODO for displaying `Debug` of `InformationSchemaConfig` after
`CatalogProviderList` requires `Debug`
---
datafusion-cli/src/catalog.rs | 3 ++
datafusion-cli/src/functions.rs | 1 +
datafusion-examples/examples/catalog.rs | 3 ++
datafusion-examples/examples/simple_udtf.rs | 1 +
datafusion/catalog/src/catalog.rs | 5 ++-
datafusion/catalog/src/dynamic_file/catalog.rs | 6 ++-
datafusion/catalog/src/schema.rs | 3 +-
datafusion/catalog/src/session.rs | 1 +
.../core/src/catalog_common/information_schema.rs | 14 ++----
.../core/src/catalog_common/listing_schema.rs | 1 +
datafusion/core/src/catalog_common/memory.rs | 4 ++
datafusion/core/src/datasource/dynamic_file.rs | 2 +-
datafusion/core/src/datasource/function.rs | 4 +-
datafusion/core/src/execution/context/mod.rs | 6 ++-
datafusion/core/src/execution/session_state.rs | 52 +++++++++++++++++-----
datafusion/core/tests/user_defined/expr_planner.rs | 1 +
.../core/tests/user_defined/user_defined_plan.rs | 1 +
.../user_defined/user_defined_table_functions.rs | 1 +
datafusion/expr/src/planner.rs | 3 +-
datafusion/expr/src/registry.rs | 7 +--
datafusion/functions-nested/src/planner.rs | 2 +
datafusion/functions/src/core/planner.rs | 2 +-
datafusion/functions/src/planner.rs | 2 +-
.../tests/cases/roundtrip_logical_plan.rs | 1 +
24 files changed, 91 insertions(+), 35 deletions(-)
diff --git a/datafusion-cli/src/catalog.rs b/datafusion-cli/src/catalog.rs
index 9b9afc1c24..ceb72dbc54 100644
--- a/datafusion-cli/src/catalog.rs
+++ b/datafusion-cli/src/catalog.rs
@@ -34,6 +34,7 @@ use dirs::home_dir;
use parking_lot::RwLock;
/// Wraps another catalog, automatically register require object stores for
the file locations
+#[derive(Debug)]
pub struct DynamicObjectStoreCatalog {
inner: Arc<dyn CatalogProviderList>,
state: Weak<RwLock<SessionState>>,
@@ -74,6 +75,7 @@ impl CatalogProviderList for DynamicObjectStoreCatalog {
}
/// Wraps another catalog provider
+#[derive(Debug)]
struct DynamicObjectStoreCatalogProvider {
inner: Arc<dyn CatalogProvider>,
state: Weak<RwLock<SessionState>>,
@@ -115,6 +117,7 @@ impl CatalogProvider for DynamicObjectStoreCatalogProvider {
/// Wraps another schema provider. [DynamicObjectStoreSchemaProvider] is
responsible for registering the required
/// object stores for the file locations.
+#[derive(Debug)]
struct DynamicObjectStoreSchemaProvider {
inner: Arc<dyn SchemaProvider>,
state: Weak<RwLock<SessionState>>,
diff --git a/datafusion-cli/src/functions.rs b/datafusion-cli/src/functions.rs
index dd56b0196d..c622463de0 100644
--- a/datafusion-cli/src/functions.rs
+++ b/datafusion-cli/src/functions.rs
@@ -315,6 +315,7 @@ fn fixed_len_byte_array_to_string(val:
Option<&FixedLenByteArray>) -> Option<Str
})
}
+#[derive(Debug)]
pub struct ParquetMetadataFunc {}
impl TableFunctionImpl for ParquetMetadataFunc {
diff --git a/datafusion-examples/examples/catalog.rs
b/datafusion-examples/examples/catalog.rs
index 8c2b1aad56..f40f1dfb5a 100644
--- a/datafusion-examples/examples/catalog.rs
+++ b/datafusion-examples/examples/catalog.rs
@@ -135,6 +135,7 @@ struct DirSchemaOpts<'a> {
format: Arc<dyn FileFormat>,
}
/// Schema where every file with extension `ext` in a given `dir` is a table.
+#[derive(Debug)]
struct DirSchema {
ext: String,
tables: RwLock<HashMap<String, Arc<dyn TableProvider>>>,
@@ -218,6 +219,7 @@ impl SchemaProvider for DirSchema {
}
}
/// Catalog holds multiple schemas
+#[derive(Debug)]
struct DirCatalog {
schemas: RwLock<HashMap<String, Arc<dyn SchemaProvider>>>,
}
@@ -259,6 +261,7 @@ impl CatalogProvider for DirCatalog {
}
}
/// Catalog lists holds multiple catalog providers. Each context has a single
catalog list.
+#[derive(Debug)]
struct CustomCatalogProviderList {
catalogs: RwLock<HashMap<String, Arc<dyn CatalogProvider>>>,
}
diff --git a/datafusion-examples/examples/simple_udtf.rs
b/datafusion-examples/examples/simple_udtf.rs
index baa783fce9..6faa397ef6 100644
--- a/datafusion-examples/examples/simple_udtf.rs
+++ b/datafusion-examples/examples/simple_udtf.rs
@@ -128,6 +128,7 @@ impl TableProvider for LocalCsvTable {
}
}
+#[derive(Debug)]
struct LocalCsvTableFunc {}
impl TableFunctionImpl for LocalCsvTableFunc {
diff --git a/datafusion/catalog/src/catalog.rs
b/datafusion/catalog/src/catalog.rs
index 9ee94e8f1f..048a7f14ed 100644
--- a/datafusion/catalog/src/catalog.rs
+++ b/datafusion/catalog/src/catalog.rs
@@ -16,6 +16,7 @@
// under the License.
use std::any::Any;
+use std::fmt::Debug;
use std::sync::Arc;
pub use crate::schema::SchemaProvider;
@@ -101,7 +102,7 @@ use datafusion_common::Result;
///
/// [`TableProvider`]: crate::TableProvider
-pub trait CatalogProvider: Sync + Send {
+pub trait CatalogProvider: Debug + Sync + Send {
/// Returns the catalog provider as [`Any`]
/// so that it can be downcast to a specific implementation.
fn as_any(&self) -> &dyn Any;
@@ -152,7 +153,7 @@ pub trait CatalogProvider: Sync + Send {
///
/// Please see the documentation on `CatalogProvider` for details of
/// implementing a custom catalog.
-pub trait CatalogProviderList: Sync + Send {
+pub trait CatalogProviderList: Debug + Sync + Send {
/// Returns the catalog list as [`Any`]
/// so that it can be downcast to a specific implementation.
fn as_any(&self) -> &dyn Any;
diff --git a/datafusion/catalog/src/dynamic_file/catalog.rs
b/datafusion/catalog/src/dynamic_file/catalog.rs
index cd586446f8..ccccb9762e 100644
--- a/datafusion/catalog/src/dynamic_file/catalog.rs
+++ b/datafusion/catalog/src/dynamic_file/catalog.rs
@@ -20,9 +20,11 @@
use crate::{CatalogProvider, CatalogProviderList, SchemaProvider,
TableProvider};
use async_trait::async_trait;
use std::any::Any;
+use std::fmt::Debug;
use std::sync::Arc;
/// Wrap another catalog provider list
+#[derive(Debug)]
pub struct DynamicFileCatalog {
/// The inner catalog provider list
inner: Arc<dyn CatalogProviderList>,
@@ -67,6 +69,7 @@ impl CatalogProviderList for DynamicFileCatalog {
}
/// Wraps another catalog provider
+#[derive(Debug)]
struct DynamicFileCatalogProvider {
/// The inner catalog provider
inner: Arc<dyn CatalogProvider>,
@@ -114,6 +117,7 @@ impl CatalogProvider for DynamicFileCatalogProvider {
///
/// The provider will try to create a table provider from the file path if the
table provider
/// isn't exist in the inner schema provider.
+#[derive(Debug)]
pub struct DynamicFileSchemaProvider {
/// The inner schema provider
inner: Arc<dyn SchemaProvider>,
@@ -174,7 +178,7 @@ impl SchemaProvider for DynamicFileSchemaProvider {
/// [UrlTableFactory] is a factory that can create a table provider from the
given url.
#[async_trait]
-pub trait UrlTableFactory: Sync + Send {
+pub trait UrlTableFactory: Debug + Sync + Send {
/// create a new table provider from the provided url
async fn try_new(
&self,
diff --git a/datafusion/catalog/src/schema.rs b/datafusion/catalog/src/schema.rs
index 21bca9fa82..5b37348fd7 100644
--- a/datafusion/catalog/src/schema.rs
+++ b/datafusion/catalog/src/schema.rs
@@ -21,6 +21,7 @@
use async_trait::async_trait;
use datafusion_common::{exec_err, DataFusionError};
use std::any::Any;
+use std::fmt::Debug;
use std::sync::Arc;
use crate::table::TableProvider;
@@ -32,7 +33,7 @@ use datafusion_common::Result;
///
/// [`CatalogProvider`]: super::CatalogProvider
#[async_trait]
-pub trait SchemaProvider: Sync + Send {
+pub trait SchemaProvider: Debug + Sync + Send {
/// Returns the owner of the Schema, default is None. This value is
reported
/// as part of `information_tables.schemata
fn owner_name(&self) -> Option<&str> {
diff --git a/datafusion/catalog/src/session.rs
b/datafusion/catalog/src/session.rs
index 61d9c2d8a7..db49529ac4 100644
--- a/datafusion/catalog/src/session.rs
+++ b/datafusion/catalog/src/session.rs
@@ -139,6 +139,7 @@ impl From<&dyn Session> for TaskContext {
}
type SessionRefLock = Arc<Mutex<Option<Weak<RwLock<dyn Session>>>>>;
/// The state store that stores the reference of the runtime session state.
+#[derive(Debug)]
pub struct SessionStore {
session: SessionRefLock,
}
diff --git a/datafusion/core/src/catalog_common/information_schema.rs
b/datafusion/core/src/catalog_common/information_schema.rs
index df4257504b..180994b1cb 100644
--- a/datafusion/core/src/catalog_common/information_schema.rs
+++ b/datafusion/core/src/catalog_common/information_schema.rs
@@ -26,7 +26,7 @@ use arrow::{
};
use async_trait::async_trait;
use datafusion_common::DataFusionError;
-use std::fmt::{Debug, Formatter};
+use std::fmt::Debug;
use std::{any::Any, sync::Arc};
use crate::catalog::{CatalogProviderList, SchemaProvider, TableProvider};
@@ -57,6 +57,7 @@ pub const INFORMATION_SCHEMA_TABLES: &[&str] =
/// demand. This means that if more tables are added to the underlying
/// providers, they will appear the next time the `information_schema`
/// table is queried.
+#[derive(Debug)]
pub struct InformationSchemaProvider {
config: InformationSchemaConfig,
}
@@ -70,20 +71,11 @@ impl InformationSchemaProvider {
}
}
-#[derive(Clone)]
+#[derive(Clone, Debug)]
struct InformationSchemaConfig {
catalog_list: Arc<dyn CatalogProviderList>,
}
-impl Debug for InformationSchemaConfig {
- fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
- f.debug_struct("InformationSchemaConfig")
- // TODO it would be great to print the catalog list here
- // but that would require CatalogProviderList to implement Debug
- .finish_non_exhaustive()
- }
-}
-
impl InformationSchemaConfig {
/// Construct the `information_schema.tables` virtual table
async fn make_tables(
diff --git a/datafusion/core/src/catalog_common/listing_schema.rs
b/datafusion/core/src/catalog_common/listing_schema.rs
index 5b91f963ca..e45c8a8d4a 100644
--- a/datafusion/core/src/catalog_common/listing_schema.rs
+++ b/datafusion/core/src/catalog_common/listing_schema.rs
@@ -48,6 +48,7 @@ use object_store::ObjectStore;
/// - `s3://host.example.com:3000/data/tpch/customer/_delta_log/`
///
/// [`ObjectStore`]: object_store::ObjectStore
+#[derive(Debug)]
pub struct ListingSchemaProvider {
authority: String,
path: object_store::path::Path,
diff --git a/datafusion/core/src/catalog_common/memory.rs
b/datafusion/core/src/catalog_common/memory.rs
index 6d8bddec45..f251466168 100644
--- a/datafusion/core/src/catalog_common/memory.rs
+++ b/datafusion/core/src/catalog_common/memory.rs
@@ -28,6 +28,7 @@ use std::any::Any;
use std::sync::Arc;
/// Simple in-memory list of catalogs
+#[derive(Debug)]
pub struct MemoryCatalogProviderList {
/// Collection of catalogs containing schemas and ultimately TableProviders
pub catalogs: DashMap<String, Arc<dyn CatalogProvider>>,
@@ -71,6 +72,7 @@ impl CatalogProviderList for MemoryCatalogProviderList {
}
/// Simple in-memory implementation of a catalog.
+#[derive(Debug)]
pub struct MemoryCatalogProvider {
schemas: DashMap<String, Arc<dyn SchemaProvider>>,
}
@@ -136,6 +138,7 @@ impl CatalogProvider for MemoryCatalogProvider {
}
/// Simple in-memory implementation of a schema.
+#[derive(Debug)]
pub struct MemorySchemaProvider {
tables: DashMap<String, Arc<dyn TableProvider>>,
}
@@ -248,6 +251,7 @@ mod test {
#[test]
fn default_register_schema_not_supported() {
// mimic a new CatalogProvider and ensure it does not support
registering schemas
+ #[derive(Debug)]
struct TestProvider {}
impl CatalogProvider for TestProvider {
fn as_any(&self) -> &dyn Any {
diff --git a/datafusion/core/src/datasource/dynamic_file.rs
b/datafusion/core/src/datasource/dynamic_file.rs
index a95f3abb93..3c409af297 100644
--- a/datafusion/core/src/datasource/dynamic_file.rs
+++ b/datafusion/core/src/datasource/dynamic_file.rs
@@ -30,7 +30,7 @@ use crate::error::Result;
use crate::execution::context::SessionState;
/// [DynamicListTableFactory] is a factory that can create a [ListingTable]
from the given url.
-#[derive(Default)]
+#[derive(Default, Debug)]
pub struct DynamicListTableFactory {
/// The session store that contains the current session.
session_store: SessionStore,
diff --git a/datafusion/core/src/datasource/function.rs
b/datafusion/core/src/datasource/function.rs
index 14bbc431f9..37ce59f820 100644
--- a/datafusion/core/src/datasource/function.rs
+++ b/datafusion/core/src/datasource/function.rs
@@ -22,15 +22,17 @@ use super::TableProvider;
use datafusion_common::Result;
use datafusion_expr::Expr;
+use std::fmt::Debug;
use std::sync::Arc;
/// A trait for table function implementations
-pub trait TableFunctionImpl: Sync + Send {
+pub trait TableFunctionImpl: Debug + Sync + Send {
/// Create a table provider
fn call(&self, args: &[Expr]) -> Result<Arc<dyn TableProvider>>;
}
/// A table that uses a function to generate data
+#[derive(Debug)]
pub struct TableFunction {
/// Name of the table function
name: String,
diff --git a/datafusion/core/src/execution/context/mod.rs
b/datafusion/core/src/execution/context/mod.rs
index 12ce71768f..b0951d9ec4 100644
--- a/datafusion/core/src/execution/context/mod.rs
+++ b/datafusion/core/src/execution/context/mod.rs
@@ -1547,7 +1547,7 @@ impl From<SessionContext> for SessionStateBuilder {
/// A planner used to add extensions to DataFusion logical and physical plans.
#[async_trait]
-pub trait QueryPlanner {
+pub trait QueryPlanner: Debug {
/// Given a `LogicalPlan`, create an [`ExecutionPlan`] suitable for
execution
async fn create_physical_plan(
&self,
@@ -1560,7 +1560,7 @@ pub trait QueryPlanner {
/// and interact with [SessionState] to registers new udf, udaf or udwf.
#[async_trait]
-pub trait FunctionFactory: Sync + Send {
+pub trait FunctionFactory: Debug + Sync + Send {
/// Handles creation of user defined function specified in
[CreateFunction] statement
async fn create(
&self,
@@ -1583,6 +1583,7 @@ pub enum RegisterFunction {
/// Default implementation of [SerializerRegistry] that throws unimplemented
error
/// for all requests.
+#[derive(Debug)]
pub struct EmptySerializerRegistry;
impl SerializerRegistry for EmptySerializerRegistry {
@@ -2129,6 +2130,7 @@ mod tests {
}
}
+ #[derive(Debug)]
struct MyQueryPlanner {}
#[async_trait]
diff --git a/datafusion/core/src/execution/session_state.rs
b/datafusion/core/src/execution/session_state.rs
index 3e6577a486..cffb63f520 100644
--- a/datafusion/core/src/execution/session_state.rs
+++ b/datafusion/core/src/execution/session_state.rs
@@ -177,23 +177,23 @@ impl Debug for SessionState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("SessionState")
.field("session_id", &self.session_id)
- .field("analyzer", &"...")
+ .field("config", &self.config)
+ .field("runtime_env", &self.runtime_env)
+ .field("catalog_list", &"...")
+ .field("serializer_registry", &"...")
+ .field("execution_props", &self.execution_props)
+ .field("table_options", &self.table_options)
+ .field("table_factories", &"...")
+ .field("function_factory", &"...")
.field("expr_planners", &"...")
+ .field("query_planner", &"...")
+ .field("analyzer", &"...")
.field("optimizer", &"...")
.field("physical_optimizers", &"...")
- .field("query_planner", &"...")
- .field("catalog_list", &"...")
.field("table_functions", &"...")
.field("scalar_functions", &self.scalar_functions)
.field("aggregate_functions", &self.aggregate_functions)
.field("window_functions", &self.window_functions)
- .field("serializer_registry", &"...")
- .field("config", &self.config)
- .field("table_options", &self.table_options)
- .field("execution_props", &self.execution_props)
- .field("table_factories", &"...")
- .field("runtime_env", &self.runtime_env)
- .field("function_factory", &"...")
.finish_non_exhaustive()
}
}
@@ -1519,6 +1519,37 @@ impl SessionStateBuilder {
}
}
+impl Debug for SessionStateBuilder {
+ /// Prefer having short fields at the top and long vector fields near the
end
+ /// Group fields by
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("SessionStateBuilder")
+ .field("session_id", &self.session_id)
+ .field("config", &self.config)
+ .field("runtime_env", &self.runtime_env)
+ .field("catalog_list", &self.catalog_list)
+ .field("serializer_registry", &self.serializer_registry)
+ .field("file_formats", &self.file_formats)
+ .field("execution_props", &self.execution_props)
+ .field("table_options", &self.table_options)
+ .field("table_factories", &self.table_factories)
+ .field("function_factory", &self.function_factory)
+ .field("expr_planners", &self.expr_planners)
+ .field("query_planners", &self.query_planner)
+ .field("analyzer_rules", &self.analyzer_rules)
+ .field("analyzer", &self.analyzer)
+ .field("optimizer_rules", &self.optimizer_rules)
+ .field("optimizer", &self.optimizer)
+ .field("physical_optimizer_rules", &self.physical_optimizer_rules)
+ .field("physical_optimizers", &self.physical_optimizers)
+ .field("table_functions", &self.table_functions)
+ .field("scalar_functions", &self.scalar_functions)
+ .field("aggregate_functions", &self.aggregate_functions)
+ .field("window_functions", &self.window_functions)
+ .finish()
+ }
+}
+
impl Default for SessionStateBuilder {
fn default() -> Self {
Self::new()
@@ -1795,6 +1826,7 @@ impl From<&SessionState> for TaskContext {
}
/// The query planner used if no user defined planner is provided
+#[derive(Debug)]
struct DefaultQueryPlanner {}
#[async_trait]
diff --git a/datafusion/core/tests/user_defined/expr_planner.rs
b/datafusion/core/tests/user_defined/expr_planner.rs
index 1b23bf9ab2..ad9c1280d6 100644
--- a/datafusion/core/tests/user_defined/expr_planner.rs
+++ b/datafusion/core/tests/user_defined/expr_planner.rs
@@ -29,6 +29,7 @@ use datafusion_expr::expr::Alias;
use datafusion_expr::planner::{ExprPlanner, PlannerResult, RawBinaryExpr};
use datafusion_expr::BinaryExpr;
+#[derive(Debug)]
struct MyCustomPlanner;
impl ExprPlanner for MyCustomPlanner {
diff --git a/datafusion/core/tests/user_defined/user_defined_plan.rs
b/datafusion/core/tests/user_defined/user_defined_plan.rs
index caf639434a..e51adbc4dd 100644
--- a/datafusion/core/tests/user_defined/user_defined_plan.rs
+++ b/datafusion/core/tests/user_defined/user_defined_plan.rs
@@ -312,6 +312,7 @@ fn make_topk_context() -> SessionContext {
// ------ The implementation of the TopK code follows -----
+#[derive(Debug)]
struct TopKQueryPlanner {}
#[async_trait]
diff --git a/datafusion/core/tests/user_defined/user_defined_table_functions.rs
b/datafusion/core/tests/user_defined/user_defined_table_functions.rs
index fe57752db5..0cc156866d 100644
--- a/datafusion/core/tests/user_defined/user_defined_table_functions.rs
+++ b/datafusion/core/tests/user_defined/user_defined_table_functions.rs
@@ -192,6 +192,7 @@ impl SimpleCsvTable {
}
}
+#[derive(Debug)]
struct SimpleCsvTableFunc {}
impl TableFunctionImpl for SimpleCsvTableFunc {
diff --git a/datafusion/expr/src/planner.rs b/datafusion/expr/src/planner.rs
index 24f589c415..7dd7360e47 100644
--- a/datafusion/expr/src/planner.rs
+++ b/datafusion/expr/src/planner.rs
@@ -17,6 +17,7 @@
//! [`ContextProvider`] and [`ExprPlanner`] APIs to customize SQL query
planning
+use std::fmt::Debug;
use std::sync::Arc;
use arrow::datatypes::{DataType, Field, SchemaRef};
@@ -88,7 +89,7 @@ pub trait ContextProvider {
}
/// This trait allows users to customize the behavior of the SQL planner
-pub trait ExprPlanner: Send + Sync {
+pub trait ExprPlanner: Debug + Send + Sync {
/// Plan the binary operation between two expressions, returns original
/// BinaryExpr if not possible
fn plan_binary_op(
diff --git a/datafusion/expr/src/registry.rs b/datafusion/expr/src/registry.rs
index 988dc0f5ae..6d3457f70d 100644
--- a/datafusion/expr/src/registry.rs
+++ b/datafusion/expr/src/registry.rs
@@ -21,8 +21,9 @@ use crate::expr_rewriter::FunctionRewrite;
use crate::planner::ExprPlanner;
use crate::{AggregateUDF, ScalarUDF, UserDefinedLogicalNode, WindowUDF};
use datafusion_common::{not_impl_err, plan_datafusion_err, Result};
-use std::collections::HashMap;
-use std::{collections::HashSet, sync::Arc};
+use std::collections::{HashMap, HashSet};
+use std::fmt::Debug;
+use std::sync::Arc;
/// A registry knows how to build logical expressions out of user-defined
function' names
pub trait FunctionRegistry {
@@ -123,7 +124,7 @@ pub trait FunctionRegistry {
}
/// Serializer and deserializer registry for extensions like
[UserDefinedLogicalNode].
-pub trait SerializerRegistry: Send + Sync {
+pub trait SerializerRegistry: Debug + Send + Sync {
/// Serialize this node to a byte array. This serialization should not
include
/// input plans.
fn serialize_logical_plan(
diff --git a/datafusion/functions-nested/src/planner.rs
b/datafusion/functions-nested/src/planner.rs
index 4cd8faa3ca..9ae2fa781d 100644
--- a/datafusion/functions-nested/src/planner.rs
+++ b/datafusion/functions-nested/src/planner.rs
@@ -34,6 +34,7 @@ use crate::{
make_array::make_array,
};
+#[derive(Debug)]
pub struct NestedFunctionPlanner;
impl ExprPlanner for NestedFunctionPlanner {
@@ -130,6 +131,7 @@ impl ExprPlanner for NestedFunctionPlanner {
}
}
+#[derive(Debug)]
pub struct FieldAccessPlanner;
impl ExprPlanner for FieldAccessPlanner {
diff --git a/datafusion/functions/src/core/planner.rs
b/datafusion/functions/src/core/planner.rs
index 12fcb4a263..5873b4e1af 100644
--- a/datafusion/functions/src/core/planner.rs
+++ b/datafusion/functions/src/core/planner.rs
@@ -24,7 +24,7 @@ use datafusion_expr::{lit, Expr};
use super::named_struct;
-#[derive(Default)]
+#[derive(Default, Debug)]
pub struct CoreFunctionPlanner {}
impl ExprPlanner for CoreFunctionPlanner {
diff --git a/datafusion/functions/src/planner.rs
b/datafusion/functions/src/planner.rs
index ad42c5edd6..93edec7ece 100644
--- a/datafusion/functions/src/planner.rs
+++ b/datafusion/functions/src/planner.rs
@@ -24,7 +24,7 @@ use datafusion_expr::{
Expr,
};
-#[derive(Default)]
+#[derive(Default, Debug)]
pub struct UserDefinedFunctionPlanner;
impl ExprPlanner for UserDefinedFunctionPlanner {
diff --git a/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs
b/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs
index ea85092f7a..f7686bec54 100644
--- a/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs
+++ b/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs
@@ -45,6 +45,7 @@ use substrait::proto::extensions::SimpleExtensionDeclaration;
use substrait::proto::rel::RelType;
use substrait::proto::{plan_rel, Plan, Rel};
+#[derive(Debug)]
struct MockSerializerRegistry;
impl SerializerRegistry for MockSerializerRegistry {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]