File tree Expand file tree Collapse file tree 3 files changed +211
-3
lines changed
Expand file tree Collapse file tree 3 files changed +211
-3
lines changed Original file line number Diff line number Diff line change @@ -3456,7 +3456,9 @@ fn join(p: &mut Parser<'_>) {
34563456 if !opt_from_item ( p) {
34573457 p. error ( "expected from_item" ) ;
34583458 }
3459- if p. at ( ON_KW ) && !p. nth_at ( 1 , CONFLICT_KW ) {
3459+ // need to check that we're not actually at the on_conflict clause in an
3460+ // insert/update statement
3461+ if p. at ( ON_KW ) && !( p. nth_at ( 1 , CONFLICT_KW ) && matches ! ( p. nth( 2 ) , DO_KW | ON_KW | L_PAREN ) ) {
34603462 on_clause ( p) ;
34613463 } else if p. at ( USING_KW ) {
34623464 join_using_clause ( p) ;
Original file line number Diff line number Diff line change @@ -99,4 +99,23 @@ INSERT INTO t
9999SELECT *
100100FROM t
101101CROSS JOIN f
102- ON CONFLICT DO NOTHING;
102+ ON CONFLICT
103+ DO NOTHING;
104+
105+ insert into t
106+ select * from u join i
107+ on conflict = conflict
108+ on conflict
109+ do nothing;
110+
111+ insert into t
112+ select * from u join i
113+ on conflict = conflict
114+ on conflict (foo)
115+ do nothing;
116+
117+ insert into t
118+ select * from u join i
119+ on conflict = conflict
120+ on conflict
121+ on constraint temporal_rng_pk do nothing;
Original file line number Diff line number Diff line change @@ -1508,10 +1508,197 @@ SOURCE_FILE
15081508 ON_KW " ON"
15091509 WHITESPACE " "
15101510 CONFLICT_KW " CONFLICT"
1511- WHITESPACE " "
1511+ WHITESPACE " \n "
15121512 CONFLICT_DO_NOTHING
15131513 DO_KW " DO"
15141514 WHITESPACE " "
15151515 NOTHING_KW " NOTHING"
15161516 SEMICOLON " ;"
1517+ WHITESPACE " \n\n "
1518+ INSERT
1519+ INSERT_KW " insert"
1520+ WHITESPACE " "
1521+ INTO_KW " into"
1522+ WHITESPACE " "
1523+ PATH
1524+ PATH_SEGMENT
1525+ NAME_REF
1526+ IDENT " t"
1527+ WHITESPACE " \n "
1528+ SELECT
1529+ SELECT_CLAUSE
1530+ SELECT_KW " select"
1531+ WHITESPACE " "
1532+ TARGET_LIST
1533+ TARGET
1534+ STAR " *"
1535+ WHITESPACE " "
1536+ FROM_CLAUSE
1537+ FROM_KW " from"
1538+ WHITESPACE " "
1539+ JOIN_EXPR
1540+ FROM_ITEM
1541+ NAME_REF
1542+ IDENT " u"
1543+ WHITESPACE " "
1544+ JOIN
1545+ JOIN_INNER
1546+ JOIN_KW " join"
1547+ WHITESPACE " "
1548+ FROM_ITEM
1549+ NAME_REF
1550+ IDENT " i"
1551+ WHITESPACE " \n "
1552+ ON_CLAUSE
1553+ ON_KW " on"
1554+ WHITESPACE " "
1555+ BIN_EXPR
1556+ NAME_REF
1557+ CONFLICT_KW " conflict"
1558+ WHITESPACE " "
1559+ EQ " ="
1560+ WHITESPACE " "
1561+ NAME_REF
1562+ CONFLICT_KW " conflict"
1563+ WHITESPACE " \n "
1564+ ON_CONFLICT_CLAUSE
1565+ ON_KW " on"
1566+ WHITESPACE " "
1567+ CONFLICT_KW " conflict"
1568+ WHITESPACE " \n "
1569+ CONFLICT_DO_NOTHING
1570+ DO_KW " do"
1571+ WHITESPACE " "
1572+ NOTHING_KW " nothing"
1573+ SEMICOLON " ;"
1574+ WHITESPACE " \n\n "
1575+ INSERT
1576+ INSERT_KW " insert"
1577+ WHITESPACE " "
1578+ INTO_KW " into"
1579+ WHITESPACE " "
1580+ PATH
1581+ PATH_SEGMENT
1582+ NAME_REF
1583+ IDENT " t"
1584+ WHITESPACE " \n "
1585+ SELECT
1586+ SELECT_CLAUSE
1587+ SELECT_KW " select"
1588+ WHITESPACE " "
1589+ TARGET_LIST
1590+ TARGET
1591+ STAR " *"
1592+ WHITESPACE " "
1593+ FROM_CLAUSE
1594+ FROM_KW " from"
1595+ WHITESPACE " "
1596+ JOIN_EXPR
1597+ FROM_ITEM
1598+ NAME_REF
1599+ IDENT " u"
1600+ WHITESPACE " "
1601+ JOIN
1602+ JOIN_INNER
1603+ JOIN_KW " join"
1604+ WHITESPACE " "
1605+ FROM_ITEM
1606+ NAME_REF
1607+ IDENT " i"
1608+ WHITESPACE " \n "
1609+ ON_CLAUSE
1610+ ON_KW " on"
1611+ WHITESPACE " "
1612+ BIN_EXPR
1613+ NAME_REF
1614+ CONFLICT_KW " conflict"
1615+ WHITESPACE " "
1616+ EQ " ="
1617+ WHITESPACE " "
1618+ NAME_REF
1619+ CONFLICT_KW " conflict"
1620+ WHITESPACE " \n "
1621+ ON_CONFLICT_CLAUSE
1622+ ON_KW " on"
1623+ WHITESPACE " "
1624+ CONFLICT_KW " conflict"
1625+ WHITESPACE " "
1626+ CONFLICT_ON_INDEX
1627+ CONFLICT_INDEX_ITEM_LIST
1628+ L_PAREN " ("
1629+ CONFLICT_INDEX_ITEM
1630+ NAME_REF
1631+ IDENT " foo"
1632+ R_PAREN " )"
1633+ WHITESPACE " \n "
1634+ CONFLICT_DO_NOTHING
1635+ DO_KW " do"
1636+ WHITESPACE " "
1637+ NOTHING_KW " nothing"
1638+ SEMICOLON " ;"
1639+ WHITESPACE " \n\n "
1640+ INSERT
1641+ INSERT_KW " insert"
1642+ WHITESPACE " "
1643+ INTO_KW " into"
1644+ WHITESPACE " "
1645+ PATH
1646+ PATH_SEGMENT
1647+ NAME_REF
1648+ IDENT " t"
1649+ WHITESPACE " \n "
1650+ SELECT
1651+ SELECT_CLAUSE
1652+ SELECT_KW " select"
1653+ WHITESPACE " "
1654+ TARGET_LIST
1655+ TARGET
1656+ STAR " *"
1657+ WHITESPACE " "
1658+ FROM_CLAUSE
1659+ FROM_KW " from"
1660+ WHITESPACE " "
1661+ JOIN_EXPR
1662+ FROM_ITEM
1663+ NAME_REF
1664+ IDENT " u"
1665+ WHITESPACE " "
1666+ JOIN
1667+ JOIN_INNER
1668+ JOIN_KW " join"
1669+ WHITESPACE " "
1670+ FROM_ITEM
1671+ NAME_REF
1672+ IDENT " i"
1673+ WHITESPACE " \n "
1674+ ON_CLAUSE
1675+ ON_KW " on"
1676+ WHITESPACE " "
1677+ BIN_EXPR
1678+ NAME_REF
1679+ CONFLICT_KW " conflict"
1680+ WHITESPACE " "
1681+ EQ " ="
1682+ WHITESPACE " "
1683+ NAME_REF
1684+ CONFLICT_KW " conflict"
1685+ WHITESPACE " \n "
1686+ ON_CONFLICT_CLAUSE
1687+ ON_KW " on"
1688+ WHITESPACE " "
1689+ CONFLICT_KW " conflict"
1690+ WHITESPACE " \n "
1691+ CONFLICT_ON_CONSTRAINT
1692+ ON_KW " on"
1693+ WHITESPACE " "
1694+ CONSTRAINT_KW " constraint"
1695+ WHITESPACE " "
1696+ NAME_REF
1697+ IDENT " temporal_rng_pk"
1698+ WHITESPACE " "
1699+ CONFLICT_DO_NOTHING
1700+ DO_KW " do"
1701+ WHITESPACE " "
1702+ NOTHING_KW " nothing"
1703+ SEMICOLON " ;"
15171704 WHITESPACE " \n "
You can’t perform that action at this time.
0 commit comments