@@ -9948,3 +9948,40 @@ def unimportant_testing_macro(evaluator, *projections):
99489948 {"selector" : "bla" , "bla_variable" : 1 , "baz_variable" : 2 }
99499949 )
99509950 assert m .python_env .get (c .SQLMESH_BLUEPRINT_VARS ) == Executable .value ({"selector" : "baz" })
9951+
9952+
9953+ def test_extract_schema_in_post_statement (tmp_path : Path ) -> None :
9954+ init_example_project (tmp_path , dialect = "duckdb" , template = ProjectTemplate .EMPTY )
9955+
9956+ config = Config (model_defaults = ModelDefaultsConfig (dialect = "duckdb" ))
9957+
9958+ model1 = tmp_path / "models" / "parent_model.sql"
9959+ model1 .parent .mkdir (parents = True , exist_ok = True )
9960+ model1 .write_text ("MODEL (name x); SELECT 1 AS c" )
9961+
9962+ model2 = tmp_path / "models" / "child_model.sql"
9963+ model2 .parent .mkdir (parents = True , exist_ok = True )
9964+ model2 .write_text (
9965+ """
9966+ MODEL (name y);
9967+ SELECT c FROM x;
9968+ ON_VIRTUAL_UPDATE_BEGIN;
9969+ @check_schema('y');
9970+ ON_VIRTUAL_UPDATE_END;
9971+ """
9972+ )
9973+
9974+ check_schema = tmp_path / "macros/check_schema.py"
9975+ check_schema .parent .mkdir (parents = True , exist_ok = True )
9976+ check_schema .write_text ("""
9977+ from sqlglot import exp
9978+ from sqlmesh import macro
9979+
9980+ @macro()
9981+ def check_schema(evaluator, model_name: str):
9982+ if evaluator.runtime_stage != 'loading':
9983+ assert evaluator.columns_to_types(model_name) == {"c": exp.DataType.build("INT")}
9984+ """ )
9985+
9986+ context = Context (paths = tmp_path , config = config )
9987+ context .plan (no_prompts = True , auto_apply = True )
0 commit comments