@@ -1529,57 +1529,38 @@ impl Parser {
1529
1529
None => return Ok ( joins) ,
1530
1530
} ;
1531
1531
1532
- let join = match & self . peek_token ( ) {
1533
- Some ( Token :: SQLWord ( kw) ) if kw. keyword == "INNER" => {
1534
- self . next_token ( ) ;
1535
- self . expect_keyword ( "JOIN" ) ?;
1536
- Join {
1537
- relation : self . parse_table_factor ( ) ?,
1538
- join_operator : JoinOperator :: Inner ( self . parse_join_constraint ( natural) ?) ,
1539
- }
1540
- }
1541
- Some ( Token :: SQLWord ( kw) ) if kw. keyword == "JOIN" => {
1542
- self . next_token ( ) ;
1543
- Join {
1544
- relation : self . parse_table_factor ( ) ?,
1545
- join_operator : JoinOperator :: Inner ( self . parse_join_constraint ( natural) ?) ,
1546
- }
1547
- }
1548
- Some ( Token :: SQLWord ( kw) ) if kw. keyword == "LEFT" => {
1549
- self . next_token ( ) ;
1550
- let _ = self . parse_keyword ( "OUTER" ) ;
1551
- self . expect_keyword ( "JOIN" ) ?;
1552
- Join {
1553
- relation : self . parse_table_factor ( ) ?,
1554
- join_operator : JoinOperator :: LeftOuter (
1555
- self . parse_join_constraint ( natural) ?,
1556
- ) ,
1557
- }
1558
- }
1559
- Some ( Token :: SQLWord ( kw) ) if kw. keyword == "RIGHT" => {
1560
- self . next_token ( ) ;
1561
- let _ = self . parse_keyword ( "OUTER" ) ;
1532
+ let peek_keyword = if let Some ( Token :: SQLWord ( kw) ) = self . peek_token ( ) {
1533
+ kw. keyword
1534
+ } else {
1535
+ String :: default ( )
1536
+ } ;
1537
+
1538
+ let join_operator_type = match peek_keyword. as_ref ( ) {
1539
+ "INNER" | "JOIN" => {
1540
+ let _ = self . parse_keyword ( "INNER" ) ;
1562
1541
self . expect_keyword ( "JOIN" ) ?;
1563
- Join {
1564
- relation : self . parse_table_factor ( ) ?,
1565
- join_operator : JoinOperator :: RightOuter (
1566
- self . parse_join_constraint ( natural) ?,
1567
- ) ,
1568
- }
1542
+ JoinOperator :: Inner
1569
1543
}
1570
- Some ( Token :: SQLWord ( kw ) ) if kw . keyword == "FULL" => {
1571
- self . next_token ( ) ;
1544
+ kw @ "LEFT" | kw @ "RIGHT" | kw @ "FULL" => {
1545
+ let _ = self . next_token ( ) ;
1572
1546
let _ = self . parse_keyword ( "OUTER" ) ;
1573
1547
self . expect_keyword ( "JOIN" ) ?;
1574
- Join {
1575
- relation : self . parse_table_factor ( ) ? ,
1576
- join_operator : JoinOperator :: FullOuter (
1577
- self . parse_join_constraint ( natural ) ? ,
1578
- ) ,
1548
+ match kw {
1549
+ "LEFT" => JoinOperator :: LeftOuter ,
1550
+ "RIGHT" => JoinOperator :: RightOuter ,
1551
+ "FULL" => JoinOperator :: FullOuter ,
1552
+ _ => unreachable ! ( ) ,
1579
1553
}
1580
1554
}
1581
1555
_ => break ,
1582
1556
} ;
1557
+ let relation = self . parse_table_factor ( ) ?;
1558
+ let join_constraint = self . parse_join_constraint ( natural) ?;
1559
+ let join = Join {
1560
+ relation,
1561
+ join_operator : join_operator_type ( join_constraint) ,
1562
+ } ;
1563
+
1583
1564
joins. push ( join) ;
1584
1565
}
1585
1566
0 commit comments