@@ -266,6 +266,70 @@ def test_model_union_query(sushi_context, assert_exp_eq):
266266 )
267267
268268
269+ @time_machine .travel ("1996-02-10 00:00:00 UTC" )
270+ def test_model_union_if_query (sushi_context , assert_exp_eq ):
271+ @macro ()
272+ def get_date (evaluator ):
273+ from sqlmesh .utils .date import now
274+
275+ return f"'{ now ().date ()} '"
276+
277+ expressions = d .parse (
278+ """
279+ MODEL (
280+ name sushi.test_1,
281+ kind FULL,
282+ );
283+
284+ @union_if(@get_date() == '1996-02-10', 'all', sushi.marketing, sushi.marketing)
285+ """
286+ )
287+ sushi_context .upsert_model (load_sql_based_model (expressions , default_catalog = "memory" ))
288+ assert_exp_eq (
289+ sushi_context .get_model ("sushi.test_1" ).render_query (),
290+ """SELECT
291+ CAST("marketing"."customer_id" AS INT) AS "customer_id",
292+ CAST("marketing"."status" AS TEXT) AS "status",
293+ CAST("marketing"."updated_at" AS TIMESTAMP) AS "updated_at",
294+ CAST("marketing"."valid_from" AS TIMESTAMP) AS "valid_from",
295+ CAST("marketing"."valid_to" AS TIMESTAMP) AS "valid_to"
296+ FROM "memory"."sushi"."marketing" AS "marketing"
297+ UNION ALL
298+ SELECT
299+ CAST("marketing"."customer_id" AS INT) AS "customer_id",
300+ CAST("marketing"."status" AS TEXT) AS "status",
301+ CAST("marketing"."updated_at" AS TIMESTAMP) AS "updated_at",
302+ CAST("marketing"."valid_from" AS TIMESTAMP) AS "valid_from",
303+ CAST("marketing"."valid_to" AS TIMESTAMP) AS "valid_to"
304+ FROM "memory"."sushi"."marketing" AS "marketing"
305+ """ ,
306+ )
307+
308+ expressions = d .parse (
309+ """
310+ MODEL (
311+ name sushi.test_2,
312+ kind FULL,
313+ );
314+
315+ @union_if(@get_date() > '1996-02-10', 'all', sushi.marketing, sushi.marketing)
316+ """
317+ )
318+ sushi_context .upsert_model (load_sql_based_model (expressions , default_catalog = "memory" ))
319+ assert_exp_eq (
320+ sushi_context .get_model ("sushi.test_2" ).render_query (),
321+ """
322+ SELECT
323+ CAST("marketing"."customer_id" AS INT) AS "customer_id",
324+ CAST("marketing"."status" AS TEXT) AS "status",
325+ CAST("marketing"."updated_at" AS TIMESTAMP) AS "updated_at",
326+ CAST("marketing"."valid_from" AS TIMESTAMP) AS "valid_from",
327+ CAST("marketing"."valid_to" AS TIMESTAMP) AS "valid_to"
328+ FROM "memory"."sushi"."marketing" AS "marketing"
329+ """ ,
330+ )
331+
332+
269333def test_model_validation_union_query ():
270334 expressions = d .parse (
271335 """
0 commit comments