SQLite Forum

Crash when a RETURNING clause refers to a table in UPDATE FROM
Login
FYI:

```
SQLite version 3.36.0 2021-03-30 02:12:20
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table x(x);
sqlite> insert into x values (1) returning old.*;
Error: RETURNING may not use "TABLE.*" wildcards
sqlite> insert into x values (1) returning old.rowid, new.rowid;
┌───────────┬───────────┐
│ old.rowid │ new.rowid │
├───────────┼───────────┤
│ 1         │ 1         │
└───────────┴───────────┘
sqlite> insert into x values (1) returning old.rowid, old.x, new.rowid, new.x, *;
┌───────────┬───────┬───────────┬───────┬───┐
│ old.rowid │ old.x │ new.rowid │ new.x │ x │
├───────────┼───────┼───────────┼───────┼───┤
│ 2         │ 1     │ 2         │ 1     │ 1 │
└───────────┴───────┴───────────┴───────┴───┘
sqlite> update x set x = 5 where rowid = 2 returning old.rowid, old.x, new.rowid, new.x, *;
┌───────────┬───────┬───────────┬───────┬───┐
│ old.rowid │ old.x │ new.rowid │ new.x │ x │
├───────────┼───────┼───────────┼───────┼───┤
│ 2         │ 1     │ 2         │ 5     │ 5 │
└───────────┴───────┴───────────┴───────┴───┘
sqlite> insert into x (rowid, x) values (1,10) on conflict (rowid) do update set x = excluded.x returning old.rowid, new.rowid, old.x, new.x, *;
┌───────────┬───────────┬───────┬───────┬────┐
│ old.rowid │ new.rowid │ old.x │ new.x │ x  │
├───────────┼───────────┼───────┼───────┼────┤
│ 1         │ 1         │ 10    │ 10    │ 10 │
└───────────┴───────────┴───────┴───────┴────┘
sqlite> select rowid, x from x;
┌───────┬────┐
│ rowid │ x  │
├───────┼────┤
│ 1     │ 10 │
│ 2     │ 5  │
└───────┴────┘
sqlite> update x set x=20 where rowid=1 returning old.x, new.x;
┌───────┬───────┐
│ old.x │ new.x │
├───────┼───────┤
│ 10    │ 20    │
└───────┴───────┘
sqlite>
```
This corresponds to checkin [3039bcaff9] on trunk.