# LogicTest: 5node

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

query T
EXPLAIN SELECT v FROM uniontest UNION SELECT k FROM uniontest
----
distribution: local
vectorized: true
·
• union
│
├── • scan
│     missing stats
│     table: uniontest@uniontest_pkey
│     spans: FULL SCAN
│
└── • scan
      missing stats
      table: uniontest@uniontest_pkey
      spans: FULL SCAN

query T
EXPLAIN SELECT v FROM uniontest UNION ALL SELECT k FROM uniontest
----
distribution: local
vectorized: true
·
• union all
│
├── • scan
│     missing stats
│     table: uniontest@uniontest_pkey
│     spans: FULL SCAN
│
└── • scan
      missing stats
      table: uniontest@uniontest_pkey
      spans: FULL SCAN

# Check that EXPLAIN properly releases memory for virtual tables.
query T
EXPLAIN SELECT node_id FROM crdb_internal.node_build_info UNION VALUES(123)
----
distribution: local
vectorized: true
·
• union
│
├── • virtual table
│     table: node_build_info@primary
│
└── • values
      size: 1 column, 1 row

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

query T
EXPLAIN (VERBOSE) (SELECT a FROM abc ORDER BY b) INTERSECT (SELECT a FROM abc ORDER BY c) ORDER BY a
----
distribution: local
vectorized: true
·
• sort
│ columns: (a)
│ estimated row count: 100 (missing stats)
│ order: +a
│
└── • intersect
    │ columns: (a)
    │ estimated row count: 100 (missing stats)
    │
    ├── • project
    │   │ columns: (a)
    │   │
    │   └── • scan
    │         columns: (a, b)
    │         estimated row count: 1,000 (missing stats)
    │         table: abc@abc_pkey
    │         spans: FULL SCAN
    │
    └── • project
        │ columns: (a)
        │
        └── • scan
              columns: (a, c)
              estimated row count: 1,000 (missing stats)
              table: abc@abc_pkey
              spans: FULL SCAN

# Regression test for #32723.
query T
EXPLAIN (VERBOSE) SELECT a FROM ((SELECT '' AS a , '') EXCEPT ALL (SELECT '', ''))
----
distribution: local
vectorized: true
·
• project
│ columns: (a)
│
└── • except all
    │ columns: (a, a)
    │ estimated row count: 1
    │
    ├── • project
    │   │ columns: (a, a)
    │   │
    │   └── • values
    │         columns: (a)
    │         size: 1 column, 1 row
    │         row 0, expr 0: ''
    │
    └── • project
        │ columns: ("?column?", "?column?")
        │
        └── • values
              columns: ("?column?")
              size: 1 column, 1 row
              row 0, expr 0: ''

query T
EXPLAIN (VERBOSE) ((SELECT '', '', 'x' WHERE false))
UNION ALL ((SELECT * FROM (VALUES ('', '', 'x'), ('', '', 'x'))) EXCEPT (VALUES ('', '', 'x')))
----
distribution: local
vectorized: true
·
• render
│ columns: ("?column?", "?column?", "?column?")
│ render ?column?: column1
│ render ?column?: column2
│ render ?column?: column3
│
└── • except
    │ columns: (column1, column2, column3)
    │ estimated row count: 1
    │
    ├── • values
    │     columns: (column1, column2, column3)
    │     size: 3 columns, 2 rows
    │     row 0, expr 0: ''
    │     row 0, expr 1: ''
    │     row 0, expr 2: 'x'
    │     row 1, expr 0: ''
    │     row 1, expr 1: ''
    │     row 1, expr 2: 'x'
    │
    └── • values
          columns: (column1, column2, column3)
          size: 3 columns, 1 row
          row 0, expr 0: ''
          row 0, expr 1: ''
          row 0, expr 2: 'x'

statement ok
CREATE TABLE a (a INT PRIMARY KEY)

# Regression test for #34524. This test is here because the issue still exists
# in the heuristic planner.
query I
(SELECT NULL FROM a) EXCEPT (VALUES((SELECT 1 FROM a LIMIT 1)), (1))
----
