Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attach Diagnostic to "function x does not exist" error #14430

Closed
Tracked by #14429
eliaperantoni opened this issue Feb 3, 2025 · 7 comments · Fixed by #14849
Closed
Tracked by #14429

Attach Diagnostic to "function x does not exist" error #14430

eliaperantoni opened this issue Feb 3, 2025 · 7 comments · Fixed by #14849
Assignees
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@eliaperantoni
Copy link
Contributor

eliaperantoni commented Feb 3, 2025

Is your feature request related to a problem or challenge?

For a query like:

SELECT idontexist(1)'

The only message that the end user of an application built atop of DataFusion sees is:

Error during planning: Invalid function 'idontexist'.
Did you mean 'datepart'?

We want to provide a richer message that references and highlights locations in the original SQL query, and contextualises and helps the user understand the error. In the end, it would be possible to display errors in a fashion akin to what was enabled by #13664 for some errors:

See #14429 for more information.

Describe the solution you'd like

Attach a well crafted Diagnostic to the DataFusionError, building on top of the foundations laid in #13664. See #14429 for more information.

Describe alternatives you've considered

No response

Additional context

No response

@eliaperantoni eliaperantoni added the enhancement New feature or request label Feb 3, 2025
@onlyjackfrost
Copy link
Contributor

take

@alamb
Copy link
Contributor

alamb commented Feb 4, 2025

I think this is a good first issue as the need is clear and the tests in https://github.com/apache/datafusion/blob/85fbde2661bdb462fc498dc18f055c44f229604c/datafusion/sql/tests/cases/diagnostic.rs are well structured for extension.

Thanks @onlyjackfrost

@alamb alamb added the good first issue Good for newcomers label Feb 4, 2025
@eliaperantoni
Copy link
Contributor Author

Hey @onlyjackfrost how is it going with this ticket :) Can I help with anything?

@onlyjackfrost
Copy link
Contributor

Hi @eliaperantoni sorry for the late reply.
I'm working on this and aim to raise a PR over the weekend.
I'll let you know if I have any questions. Thanks for being so friendly! :)

@onlyjackfrost
Copy link
Contributor

onlyjackfrost commented Feb 24, 2025

Hi @eliaperantoni, just updating my progress.
I've implemented the diagnostic like this. I'm not sure my implementation is in the right direction.
@eliaperantoni thanks for implementing the try_from_sqlparser_span in the first place, I was struggling with how to get the span from the function.

.map_err(|e| {
    let span = Span::try_from_sqlparser_span(sql_parser_span);
    let mut diagnostic =
        Diagnostic::new_error(format!("Invalid function '{name}'"), span);
    diagnostic.add_note(
        format!("possible function {}", suggested_func_name),
        None,
    );
    e.with_diagnostic(diagnostic)
})

I'm trying to add test case in the /sql/cases/diagnostic.rs file... will raise PR later.

@eliaperantoni
Copy link
Contributor Author

@onlyjackfrost yes that's perfect!

I'm trying to add test case in the /sql/cases/diagnostic.rs file... will raise PR later.

Sweet! Looking forward to it. Great job :)

@onlyjackfrost
Copy link
Contributor

@eliaperantoni I just raised my PR, could you help review it?
Thanks =D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants