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/07/19 00:26:03 UTC
[superset] 01/01: fix: search_path in RDS
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch fix_rds
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 6322cedea38bcfa049d650d6ddd79de35f18dfa5
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Tue Jul 18 17:25:51 2023 -0700
fix: search_path in RDS
---
superset/db_engine_specs/base.py | 13 +++++++++++++
superset/db_engine_specs/postgres.py | 21 +++++----------------
superset/models/core.py | 2 ++
3 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py
index 0d778de439..ebfbfa6eb8 100644
--- a/superset/db_engine_specs/base.py
+++ b/superset/db_engine_specs/base.py
@@ -1098,6 +1098,19 @@ class BaseEngineSpec: # pylint: disable=too-many-public-methods
**cls.enforce_uri_query_params.get(uri.get_driver_name(), {}),
}
+ @classmethod
+ def get_prequeries(
+ cls,
+ catalog: str | None = None,
+ schema: str | None = None,
+ ) -> [str]:
+ """
+ Return pre-session queries.
+
+ This are useful for setting the default catalog and/or schema.
+ """
+ return []
+
@classmethod
def patch(cls) -> None:
"""
diff --git a/superset/db_engine_specs/postgres.py b/superset/db_engine_specs/postgres.py
index cdd71fdfcc..ba3a411f1a 100644
--- a/superset/db_engine_specs/postgres.py
+++ b/superset/db_engine_specs/postgres.py
@@ -252,23 +252,12 @@ class PostgresEngineSpec(PostgresBaseEngineSpec, BasicParametersMixin):
return None
@classmethod
- def adjust_engine_params(
+ def get_prequeries(
cls,
- uri: URL,
- connect_args: dict[str, Any],
- catalog: Optional[str] = None,
- schema: Optional[str] = None,
- ) -> tuple[URL, dict[str, Any]]:
- if not schema:
- return uri, connect_args
-
- options = parse_options(connect_args)
- options["search_path"] = schema
- connect_args["options"] = " ".join(
- f"-c{key}={value}" for key, value in options.items()
- )
-
- return uri, connect_args
+ catalog: str | None = None,
+ schema: str | None = None,
+ ) -> [str]:
+ return [f'set search_path = "{schema}"']
@classmethod
def get_allow_cost_estimate(cls, extra: dict[str, Any]) -> bool:
diff --git a/superset/models/core.py b/superset/models/core.py
index 4ff56145e1..ad452b74df 100755
--- a/superset/models/core.py
+++ b/superset/models/core.py
@@ -521,6 +521,8 @@ class Database(
schema=schema, nullpool=nullpool, source=source
) as engine:
with closing(engine.raw_connection()) as conn:
+ for prequery in self.db_engine_spec.get_prequeries(schema=schema):
+ conn.execute(prequery)
yield conn
def get_default_schema_for_query(self, query: "Query") -> Optional[str]: