@@ -1074,7 +1074,8 @@ update_stmt
10741074 t :table_ref_list __
10751075 KW_SET __
10761076 l :set_list __
1077- w :where_clause ? {
1077+ w :where_clause ? __
1078+ r :returning_stmt ? {
10781079 if (t) t .forEach (tableInfo => {
10791080 const { db , as , table } = tableInfo
10801081 tableList .add (` update::${ db} ::${ table} ` )
@@ -1089,7 +1090,8 @@ update_stmt
10891090 type: ' update' ,
10901091 table: t,
10911092 set: l,
1092- where: w
1093+ where: w,
1094+ returning: r,
10931095 }
10941096 };
10951097 }
@@ -1137,7 +1139,13 @@ set_item
11371139 = tbl :(ident __ DOT )? __ c :column __ '=' __ v :additive_expr {
11381140 return { column: c, value: v, table: tbl && tbl[0 ] };
11391141 }
1140-
1142+ returning_stmt
1143+ = k :KW_RETURNING __ c :column_ref_list {
1144+ return {
1145+ type: k && k .toLowerCase () || ' returning' ,
1146+ columns: c
1147+ }
1148+ }
11411149insert_value_clause
11421150 = value_clause
11431151 / select_stmt_nake
@@ -1155,7 +1163,8 @@ replace_insert_stmt
11551163 KW_INTO ? __
11561164 t :table_name __
11571165 p :insert_partition ? __ LPAREN __ c :column_list __ RPAREN __
1158- v :insert_value_clause {
1166+ v :insert_value_clause __
1167+ r :returning_stmt ? {
11591168 if (t) {
11601169 tableList .add (` insert::${ t .db } ::${ t .table } ` )
11611170 t .as = null
@@ -1173,6 +1182,7 @@ replace_insert_stmt
11731182 columns: c,
11741183 values: v,
11751184 partition: p,
1185+ returning: r,
11761186 }
11771187 };
11781188 }
@@ -1182,7 +1192,8 @@ insert_no_columns_stmt
11821192 KW_INTO __
11831193 t :table_name __
11841194 p :insert_partition ? __
1185- v :insert_value_clause {
1195+ v :insert_value_clause __
1196+ r :returning_stmt ? {
11861197 if (t) {
11871198 tableList .add (` insert::${ t .db } ::${ t .table } ` )
11881199 columnList .add (` insert::${ t .table } ::(.*)` );
@@ -1197,6 +1208,7 @@ insert_no_columns_stmt
11971208 columns: null ,
11981209 values: v,
11991210 partition: p,
1211+ returning: r,
12001212 }
12011213 };
12021214 }
@@ -1783,6 +1795,7 @@ KW_DELETE = "DELETE"i !ident_start
17831795KW_INSERT = "INSERT" i ! ident_start
17841796KW_RECURSIVE = "RECURSIVE" ! ident_start
17851797KW_REPLACE = "REPLACE" i ! ident_start
1798+ KW_RETURNING = "RETURNING" i ! ident_start { return ' RETURNING' }
17861799KW_RENAME = "RENAME" i ! ident_start
17871800KW_IGNORE = "IGNORE" i ! ident_start
17881801KW_EXPLAIN = "EXPLAIN" i ! ident_start
0 commit comments