@@ -395,6 +395,54 @@ fn join_with_ambiguous_column() {
395
395
quick_test ( sql, expected) ;
396
396
}
397
397
398
+ #[ test]
399
+ fn natural_join ( ) {
400
+ let sql = "SELECT * FROM lineitem a NATURAL JOIN lineitem b" ;
401
+ let expected = "Projection: a.l_item_id, a.l_description, a.price\
402
+ \n Inner Join: Using a.l_item_id = b.l_item_id, a.l_description = b.l_description, a.price = b.price\
403
+ \n SubqueryAlias: a\
404
+ \n TableScan: lineitem\
405
+ \n SubqueryAlias: b\
406
+ \n TableScan: lineitem";
407
+ quick_test ( sql, expected) ;
408
+ }
409
+
410
+ #[ test]
411
+ fn natural_left_join ( ) {
412
+ let sql = "SELECT l_item_id FROM lineitem a NATURAL LEFT JOIN lineitem b" ;
413
+ let expected = "Projection: a.l_item_id\
414
+ \n Left Join: Using a.l_item_id = b.l_item_id, a.l_description = b.l_description, a.price = b.price\
415
+ \n SubqueryAlias: a\
416
+ \n TableScan: lineitem\
417
+ \n SubqueryAlias: b\
418
+ \n TableScan: lineitem";
419
+ quick_test ( sql, expected) ;
420
+ }
421
+
422
+ #[ test]
423
+ fn natural_right_join ( ) {
424
+ let sql = "SELECT l_item_id FROM lineitem a NATURAL RIGHT JOIN lineitem b" ;
425
+ let expected = "Projection: a.l_item_id\
426
+ \n Right Join: Using a.l_item_id = b.l_item_id, a.l_description = b.l_description, a.price = b.price\
427
+ \n SubqueryAlias: a\
428
+ \n TableScan: lineitem\
429
+ \n SubqueryAlias: b\
430
+ \n TableScan: lineitem";
431
+ quick_test ( sql, expected) ;
432
+ }
433
+
434
+ #[ test]
435
+ fn natural_join_no_common_becomes_cross_join ( ) {
436
+ let sql = "SELECT * FROM person a NATURAL JOIN lineitem b" ;
437
+ let expected = "Projection: a.id, a.first_name, a.last_name, a.age, a.state, a.salary, a.birth_date, a.😀, b.l_item_id, b.l_description, b.price\
438
+ \n CrossJoin:\
439
+ \n SubqueryAlias: a\
440
+ \n TableScan: person\
441
+ \n SubqueryAlias: b\
442
+ \n TableScan: lineitem";
443
+ quick_test ( sql, expected) ;
444
+ }
445
+
398
446
#[ test]
399
447
fn using_join_multiple_keys ( ) {
400
448
let sql = "SELECT * FROM person a join person b using (id, age)" ;
0 commit comments