@@ -96,6 +96,12 @@ def test_default_arg_coercion(
9696 def test_select_macro (evaluator ):
9797 return "SELECT 1 AS col"
9898
99+ @macro ()
100+ def test_literal_type (evaluator , a : t .Literal ["test_literal_a" , "test_literal_b" , 1 , True ]):
101+ if isinstance (a , exp .Expression ):
102+ raise SQLMeshError ("Coercion failed" )
103+ return f"'{ a } '"
104+
99105 return MacroEvaluator (
100106 "hive" ,
101107 {"test" : Executable (name = "test" , payload = "def test(_):\n return 'test'" )},
@@ -1087,3 +1093,33 @@ def test_macro_with_spaces():
10871093 ("d.@z" , 'd.a."b c"' ),
10881094 ):
10891095 assert evaluator .transform (parse_one (sql )).sql () == expected
1096+
1097+
1098+ def test_macro_coerce_literal_type (macro_evaluator ):
1099+ expression = d .parse_one ("@TEST_LITERAL_TYPE('test_literal_a')" )
1100+ assert macro_evaluator .transform (expression ).sql () == "'test_literal_a'"
1101+
1102+ expression = d .parse_one ("@TEST_LITERAL_TYPE('test_literal_b')" )
1103+ assert macro_evaluator .transform (expression ).sql () == "'test_literal_b'"
1104+
1105+ expression = d .parse_one ("@TEST_LITERAL_TYPE(1)" )
1106+ assert macro_evaluator .transform (expression ).sql () == "'1'"
1107+
1108+ expression = d .parse_one ("@TEST_LITERAL_TYPE(True)" )
1109+ assert macro_evaluator .transform (expression ).sql () == "'True'"
1110+
1111+ expression = d .parse_one ("@TEST_LITERAL_TYPE('test_literal_c')" )
1112+ with pytest .raises (MacroEvalError , match = ".*Coercion failed" ):
1113+ macro_evaluator .transform (expression )
1114+
1115+ expression = d .parse_one ("@TEST_LITERAL_TYPE(2)" )
1116+ with pytest .raises (MacroEvalError , match = ".*Coercion failed" ):
1117+ macro_evaluator .transform (expression )
1118+
1119+ expression = d .parse_one ("@TEST_LITERAL_TYPE(False)" )
1120+ with pytest .raises (MacroEvalError , match = ".*Coercion failed" ):
1121+ macro_evaluator .transform (expression )
1122+
1123+ expression = d .parse_one ("@TEST_LITERAL_TYPE(1.0)" )
1124+ with pytest .raises (MacroEvalError , match = ".*Coercion failed" ):
1125+ macro_evaluator .transform (expression )
0 commit comments