Skip to content

Commit

Permalink
feat: support query parameter for MSSQL connection (#1026)
Browse files Browse the repository at this point in the history
  • Loading branch information
nehanene15 committed Nov 3, 2023
1 parent 367658e commit 48b0355
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 1 deletion.
2 changes: 2 additions & 0 deletions data_validation/cli_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@
["user", "User used to connect"],
["password", "Password for supplied user"],
["database", "Database to connect to (default master)"],
["query", "Connection query parameters"],
["url", "SQL Server SQLAlchemy connection URL"],
],
"MySQL": [
["host", "Desired MySQL host (default localhost)"],
Expand Down
3 changes: 3 additions & 0 deletions docs/connections.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ data-validation connections add

## MSSQL Server
MSSQL Server connections require [pyodbc](https://pypi.org/project/pyodbc/) as the driver: `pip install pyodbc`.
For connection query parameter options, see https://docs.sqlalchemy.org/en/20/dialects/mssql.html#hostname-connections.

```
data-validation connections add
Expand All @@ -162,6 +163,8 @@ data-validation connections add
--user USER MSSQL user
--password PASSWORD MSSQL password
--database DATABASE MSSQL database
[--url URL] SQLAlchemy connection URL
[--query QUERY] Connection query parameters i.e. '{"TrustServerCertificate": "yes"}'
```

## Postgres
Expand Down
9 changes: 8 additions & 1 deletion third_party/ibis/ibis_mssql/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from ibis.backends.mssql.datatypes import _type_from_result_set_info

import third_party.ibis.ibis_mssql.datatypes
import json


# The MSSQL backend uses the Ibis MSSQL compiler, but overrides
Expand All @@ -42,21 +43,27 @@ def do_connect(
url: str = None,
driver: Literal["pyodbc"] = "pyodbc",
odbc_driver: str = "ODBC Driver 17 for SQL Server",
query: str = None,
) -> None:
if url is None:
if driver != "pyodbc":
raise NotImplementedError(
"pyodbc is currently the only supported driver"
)

if query:
query = json.loads(query)
else:
query = {"driver": odbc_driver}

alchemy_url = sa.engine.url.URL.create(
f"mssql+{driver}",
host=host,
port=port,
username=user,
password=password,
database=database,
query={"driver": odbc_driver},
query=query,
)
else:
alchemy_url = sa.engine.url.make_url(url)
Expand Down
2 changes: 2 additions & 0 deletions third_party/ibis/ibis_mssql/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ def mssql_connect(
url: str = None,
driver: Literal["pyodbc"] = "pyodbc",
odbc_driver: str = "ODBC Driver 17 for SQL Server",
query: str = None,
):
backend = MsSqlBackend()
backend.do_connect(
Expand All @@ -36,5 +37,6 @@ def mssql_connect(
url=url,
driver=driver,
odbc_driver=odbc_driver,
query=query,
)
return backend

0 comments on commit 48b0355

Please sign in to comment.