hmadison opened a new issue, #16607: URL: https://github.com/apache/datafusion/issues/16607
### Describe the bug When attempting to invoke `plan_to_sql` on a plan which includes accessing a field inside of a nested structure, the invocation fails with the following error: ``` Error: Custom { kind: Other, error: Internal("get_field expects first argument to be column, but received: ScalarFunction(ScalarFunction { func: ScalarUDF { inner: GetFieldFunc { signature: Signature { type_signature: Any(2), volatility: Immutable } } }, args: [Column(Column { relation: Some(Bare { table: \"query\" }), name: \"metadata\" }), Literal(Utf8(\"product\"), None)] })") } ``` ### To Reproduce Given `query.json` as: ```json {"metadata": {"product": {"name": "Product Name"}}} ``` The following test case reproduces the error: ```rust use std::io::Error; use datafusion::prelude::{NdJsonReadOptions, SessionContext}; use datafusion::sql::unparser::plan_to_sql; #[tokio::test] async fn test_plan_to_sql() -> Result<(), Error> { let ctx = SessionContext::new(); ctx.register_json("query", "tests/fixtures/query.json", NdJsonReadOptions::default()).await?; let df = ctx.sql(r#"SELECT query."message" FROM query WHERE metadata['product']['name'] = 'Product Name'"#).await?; let sql_ast = plan_to_sql(df.logical_plan())?; assert_eq!(r#"SELECT "query".message FROM "query" WHERE ("query"."metadata".product.name = 'Product Name')"#, sql_ast.to_string()); Ok(()) } ``` ### Expected behavior The expectation would be that the `plan_to_sql` call succeeds and generates a SQL expression similar to: ```sql SELECT "query".message FROM "query" WHERE ("query"."metadata".product.name = 'Product Name') ``` ### Additional context While I'm not too familiar with the code base, my best guess is that the problem seems to be in [`get_field_to_sql`](https://github.com/apache/datafusion/blob/0143b20de3f9e25ab8d87ef4b96b78c28e462bee/datafusion/sql/src/unparser/expr.rs#L619). If I'm understanding the logic correctly, the implementation assumes a column / field pair. -- 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: github-unsubscr...@datafusion.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For additional commands, e-mail: github-h...@datafusion.apache.org