sqlfluff / sqlfluff

A modular SQL linter and auto-formatter with support for multiple dialects and templated code.
https://www.sqlfluff.com
MIT License
7.26k stars 644 forks source link

[TSQL] Error parsing statements with a case expression in where clause #5744

Open martinswan opened 1 month ago

martinswan commented 1 month ago

Search before asking

What Happened

SQL code that we have in or system contains a case expression in the where clause. The code runs fine in the system, but SQLFluff is not able to parse this code.

Expected Behaviour

I would expect the following code to run without error:

import sqlfluff

query = f"""SELECT
  *
FROM MyDatabase.MySchema.MyTable
WHERE CASE WHEN 1 = 1 THEN 'Y' ELSE 'N' END <> 'Y'
"""

sqlfluff.parse(query, dialect='tsql')

The code does run without error if you update it to include parentheses around the case expression likes so:

import sqlfluff

query = f"""SELECT
  *
FROM MyDatabase.MySchema.MyTable
WHERE (CASE WHEN 1 = 1 THEN 'Y' ELSE 'N' END) <> 'Y'
"""

sqlfluff.parse(query, dialect='tsql')

Observed Behaviour

Instead of the code running without error, I get the following error:

sqlfluff.api.simple.APIParsingError: Found 1 issues while parsing string.
Line 4, Position 45: Found unparsable section: "<> 'Y'"

How to reproduce

Run the following code to get this error:

import sqlfluff

query = f"""SELECT
  *
FROM MyDatabase.MySchema.MyTable
WHERE CASE WHEN 1 = 1 THEN 'Y' ELSE 'N' END <> 'Y'
"""

sqlfluff.parse(query, dialect='tsql')

Dialect

tsql

Version

sqlfluff 2.3.5 python 3.12.1

Configuration

(no configuration)

Are you willing to work on and submit a PR to address the issue?

Code of Conduct

keraion commented 1 month ago

Thanks for the report! This appears to have been fixed by #5728.