exec-ddl
CREATE TABLE a (x INT PRIMARY KEY, y INT)
----
TABLE a
 ├── x int not null
 ├── y int
 └── INDEX primary
      └── x int not null

exec-ddl
CREATE TABLE t.b (x INT, y FLOAT)
----
TABLE b
 ├── x int
 ├── y float
 ├── rowid int not null (hidden)
 └── INDEX primary
      └── rowid int not null (hidden)

# Scan operator.
opt
SELECT a.y, a.x, a.y y2 FROM a
----
scan a
 └── columns: y:2(int) x:1(int!null) y2:2(int)

# Select operator.
opt
SELECT a.y, a.x, a.y y2 FROM a WHERE y=1
----
select
 ├── columns: y:2(int!null) x:1(int!null) y2:2(int!null)
 ├── scan a
 │    └── columns: x:1(int!null) y:2(int)
 └── filters
      └── y = 1 [type=bool]

# Project operator.
opt
SELECT 1+a.y AS plus, a.x FROM a
----
project
 ├── columns: plus:3(int) x:1(int!null)
 ├── scan a
 │    └── columns: x:1(int!null) y:2(int)
 └── projections
      └── y + 1 [type=int]

# Join operator.
opt
SELECT b.x, rowid, a.y, a.x, a.y y2, b.y FROM a, b
----
inner-join
 ├── columns: x:3(int) rowid:5(int!null) y:2(int) x:1(int!null) y2:2(int) y:4(float)
 ├── scan a
 │    └── columns: a.x:1(int!null) a.y:2(int)
 ├── scan b
 │    └── columns: b.x:3(int) b.y:4(float) rowid:5(int!null)
 └── filters (true)

# Groupby operator.
opt
SELECT max(y), y, y, x FROM a GROUP BY a.x, a.y
----
group-by
 ├── columns: max:3(int) y:2(int) y:2(int) x:1(int!null)
 ├── grouping columns: x:1(int!null)
 ├── internal-ordering: +1
 ├── scan a
 │    ├── columns: x:1(int!null) y:2(int)
 │    └── ordering: +1
 └── aggregations
      ├── max [type=int]
      │    └── variable: y [type=int]
      └── const-agg [type=int]
           └── variable: y [type=int]
