fix: return 422 on invalid SQL (#34303)

This commit is contained in:
Beto Dealmeida
2025-07-24 16:40:56 -04:00
committed by GitHub
parent 3177131d52
commit b794b192d1
6 changed files with 340 additions and 4 deletions

View File

@@ -31,7 +31,7 @@ from superset.commands.dataset.exceptions import (
TableNotFoundValidationError,
)
from superset.daos.dataset import DatasetDAO
from superset.exceptions import SupersetSecurityException
from superset.exceptions import SupersetParseError, SupersetSecurityException
from superset.extensions import security_manager
from superset.sql.parse import Table
from superset.utils.decorators import on_error, transaction
@@ -51,7 +51,7 @@ class CreateDatasetCommand(CreateMixin, BaseCommand):
dataset.fetch_metadata()
return dataset
def validate(self) -> None:
def validate(self) -> None: # noqa: C901
exceptions: list[ValidationError] = []
database_id = self._properties["database"]
catalog = self._properties.get("catalog")
@@ -95,6 +95,13 @@ class CreateDatasetCommand(CreateMixin, BaseCommand):
)
except SupersetSecurityException as ex:
exceptions.append(DatasetDataAccessIsNotAllowed(ex.error.message))
except SupersetParseError as ex:
exceptions.append(
ValidationError(
f"Invalid SQL: {ex.error.message}",
field_name="sql",
)
)
try:
owners = self.populate_owners(owner_ids)
self._properties["owners"] = owners