andygrove opened a new issue, #26301:
URL: https://github.com/apache/datafusion/issues/26301

   ### Is your feature request related to a problem or challenge?
   
   [`SqlToRel::sql_statement_to_plan_with_context_impl` 
(sql/src/statement.rs#L267-L1649)](https://github.com/apache/datafusion/blob/0d79252f61bd8777990b2749c216ffd07079c30d/datafusion/sql/src/statement.rs#L267-L1649)
 is a 1,307-line match over `ast::Statement`, with cognitive complexity 357 and 
cyclomatic complexity 217. `statement.rs` has had 39 commits in the last 12 
months.
   
   Many arms are already thin dispatchers (`explain_to_plan`, 
`set_statement_to_plan`, `describe_table_to_plan`, ...), but about a dozen 
inline large bodies:
   
   - `CreateTable` (about L312-L652, ~340 lines), mostly destructuring ~70 
sqlparser fields followed by a long run of `if x { return not_impl_err!(..) }`.
   - `CreateView`, `Drop`, `Prepare`/`Execute`, `ShowTables`/`ShowColumns`, 
`Insert`, `StartTransaction` (L1268-L1344), `CreateFunction` (L1372-L1524) and 
`Truncate`.
   
   Every sqlparser upgrade that adds a field to `CreateTable` has to touch this 
destructuring pattern, which makes the function a recurring merge-conflict and 
review burden.
   
   ### Describe the solution you'd like
   
   - Make the match a pure dispatcher where each large arm calls a method on 
`SqlToRel`, following the existing `describe_table_to_plan` pattern: 
`create_table_to_plan`, `create_view_to_plan`, `drop_to_plan`, 
`prepare_to_plan`, `execute_to_plan`, `show_tables_to_plan`, 
`start_transaction_to_plan`, `create_function_to_plan`, `truncate_to_plan`, ...
   - For `CreateTable`, bind the struct by name 
(`Statement::CreateTable(create_table)`) and move the unsupported-option checks 
into a helper such as `reject_unsupported_create_table_options(&create_table)`, 
so new sqlparser fields don't require editing the match pattern.
   - Optionally split `statement.rs` into submodules by statement family (DDL, 
DML, utility).
   
   ### Describe alternatives you've considered
   
   Leave it as is.
   
   ### Additional context
   
   Line references are pinned to commit 0d79252f61bd.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to