Skip to content

Commit 4719c98

Browse files
authored
Merge pull request #3 from cmardiros/save-history-bug-fixes-snapshot-safe
fix save_test_history macro to work when a model (snapshot or model) depends_on a source with the same name
2 parents 96cb380 + 883a90d commit 4719c98

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

macros/run_end/save_results_history.sql

+17-14
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,29 @@
3838
{% set any_refs = modules.re.findall("ref\(\'(?P<name>.*)\'\)", el.node.test_metadata.kwargs['model']) %}
3939
{% set any_source = modules.re.findall("source\(\'(?P<one>.*)\'\,\s+\'(?P<two>.*)\'\)", el.node.test_metadata.kwargs['model']) %}
4040

41+
-- Separate `depends_on` nodes into sources and models to avoid incorrect matching of a test to a source
42+
-- when it fact it refers to a model (snapshot or regular model)
43+
{% set depends_on_sources = [] %}
44+
{% set depends_on_models = [] %}
45+
{% for full_name in el.node.depends_on.nodes %}
46+
{%- if full_name.split('.')[0] == "source" -%}
47+
{% do depends_on_sources.append(full_name)%}
48+
{%- else -%}
49+
{% do depends_on_models.append(full_name)%}
50+
{%- endif -%}
51+
{% endfor %}
52+
4153
{% if any_refs %}
4254
{% set name = any_refs[0] %}
43-
-- NOTE: This relies on snapshot models to include the word "snapshot" in the model name.
44-
-- There doesn't seem to be an easily accessible field to tell us that this node is a snapshot
45-
-- without relying on the name or other proxies.
46-
{% if "snapshot" in name %}
47-
{% set ref_type = "snapshot" %}
48-
{% else %}
49-
{% set ref_type = "model" %}
50-
{% endif %}
51-
{% set node_name = re_data.priv_full_name_from_depends(el.node, name, ref_type) %}
55+
{% set node_name = re_data.priv_full_name_from_depends(el.node, name, depends_on_models) %}
5256
{% set schema = graph.nodes.get(node_name)['schema'] %}
5357
{% set database = graph.nodes.get(node_name)['database'] %}
5458
{% set table_name = (database + '.' + schema + '.' + name) | lower %}
5559

5660
{% elif any_source %}
5761
{% set package_name = any_source[0][0] %}
5862
{% set name = any_source[0][1] %}
59-
{% set node_name = re_data.priv_full_name_from_depends(el.node, name, "source") %}
63+
{% set node_name = re_data.priv_full_name_from_depends(el.node, name, depends_on_sources) %}
6064
{% set schema = graph.sources.get(node_name)['schema'] %}
6165
{% set database = graph.sources.get(node_name)['database'] %}
6266
{% set table_name = (database + '.' + schema + '.' + name) | lower %}
@@ -106,12 +110,11 @@
106110

107111
{% endmacro %}
108112

109-
{% macro priv_full_name_from_depends(node, name, type) %}
113+
{% macro priv_full_name_from_depends(node, name, depends_on_nodes) %}
110114

111-
{% for full_name in node.depends_on.nodes %}
115+
{% for full_name in depends_on_nodes %}
112116
{% set node_name = full_name.split('.')[-1] %}
113-
{% set node_type = full_name.split('.')[0] %}
114-
{% if node_name == name and node_type == type %}
117+
{% if node_name == name %}
115118
{{ return(full_name) }}
116119
{% endif %}
117120
{% endfor %}

0 commit comments

Comments
 (0)