@@ -395,6 +395,54 @@ fn join_with_ambiguous_column() {
395395 quick_test ( sql, expected) ;
396396}
397397
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+
398446#[ test]
399447fn using_join_multiple_keys ( ) {
400448 let sql = "SELECT * FROM person a join person b using (id, age)" ;
0 commit comments