-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
Is your feature request related to a problem or challenge? Please describe what you are trying to do.
I would like to more cleanly separate the DDL (data definition) statements supported by DataFusion from the query execution.
Specifically, DataFusion offers basic support for "catalog" like operations such as registering external tables (CREATE EXTERNAL TABLE) , views (CREATE VIEW) and others. Some systems (like datafusion-cli or the tpch-benchmarks) use this basic support and others such as https://github.com/influxdata/influxdb_iox use DataFusion to query tables and views that are defined elsewhere.
The current support for catalog like operations is implemented as individual LogicalPlan variants such as LogicalPlan::CreateExternalTable
This results in two potential issues:
- Adding support for a new statement (such as
DROP TABLE, as in implementdrop view#3267) results in a bunch of boiler plate that may not be needed - It is non-trivial to understand how to configure DataFusion so that it does not support
CREATE VIEWorCREATE TABLEif that is not desired ( because, e.g. it would be a security hole - see this test):
Describe the solution you'd like
I would like to consolidate LogicalPlan::Create* and LogicalPlan::Drop* variants into a single LogicalPlan::DDL variant, and make a new DDLStatement enum like
enum LogicalPlan {
...
DDL(DDLStatement),
...
}
enum DDLStatement {
CreateTable(CreateTable),
DropTable(DroptTable),
..
}Describe alternatives you've considered
We can not make any changes (as this change would result in some API churn)
Additional context
See #3267 (comment)