Update databend engine spec

* For use with databend dialect version >= 0.4.6
This commit is contained in:
Pat Buxton 2024-04-25 17:10:44 +01:00
parent 1c48fe05fd
commit 9dda5638f1
3 changed files with 14 additions and 8 deletions

View File

@ -394,7 +394,7 @@ crate://crate@127.0.0.1:4200
#### Databend
The recommended connector library for Databend is [databend-sqlalchemy](https://pypi.org/project/databend-sqlalchemy/).
Superset has been tested on `databend-sqlalchemy>=0.2.3`.
Superset has been tested on `databend-sqlalchemy>=0.4.6`.
The recommended connection string is:
@ -405,7 +405,7 @@ databend://{username}:{password}@{host}:{port}/{database_name}
Here's a connection string example of Superset connecting to a Databend database:
```
databend://user:password@localhost:8000/default?secure=false
databend://user:password@localhost:8000/default?sslmode=disable
```

View File

@ -111,7 +111,7 @@ clickhouse = ["clickhouse-connect>=0.5.14, <1.0"]
cockroachdb = ["cockroachdb>=0.3.5, <0.4"]
cors = ["flask-cors>=2.0.0"]
crate = ["crate[sqlalchemy]>=0.26.0, <0.27"]
databend = ["databend-sqlalchemy>=0.3.2, <1.0"]
databend = ["databend-sqlalchemy>=0.4.6, <1.0"]
databricks = [
"databricks-sql-connector>=2.0.2, <3",
"sqlalchemy-databricks>=0.2.0",

View File

@ -217,10 +217,11 @@ class DatabendConnectEngineSpec(BasicParametersMixin, DatabendEngineSpec):
_function_names: list[str] = []
sqlalchemy_uri_placeholder = (
"databend://user:password@host[:port][/dbname][?secure=value&=value...]"
"databend://user:password@host[:port][/dbname][?sslmode=value&=value...]"
)
parameters_schema = DatabendParametersSchema()
encryption_parameters = {"secure": "true"}
encryption_parameters = {"sslmode": "require"}
encryption_disable_parameters = {"sslmode": "disable"}
@classmethod
def get_dbapi_exception_mapping(cls) -> dict[type[Exception], type[Exception]]:
@ -258,10 +259,12 @@ class DatabendConnectEngineSpec(BasicParametersMixin, DatabendEngineSpec):
cls, parameters: BasicParametersType, *_args: dict[str, str] | None
) -> str:
url_params = parameters.copy()
query = parameters.get("query", {}).copy()
if url_params.get("encryption"):
query = parameters.get("query", {}).copy()
query.update(cls.encryption_parameters)
url_params["query"] = query
else:
query.update(cls.encryption_disable_parameters)
url_params["query"] = query
if not url_params.get("database"):
url_params["database"] = "__default__"
url_params.pop("encryption", None)
@ -273,7 +276,10 @@ class DatabendConnectEngineSpec(BasicParametersMixin, DatabendEngineSpec):
) -> BasicParametersType:
url = make_url_safe(uri)
query = url.query
if "secure" in query:
if "sslmode" in query:
encryption = url.query.get("sslmode") == "require"
query.pop("sslmode")
elif "secure" in query:
encryption = url.query.get("secure") == "true"
query.pop("secure")
else: