diff --git a/dbt/config.py b/dbt/config.py index c59c365bdac..95b251c27c2 100644 --- a/dbt/config.py +++ b/dbt/config.py @@ -99,7 +99,7 @@ def __init__(self, cli_vars): self.context['var'] = Var(None, self.context, cli_vars) @staticmethod - def _is_hook_path(keypath): + def _is_hook_or_model_vars_path(keypath): if not keypath: return False @@ -107,10 +107,14 @@ def _is_hook_path(keypath): # run hooks if first in {'on-run-start', 'on-run-end'}: return True - # model hooks + # models have two things to avoid if first in {'seeds', 'models'}: + # model-level hooks if 'pre-hook' in keypath or 'post-hook' in keypath: return True + # model-level 'vars' declarations + if 'vars' in keypath: + return True return False @@ -126,8 +130,9 @@ def _render_project_entry(self, value, keypath): :param key str: The key to convert on. :return Any: The rendered entry. """ - # hooks should be treated as raw sql, they'll get rendered later - if self._is_hook_path(keypath): + # hooks should be treated as raw sql, they'll get rendered later. + # Same goes for 'vars' declarations inside 'models'/'seeds'. + if self._is_hook_or_model_vars_path(keypath): return value return self.render_value(value) diff --git a/test/integration/003_simple_reference_test/models/view_using_ref.sql b/test/integration/003_simple_reference_test/models/view_using_ref.sql new file mode 100644 index 00000000000..664f6290681 --- /dev/null +++ b/test/integration/003_simple_reference_test/models/view_using_ref.sql @@ -0,0 +1,9 @@ +{{ + config( + materialized = "view" + ) +}} + +select gender, count(*) as ct from {{ var('var_ref') }} +group by gender +order by gender asc diff --git a/test/integration/003_simple_reference_test/test_simple_reference.py b/test/integration/003_simple_reference_test/test_simple_reference.py index 1fb17884ce8..66fe496d212 100644 --- a/test/integration/003_simple_reference_test/test_simple_reference.py +++ b/test/integration/003_simple_reference_test/test_simple_reference.py @@ -9,6 +9,16 @@ def schema(self): def models(self): return "test/integration/003_simple_reference_test/models" + @property + def project_config(self): + return { + 'models': { + 'vars': { + 'var_ref': '{{ ref("view_copy") }}', + } + } + } + @use_profile('postgres') def test__postgres__simple_reference(self): self.use_default_project() @@ -17,7 +27,7 @@ def test__postgres__simple_reference(self): results = self.run_dbt() # ephemeral_copy doesn't show up in results - self.assertEqual(len(results), 7) + self.assertEqual(len(results), 8) # Copies should match self.assertTablesEqual("seed","incremental_copy") @@ -29,11 +39,12 @@ def test__postgres__simple_reference(self): self.assertTablesEqual("summary_expected","materialized_summary") self.assertTablesEqual("summary_expected","view_summary") self.assertTablesEqual("summary_expected","ephemeral_summary") + self.assertTablesEqual("summary_expected","view_using_ref") self.run_sql_file("test/integration/003_simple_reference_test/update.sql") results = self.run_dbt() - self.assertEqual(len(results), 7) + self.assertEqual(len(results), 8) # Copies should match self.assertTablesEqual("seed","incremental_copy") @@ -45,6 +56,7 @@ def test__postgres__simple_reference(self): self.assertTablesEqual("summary_expected","materialized_summary") self.assertTablesEqual("summary_expected","view_summary") self.assertTablesEqual("summary_expected","ephemeral_summary") + self.assertTablesEqual("summary_expected","view_using_ref") @use_profile('snowflake') def test__snowflake__simple_reference(self): @@ -52,7 +64,7 @@ def test__snowflake__simple_reference(self): self.run_sql_file("test/integration/003_simple_reference_test/seed.sql") results = self.run_dbt() - self.assertEqual(len(results), 7) + self.assertEqual(len(results), 8) # Copies should match self.assertManyTablesEqual( @@ -64,7 +76,7 @@ def test__snowflake__simple_reference(self): "test/integration/003_simple_reference_test/update.sql") results = self.run_dbt() - self.assertEqual(len(results), 7) + self.assertEqual(len(results), 8) self.assertManyTablesEqual( ["SEED", "INCREMENTAL_COPY", "MATERIALIZED_COPY", "VIEW_COPY"],