@@ -328,6 +328,10 @@ def test_join_with_trivial_predicate(awards_players, predicate, how, pandas_valu
328
328
assert len (result ) == len (expected )
329
329
330
330
331
+ @pytest .mark .notimpl (
332
+ ["druid" ], raises = sa .exc .NoSuchTableError , reason = "`win` table isn't loaded"
333
+ )
334
+ @pytest .mark .notimpl (["flink" ], reason = "`win` table isn't loaded" )
331
335
@pytest .mark .parametrize (
332
336
("how" , "nrows" ),
333
337
[
@@ -349,17 +353,30 @@ def test_join_with_trivial_predicate(awards_players, predicate, how, pandas_valu
349
353
),
350
354
],
351
355
)
352
- @pytest .mark .notimpl (
353
- ["druid" ], raises = sa .exc .NoSuchTableError , reason = "`win` table isn't loaded"
356
+ @pytest .mark .parametrize (
357
+ ("gen_right" , "keys" ),
358
+ [
359
+ param (
360
+ lambda left : left .filter (lambda t : t .x == 1 ).select (y = lambda t : t .x ),
361
+ [("x" , "y" )],
362
+ id = "non_overlapping" ,
363
+ marks = [pytest .mark .notyet (["polars" ], reason = "renaming fails" )],
364
+ ),
365
+ param (
366
+ lambda left : left .filter (lambda t : t .x == 1 ),
367
+ "x" ,
368
+ id = "overlapping" ,
369
+ marks = [pytest .mark .notimpl (["pyspark" ], reason = "overlapping columns" )],
370
+ ),
371
+ ],
354
372
)
355
- @pytest .mark .notimpl (["flink" ], reason = "`win` table isn't loaded" )
356
- def test_outer_join_nullability (backend , how , nrows ):
373
+ def test_outer_join_nullability (backend , how , nrows , gen_right , keys ):
357
374
win = backend .win
358
375
left = win .select (x = lambda t : t .x .cast (t .x .type ().copy (nullable = False ))).filter (
359
376
lambda t : t .x .isin ((1 , 2 ))
360
377
)
361
- right = left . filter ( lambda t : t . x == 1 )
362
- expr = left .join (right , "x" , how = how )
378
+ right = gen_right ( left )
379
+ expr = left .join (right , keys , how = how )
363
380
assert all (typ .nullable for typ in expr .schema ().types )
364
381
365
382
result = expr .to_pyarrow ()
0 commit comments