You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2023/05/12 00:00:16 UTC
[superset] branch master updated: chore: remove duplicates of `validate_adhoc_subquery` (#24023)
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 7fe0ca12c0 chore: remove duplicates of `validate_adhoc_subquery` (#24023)
7fe0ca12c0 is described below
commit 7fe0ca12c0ae24c9b2546118e9ebdb94a9e3a22d
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Thu May 11 17:00:06 2023 -0700
chore: remove duplicates of `validate_adhoc_subquery` (#24023)
---
superset/connectors/sqla/models.py | 2 +-
superset/connectors/sqla/utils.py | 38 +-------------------------------------
superset/models/helpers.py | 33 ---------------------------------
3 files changed, 2 insertions(+), 71 deletions(-)
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index 1a5dd0037e..22d546424e 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -88,7 +88,6 @@ from superset.connectors.sqla.utils import (
get_columns_description,
get_physical_table_metadata,
get_virtual_table_metadata,
- validate_adhoc_subquery,
)
from superset.datasets.models import Dataset as NewDataset
from superset.db_engine_specs.base import BaseEngineSpec, TimestampExpression
@@ -113,6 +112,7 @@ from superset.models.helpers import (
ExploreMixin,
QueryResult,
QueryStringExtended,
+ validate_adhoc_subquery,
)
from superset.sql_parse import ParsedQuery, sanitize_clause
from superset.superset_typing import AdhocColumn, AdhocMetric, Metric, QueryObjectDict
diff --git a/superset/connectors/sqla/utils.py b/superset/connectors/sqla/utils.py
index 4cf20e5511..698311dab6 100644
--- a/superset/connectors/sqla/utils.py
+++ b/superset/connectors/sqla/utils.py
@@ -32,7 +32,6 @@ from typing import (
)
from uuid import UUID
-import sqlparse
from flask_babel import lazy_gettext as _
from sqlalchemy.engine.url import URL as SqlaURL
from sqlalchemy.exc import NoSuchTableError
@@ -49,7 +48,7 @@ from superset.exceptions import (
)
from superset.models.core import Database
from superset.result_set import SupersetResultSet
-from superset.sql_parse import has_table_query, insert_rls, ParsedQuery
+from superset.sql_parse import ParsedQuery
from superset.superset_typing import ResultSetColumnType
if TYPE_CHECKING:
@@ -166,41 +165,6 @@ def get_columns_description(
raise SupersetGenericDBErrorException(message=str(ex)) from ex
-def validate_adhoc_subquery(
- sql: str,
- database_id: int,
- default_schema: str,
-) -> str:
- """
- Check if adhoc SQL contains sub-queries or nested sub-queries with table.
-
- If sub-queries are allowed, the adhoc SQL is modified to insert any applicable RLS
- predicates to it.
-
- :param sql: adhoc sql expression
- :raise SupersetSecurityException if sql contains sub-queries or
- nested sub-queries with table
- """
- # pylint: disable=import-outside-toplevel
- from superset import is_feature_enabled
-
- statements = []
- for statement in sqlparse.parse(sql):
- if has_table_query(statement):
- if not is_feature_enabled("ALLOW_ADHOC_SUBQUERY"):
- raise SupersetSecurityException(
- SupersetError(
- error_type=SupersetErrorType.ADHOC_SUBQUERY_NOT_ALLOWED_ERROR,
- message=_("Custom SQL fields cannot contain sub-queries."),
- level=ErrorLevel.ERROR,
- )
- )
- statement = insert_rls(statement, database_id, default_schema)
- statements.append(statement)
-
- return ";\n".join(str(statement) for statement in statements)
-
-
@lru_cache(maxsize=LRU_CACHE_MAX_SIZE)
def get_dialect_name(drivername: str) -> str:
return SqlaURL.create(drivername).get_dialect().name
diff --git a/superset/models/helpers.py b/superset/models/helpers.py
index ec2a0a41d9..532b97bea6 100644
--- a/superset/models/helpers.py
+++ b/superset/models/helpers.py
@@ -903,39 +903,6 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
sql = f"{cte}\n{sql}"
return sql
- @staticmethod
- def validate_adhoc_subquery(
- sql: str,
- database_id: int,
- default_schema: str,
- ) -> str:
- """
- Check if adhoc SQL contains sub-queries or nested sub-queries with table.
-
- If sub-queries are allowed, the adhoc SQL is modified to insert any applicable RLS
- predicates to it.
-
- :param sql: adhoc sql expression
- :raise SupersetSecurityException if sql contains sub-queries or
- nested sub-queries with table
- """
-
- statements = []
- for statement in sqlparse.parse(sql):
- if has_table_query(statement):
- if not is_feature_enabled("ALLOW_ADHOC_SUBQUERY"):
- raise SupersetSecurityException(
- SupersetError(
- error_type=SupersetErrorType.ADHOC_SUBQUERY_NOT_ALLOWED_ERROR,
- message=_("Custom SQL fields cannot contain sub-queries."),
- level=ErrorLevel.ERROR,
- )
- )
- statement = insert_rls(statement, database_id, default_schema)
- statements.append(statement)
-
- return ";\n".join(str(statement) for statement in statements)
-
def get_query_str_extended(
self, query_obj: QueryObjectDict, mutate: bool = True
) -> QueryStringExtended: