exec-ddl
CREATE TABLE abcde (
    a INT NOT NULL,
    b INT,
    c INT NOT NULL DEFAULT (10),
    d INT AS (b + c + 1) STORED,
    "e:write-only" INT NOT NULL
)
----
TABLE abcde
 ├── a int not null
 ├── b int
 ├── c int not null
 ├── d int
 ├── rowid int not null (hidden)
 ├── e int not null (mutation)
 └── INDEX primary
      └── rowid int not null (hidden)

exec-ddl
CREATE TABLE xyz (
    x TEXT PRIMARY KEY,
    y INT8 NOT NULL,
    z FLOAT8
)
----
TABLE xyz
 ├── x string not null
 ├── y int not null
 ├── z float
 └── INDEX primary
      └── x string not null

# Properties with no RETURNING clause.
build
DELETE FROM abcde WHERE a=1
----
delete abcde
 ├── columns: <none>
 ├── fetch columns: a:7(int) b:8(int) c:9(int) d:10(int) rowid:11(int) e:12(int)
 ├── cardinality: [0 - 0]
 ├── side-effects, mutations
 └── select
      ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
      ├── key: (11)
      ├── fd: ()-->(7), (11)-->(8-10,12)
      ├── prune: (8-12)
      ├── interesting orderings: (+11)
      ├── scan abcde
      │    ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
      │    ├── key: (11)
      │    ├── fd: (11)-->(7-10,12)
      │    ├── prune: (7-12)
      │    └── interesting orderings: (+11)
      └── filters
           └── eq [type=bool, outer=(7), constraints=(/7: [/1 - /1]; tight), fd=()-->(7)]
                ├── variable: a [type=int]
                └── const: 1 [type=int]

# Properties with RETURNING clause.
build
DELETE FROM abcde WHERE a=1 RETURNING *
----
project
 ├── columns: a:1(int!null) b:2(int) c:3(int!null) d:4(int)
 ├── side-effects, mutations
 ├── fd: ()-->(1)
 ├── prune: (1-4)
 └── delete abcde
      ├── columns: a:1(int!null) b:2(int) c:3(int!null) d:4(int) rowid:5(int!null)
      ├── fetch columns: a:7(int) b:8(int) c:9(int) d:10(int) rowid:11(int) e:12(int)
      ├── side-effects, mutations
      ├── key: (5)
      ├── fd: ()-->(1), (5)-->(2-4)
      └── select
           ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
           ├── key: (11)
           ├── fd: ()-->(7), (11)-->(8-10,12)
           ├── prune: (8-12)
           ├── interesting orderings: (+11)
           ├── scan abcde
           │    ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
           │    ├── key: (11)
           │    ├── fd: (11)-->(7-10,12)
           │    ├── prune: (7-12)
           │    └── interesting orderings: (+11)
           └── filters
                └── eq [type=bool, outer=(7), constraints=(/7: [/1 - /1]; tight), fd=()-->(7)]
                     ├── variable: a [type=int]
                     └── const: 1 [type=int]

# Input is cardinality 0-1 expression.
build
DELETE FROM abcde WHERE rowid=1 RETURNING *
----
project
 ├── columns: a:1(int!null) b:2(int) c:3(int!null) d:4(int)
 ├── cardinality: [0 - 1]
 ├── side-effects, mutations
 ├── key: ()
 ├── fd: ()-->(1-4)
 ├── prune: (1-4)
 └── delete abcde
      ├── columns: a:1(int!null) b:2(int) c:3(int!null) d:4(int) rowid:5(int!null)
      ├── fetch columns: a:7(int) b:8(int) c:9(int) d:10(int) rowid:11(int) e:12(int)
      ├── cardinality: [0 - 1]
      ├── side-effects, mutations
      ├── key: ()
      ├── fd: ()-->(1-5)
      └── select
           ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
           ├── cardinality: [0 - 1]
           ├── key: ()
           ├── fd: ()-->(7-12)
           ├── prune: (7-10,12)
           ├── interesting orderings: (+11)
           ├── scan abcde
           │    ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
           │    ├── key: (11)
           │    ├── fd: (11)-->(7-10,12)
           │    ├── prune: (7-12)
           │    └── interesting orderings: (+11)
           └── filters
                └── eq [type=bool, outer=(11), constraints=(/11: [/1 - /1]; tight), fd=()-->(11)]
                     ├── variable: rowid [type=int]
                     └── const: 1 [type=int]

# Filter FD set.
build
DELETE FROM abcde WHERE b=c RETURNING *;
----
project
 ├── columns: a:1(int!null) b:2(int!null) c:3(int!null) d:4(int)
 ├── side-effects, mutations
 ├── fd: (2)==(3), (3)==(2)
 ├── prune: (1-4)
 └── delete abcde
      ├── columns: a:1(int!null) b:2(int!null) c:3(int!null) d:4(int) rowid:5(int!null)
      ├── fetch columns: a:7(int) b:8(int) c:9(int) d:10(int) rowid:11(int) e:12(int)
      ├── side-effects, mutations
      ├── key: (5)
      ├── fd: (2)==(3), (3)==(2), (5)-->(1-4)
      └── select
           ├── columns: a:7(int!null) b:8(int!null) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
           ├── key: (11)
           ├── fd: (11)-->(7-10,12), (8)==(9), (9)==(8)
           ├── prune: (7,10-12)
           ├── interesting orderings: (+11)
           ├── scan abcde
           │    ├── columns: a:7(int!null) b:8(int) c:9(int!null) d:10(int) rowid:11(int!null) e:12(int)
           │    ├── key: (11)
           │    ├── fd: (11)-->(7-10,12)
           │    ├── prune: (7-12)
           │    └── interesting orderings: (+11)
           └── filters
                └── eq [type=bool, outer=(8,9), constraints=(/8: (/NULL - ]; /9: (/NULL - ]), fd=(8)==(9), (9)==(8)]
                     ├── variable: b [type=int]
                     └── variable: c [type=int]
