mirror of
https://github.com/apache/superset.git
synced 2026-09-01 13:01:33 +00:00
test(sql): cover SqlglotError fallback branch in parse_predicate
The regression test only exercised the ParseError branch, leaving the generic sqlglot.errors.SqlglotError fallback in SQLStatement.parse_predicate uncovered and dropping line coverage below the 100% gate. Add a test that mocks sqlglot.parse_one to raise a bare SqlglotError and asserts it is converted to a SupersetParseError.
This commit is contained in:
@@ -5592,6 +5592,27 @@ def test_parse_predicate_invalid_sql_raises_superset_parse_error() -> None:
|
||||
assert excinfo.value.status == 422
|
||||
|
||||
|
||||
def test_parse_predicate_sqlglot_error_raises_superset_parse_error(
|
||||
mocker: MockerFixture,
|
||||
) -> None:
|
||||
"""
|
||||
A non-``ParseError`` ``sqlglot`` failure also surfaces as a typed error.
|
||||
|
||||
``parse_predicate`` catches the generic ``SqlglotError`` base class as a
|
||||
fallback so any sqlglot failure (e.g. tokenize errors) is converted into a
|
||||
``SupersetParseError`` rather than leaking a raw sqlglot exception.
|
||||
"""
|
||||
# Build the statement before patching, since the constructor also parses.
|
||||
stmt = SQLStatement("SELECT 1", "postgresql")
|
||||
mocker.patch(
|
||||
"sqlglot.parse_one",
|
||||
side_effect=sqlglot.errors.SqlglotError("boom"),
|
||||
)
|
||||
with pytest.raises(SupersetParseError) as excinfo:
|
||||
stmt.parse_predicate("a > 1")
|
||||
assert excinfo.value.status == 422
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("_small_parse_cap")
|
||||
def test_transpile_to_dialect_length_check() -> None:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user