# LogicTest: local-opt

statement ok
CREATE TABLE uniontest (
  k INT,
  v INT
)

query TTT
EXPLAIN SELECT v FROM uniontest UNION SELECT k FROM uniontest
----
union      ·      ·
 ├── scan  ·      ·
 │         table  uniontest@primary
 │         spans  ALL
 └── scan  ·      ·
·          table  uniontest@primary
·          spans  ALL

query TTT
EXPLAIN SELECT v FROM uniontest UNION ALL SELECT k FROM uniontest
----
append     ·      ·
 ├── scan  ·      ·
 │         table  uniontest@primary
 │         spans  ALL
 └── scan  ·      ·
·          table  uniontest@primary
·          spans  ALL

# Check that EXPLAIN properly releases memory for virtual tables.
query TTT
EXPLAIN SELECT node_id FROM crdb_internal.node_build_info UNION VALUES(123)
----
union                    ·       ·
 ├── values              ·       ·
 │                       size    1 column, 1 row
 └── render              ·       ·
      └── virtual table  ·       ·
·                        source  ·

statement ok
CREATE TABLE abc (a INT, b INT, c INT)

query TTTTT
EXPLAIN (VERBOSE) (SELECT a FROM abc ORDER BY b) INTERSECT (SELECT a FROM abc ORDER BY c) ORDER BY a
----
sort                 ·         ·            (a)     +a
 │                   order     +a           ·       ·
 └── union           ·         ·            (a)     ·
      ├── render     ·         ·            (a)     ·
      │    │         render 0  a            ·       ·
      │    └── scan  ·         ·            (a, c)  ·
      │              table     abc@primary  ·       ·
      │              spans     ALL          ·       ·
      └── render     ·         ·            (a)     ·
           │         render 0  a            ·       ·
           └── scan  ·         ·            (a, b)  ·
·                    table     abc@primary  ·       ·
·                    spans     ALL          ·       ·
