Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix save_test_history macro to work when a model depends_on a source with the same name #106

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
24 changes: 18 additions & 6 deletions macros/run_end/save_results_history.sql
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,29 @@
{% set any_refs = modules.re.findall("ref\(\'(?P<name>.*)\'\)", el.node.test_metadata.kwargs['model']) %}
{% set any_source = modules.re.findall("source\(\'(?P<one>.*)\'\,\s+\'(?P<two>.*)\'\)", el.node.test_metadata.kwargs['model']) %}

-- Separate `depends_on` nodes into sources and models to avoid incorrect matching of a test to a source
-- when it fact it refers to a model (snapshot or regular model)
{% set depends_on_sources = [] %}
{% set depends_on_models = [] %}
{% for full_name in el.node.depends_on.nodes %}
{%- if full_name.split('.')[0] == "source" -%}
{% do depends_on_sources.append(full_name)%}
{%- else -%}
{% do depends_on_models.append(full_name)%}
{%- endif -%}
{% endfor %}

{% if any_refs %}
{% set name = any_refs[0] %}
{% set node_name = re_data.priv_full_name_from_depends(el.node, name) %}
{% set node_name = re_data.priv_full_name_from_depends(el.node, name, depends_on_models) %}
{% set schema = graph.nodes.get(node_name)['schema'] %}
{% set database = graph.nodes.get(node_name)['database'] %}
{% set table_name = (database + '.' + schema + '.' + name) | lower %}
{% set table_name = (database + '.' + schema + '.' + name) | lower %}

{% elif any_source %}
{% set package_name = any_source[0][0] %}
{% set name = any_source[0][1] %}
{% set node_name = re_data.priv_full_name_from_depends(el.node, name) %}
{% set node_name = re_data.priv_full_name_from_depends(el.node, name, depends_on_sources) %}
{% set schema = graph.sources.get(node_name)['schema'] %}
{% set database = graph.sources.get(node_name)['database'] %}
{% set table_name = (database + '.' + schema + '.' + name) | lower %}
Expand Down Expand Up @@ -98,9 +110,9 @@

{% endmacro %}

{% macro priv_full_name_from_depends(node, name) %}
{% macro priv_full_name_from_depends(node, name, depends_on_nodes) %}

{% for full_name in node.depends_on.nodes %}
{% for full_name in depends_on_nodes %}
{% set node_name = full_name.split('.')[-1] %}
{% if node_name == name %}
{{ return(full_name) }}
Expand Down