pub trait TableSource: Sync + Send {
// Required methods
fn as_any(&self) -> &dyn Any;
fn schema(&self) -> SchemaRef;
// Provided methods
fn constraints(&self) -> Option<&Constraints> { ... }
fn table_type(&self) -> TableType { ... }
fn supports_filters_pushdown(
&self,
filters: &[&Expr],
) -> Result<Vec<TableProviderFilterPushDown>> { ... }
fn get_logical_plan(&self) -> Option<Cow<'_, LogicalPlan>> { ... }
fn get_column_default(&self, _column: &str) -> Option<&Expr> { ... }
}
Expand description
Planning time information about a table.
This trait is used during logical query planning and optimizations, and
provides a subset of the TableProvider
trait, such as schema information
and filter push-down capabilities. The TableProvider
trait provides
additional information needed for physical query execution, such as the
ability to perform a scan or insert data.
§See Also:
DefaultTableSource
to go from TableProvider
, to TableSource
§Rationale
The reason for having two separate traits is to avoid having the logical plan code be dependent on the DataFusion execution engine. Some projects use DataFusion’s logical plans and have their own execution engine.
Required Methods§
Provided Methods§
Sourcefn constraints(&self) -> Option<&Constraints>
fn constraints(&self) -> Option<&Constraints>
Get primary key indices, if any
Sourcefn table_type(&self) -> TableType
fn table_type(&self) -> TableType
Get the type of this table for metadata/catalog purposes.
Sourcefn supports_filters_pushdown(
&self,
filters: &[&Expr],
) -> Result<Vec<TableProviderFilterPushDown>>
fn supports_filters_pushdown( &self, filters: &[&Expr], ) -> Result<Vec<TableProviderFilterPushDown>>
Tests whether the table provider can make use of any or all filter expressions to optimize data retrieval. Only non-volatile expressions are passed to this function.
Sourcefn get_logical_plan(&self) -> Option<Cow<'_, LogicalPlan>>
fn get_logical_plan(&self) -> Option<Cow<'_, LogicalPlan>>
Get the Logical plan of this table provider, if available.
For example, a view may have a logical plan, but a CSV file does not.
Sourcefn get_column_default(&self, _column: &str) -> Option<&Expr>
fn get_column_default(&self, _column: &str) -> Option<&Expr>
Get the default value for a column, if available.