Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dbt/include/sqlserver/macros/utils/openquery.sql
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@
{{ exceptions.raise_compiler_error("openquery: query exceeds SQL Server OPENQUERY 8 KB limit (got " ~ (cleaned_sql | length) ~ " characters after escaping, max 8000). Use EXEC('...') AT <server> or a remote view/OPENROWSET for longer queries.") }}
{%- endif -%}
{%- endif -%}
OPENQUERY([{{ server_name }}], '{{ cleaned_sql }}')
OPENQUERY({{ adapter.quote(server_name) }}, '{{ cleaned_sql }}')
{%- endmacro %}
10 changes: 5 additions & 5 deletions tests/functional/adapter/mssql/test_openquery.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,9 @@ def _run_all(self, project, _linked_server):
return results

def test_emits_openquery_and_returns_rows(self, project, _run_all):
"""Happy path: bracketed server name, literal remote SQL, real rows."""
"""Happy path: quoted server name, literal remote SQL, real rows."""
sql = _find_compiled_sql(project, "basic_model.sql")
assert "OPENQUERY([LOCALLOOP], 'SELECT 1 AS id" in sql
assert 'OPENQUERY("LOCALLOOP", \'SELECT 1 AS id' in sql
rows = project.run_sql(
f"SELECT id, name FROM {project.test_schema}.basic_model ORDER BY id",
fetch="all",
Expand All @@ -216,21 +216,21 @@ def test_single_quotes_are_doubled_and_survive(self, project, _run_all):
"""Quotes are doubled in the emitted SQL, and the remote literal
round-trips to the value it's."""
sql = _find_compiled_sql(project, "quotes_model.sql")
assert "OPENQUERY([LOCALLOOP], 'SELECT ''it''''s'' AS msg')" in sql
assert "OPENQUERY(\"LOCALLOOP\", 'SELECT ''it''''s'' AS msg')" in sql
rows = project.run_sql(f"SELECT msg FROM {project.test_schema}.quotes_model", fetch="all")
assert [row[0] for row in rows] == ["it's"]

def test_carriage_returns_are_stripped_and_query_runs(self, project, _run_all):
sql = _find_compiled_sql(project, "cr_model.sql")
assert "\r" not in sql
assert "OPENQUERY([LOCALLOOP], 'SELECT 1" in sql
assert 'OPENQUERY("LOCALLOOP", \'SELECT 1' in sql
rows = project.run_sql(f"SELECT id FROM {project.test_schema}.cr_model", fetch="all")
assert [row[0] for row in rows] == [1]

def test_max_length_boundary_compiles(self, project, _run_all):
"""Exactly 8000 escaped characters is allowed."""
sql = _find_compiled_sql(project, "max_length_model.sql")
assert "OPENQUERY([LOCALLOOP], 'SELECT " in sql
assert 'OPENQUERY("LOCALLOOP", \'SELECT ' in sql

@pytest.mark.parametrize(
"model_name,expected",
Expand Down
Loading