Skip to content

Commit

Permalink
Support persisting docs for materialized_view materializations (#98)
Browse files Browse the repository at this point in the history
Co-authored-by: Anders <[email protected]>
Co-authored-by: Colin <[email protected]>
  • Loading branch information
3 people authored Jul 8, 2024
1 parent f21b89c commit e7c4f79
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
6 changes: 6 additions & 0 deletions .changes/unreleased/Fixes-20240626-163930.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: Fixes
body: Fix `persist_docs` for `materialized_view` materializations. Previously, using this configuration with materialized view models would lead to an error.
time: 2024-06-26T16:39:30.455995+02:00
custom:
Author: morsapaes
Issue: "120"
7 changes: 6 additions & 1 deletion dbt/include/postgres/macros/adapters.sql
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,12 @@

{% macro postgres__alter_relation_comment(relation, comment) %}
{% set escaped_comment = postgres_escape_comment(comment) %}
comment on {{ relation.type }} {{ relation }} is {{ escaped_comment }};
{% if relation.type == 'materialized_view' -%}
{% set relation_type = "materialized view" %}
{%- else -%}
{%- set relation_type = relation.type -%}
{%- endif -%}
comment on {{ relation_type }} {{ relation }} is {{ escaped_comment }};
{% endmacro %}


Expand Down
48 changes: 48 additions & 0 deletions tests/functional/shared_tests/test_persist_docs.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,29 @@
import pytest
import json

from dbt.tests.adapter.materialized_view import files
from dbt.tests.adapter.persist_docs.test_persist_docs import (
BasePersistDocs,
BasePersistDocsColumnMissing,
BasePersistDocsCommentOnQuotedColumn,
)
from tests.functional.utils import run_dbt

_MATERIALIZED_VIEW_PROPERTIES__SCHEMA_YML = """
version: 2
models:
- name: my_materialized_view
description: |
Materialized view model description "with double quotes"
and with 'single quotes' as welll as other;
'''abc123'''
reserved -- characters
80% of statistics are made up on the spot
--
/* comment */
Some $lbl$ labeled $lbl$ and $$ unlabeled $$ dollar-quoting
"""


class TestPersistDocs(BasePersistDocs):
Expand All @@ -15,3 +36,30 @@ class TestPersistDocsColumnMissing(BasePersistDocsColumnMissing):

class TestPersistDocsCommentOnQuotedColumn(BasePersistDocsCommentOnQuotedColumn):
pass


class TestPersistDocsWithMaterializedView(BasePersistDocs):
@pytest.fixture(scope="class", autouse=True)
def seeds(self):
return {"my_seed.csv": files.MY_SEED}

@pytest.fixture(scope="class")
def models(self):
return {
"my_materialized_view.sql": files.MY_MATERIALIZED_VIEW,
}

@pytest.fixture(scope="class")
def properties(self):
return {
"schema.yml": _MATERIALIZED_VIEW_PROPERTIES__SCHEMA_YML,
}

def test_has_comments_pglike(self, project):
run_dbt(["docs", "generate"])
with open("target/catalog.json") as fp:
catalog_data = json.load(fp)
assert "nodes" in catalog_data
assert len(catalog_data["nodes"]) == 2
view_node = catalog_data["nodes"]["model.test.my_materialized_view"]
assert view_node["metadata"]["comment"].startswith("Materialized view model description")

0 comments on commit e7c4f79

Please sign in to comment.