# LogicTest: default parallel-stmts distsql

# a is the primary key so b gets optimized into a one column value. The c, d
# family has two columns, so it's encoded as a tuple
statement ok
CREATE TABLE abcd(
  a INT PRIMARY KEY,
  b INT,
  c INT,
  d INT,
  FAMILY f1 (a, b),
  FAMILY (c, d)
)

query TT
SHOW CREATE TABLE abcd
----
abcd  CREATE TABLE abcd (
      a INT NOT NULL,
      b INT NULL,
      c INT NULL,
      d INT NULL,
      CONSTRAINT "primary" PRIMARY KEY (a ASC),
      FAMILY f1 (a, b),
      FAMILY fam_1_c_d (c, d)
      )

statement ok
INSERT INTO abcd VALUES (1, 2, 3, 4), (5, 6, 7, 8)

query IIII rowsort
SELECT * FROM abcd
----
1 2 3 4
5 6 7 8

statement ok
UPDATE abcd SET b = 9, d = 10, c = NULL where c = 7

query IIII rowsort
SELECT * FROM abcd
----
1 2 3    4
5 9 NULL 10

statement ok
DELETE FROM abcd where c = 3

query IIII
SELECT * FROM abcd
----
5 9 NULL 10

statement ok
UPSERT INTO abcd VALUES (1, 2, 3, 4), (5, 6, 7, 8)

query IIII rowsort
SELECT * FROM abcd
----
1 2 3 4
5 6 7 8

statement ok
UPDATE abcd SET b = NULL, c = NULL, d = NULL WHERE a = 1

query IIII
SELECT * FROM abcd WHERE a = 1
----
1 NULL NULL NULL

statement ok
ALTER TABLE abcd ADD e STRING FAMILY f1

statement ok
INSERT INTO abcd VALUES (9, 10, 11, 12, 'foo')

query IIIIT rowsort
SELECT * from abcd WHERE a > 1
----
5 6  7  8  NULL
9 10 11 12 foo

# Check the descriptor bookkeeping
statement ok
ALTER TABLE abcd ADD COLUMN f DECIMAL

statement error unknown family \"foo\"
ALTER TABLE abcd ADD COLUMN g INT FAMILY foo

statement ok
ALTER TABLE abcd ADD COLUMN g INT CREATE FAMILY

statement error family "f1" already exists
ALTER TABLE abcd ADD COLUMN h INT CREATE FAMILY F1

statement ok
ALTER TABLE abcd ADD COLUMN h INT CREATE FAMILY f_h

statement ok
ALTER TABLE abcd ADD COLUMN i INT CREATE IF NOT EXISTS FAMILY F_H

statement ok
ALTER TABLE abcd ADD COLUMN j INT CREATE IF NOT EXISTS FAMILY f_j

query TT
SHOW CREATE TABLE abcd
----
abcd  CREATE TABLE abcd (
      a INT NOT NULL,
      b INT NULL,
      c INT NULL,
      d INT NULL,
      e STRING NULL,
      f DECIMAL NULL,
      g INT NULL,
      h INT NULL,
      i INT NULL,
      j INT NULL,
      CONSTRAINT "primary" PRIMARY KEY (a ASC),
      FAMILY f1 (a, b, e, f),
      FAMILY fam_1_c_d (c, d),
      FAMILY fam_2_g (g),
      FAMILY f_h (h, i),
      FAMILY f_j (j)
      )

statement ok
ALTER TABLE abcd DROP c, DROP d, DROP e, DROP h, DROP i, DROP j

query TT
SHOW CREATE TABLE abcd
----
abcd  CREATE TABLE abcd (
      a INT NOT NULL,
      b INT NULL,
      f DECIMAL NULL,
      g INT NULL,
      CONSTRAINT "primary" PRIMARY KEY (a ASC),
      FAMILY f1 (a, b, f),
      FAMILY fam_2_g (g)
      )

statement ok
CREATE TABLE f1 (a INT PRIMARY KEY, b STRING, c STRING)

query TT
SHOW CREATE TABLE f1
----
f1  CREATE TABLE f1 (
      a INT NOT NULL,
      b STRING NULL,
      c STRING NULL,
      CONSTRAINT "primary" PRIMARY KEY (a ASC),
      FAMILY "primary" (a, b, c)
    )

statement ok
CREATE TABLE assign_at_create (a INT PRIMARY KEY FAMILY pri, b INT FAMILY foo, c INT CREATE FAMILY)

query TT
SHOW CREATE TABLE assign_at_create
----
assign_at_create  CREATE TABLE assign_at_create (
                    a INT NOT NULL,
                    b INT NULL,
                    c INT NULL,
                    CONSTRAINT "primary" PRIMARY KEY (a ASC),
                    FAMILY pri (a),
                    FAMILY foo (b),
                    FAMILY fam_2_c (c)
                  )

# Check the the diff-column-id storage
statement ok
CREATE TABLE unsorted_colids (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL, FAMILY (c, b, a))

statement ok
INSERT INTO unsorted_colids VALUES (1, 1, 1)

statement ok
UPDATE unsorted_colids SET b = 2, c = 3 WHERE a = 1

query III
SELECT * FROM unsorted_colids
----
1 2 3

# Check that family bookkeeping correctly tracks column renames
statement ok
CREATE TABLE rename_col (a INT PRIMARY KEY, b INT, c STRING, FAMILY (a, b), FAMILY (c))

statement ok
ALTER TABLE rename_col RENAME b TO d

statement ok
ALTER TABLE rename_col RENAME c TO e

query TT
SHOW CREATE TABLE rename_col
----
rename_col CREATE TABLE rename_col (
  a INT NOT NULL,
  d INT NULL,
  e STRING NULL,
  CONSTRAINT "primary" PRIMARY KEY (a ASC),
  FAMILY fam_0_a_b (a, d),
  FAMILY fam_1_c (e)
)
