# LogicTest: default parallel-stmts distsql

statement ok
SET DATABASE = ""

statement error no database specified
CREATE TABLE a (id INT PRIMARY KEY)

statement error empty table name
CREATE TABLE test."" (id INT PRIMARY KEY)

statement ok
CREATE TABLE test.a (id INT PRIMARY KEY)

statement error pgcode 42P07 relation "a" already exists
CREATE TABLE test.a (id INT PRIMARY KEY)

statement ok
SET DATABASE = test

statement error empty table name
CREATE TABLE "" (id INT PRIMARY KEY)

statement error pgcode 42P07 relation "a" already exists
CREATE TABLE a (id INT PRIMARY KEY)

statement error duplicate column name: "id"
CREATE TABLE b (id INT PRIMARY KEY, id INT)

statement error multiple primary keys for table "b" are not allowed
CREATE TABLE b (id INT PRIMARY KEY, id2 INT PRIMARY KEY)

statement ok
CREATE TABLE IF NOT EXISTS a (id INT PRIMARY KEY)

query T colnames
SHOW TABLES FROM test
----
Table
a

statement ok
CREATE TABLE b (id INT PRIMARY KEY)

statement ok
CREATE TABLE c (
  id INT PRIMARY KEY,
  foo INT,
  bar INT,
  INDEX c_foo_idx (foo),
  INDEX (foo),
  INDEX c_foo_bar_idx (foo ASC, bar DESC),
  UNIQUE (bar)
)

query TTBITTBB colnames
SHOW INDEXES FROM c
----
Table  Name           Unique  Seq  Column  Direction  Storing  Implicit
c      primary        true    1    id      ASC        false    false
c      c_foo_idx      false   1    foo     ASC        false    false
c      c_foo_idx      false   2    id      ASC        false    true
c      c_foo_idx1     false   1    foo     ASC        false    false
c      c_foo_idx1     false   2    id      ASC        false    true
c      c_foo_bar_idx  false   1    foo     ASC        false    false
c      c_foo_bar_idx  false   2    bar     DESC       false    false
c      c_foo_bar_idx  false   3    id      ASC        false    true
c      c_bar_key      true    1    bar     ASC        false    false
c      c_bar_key      true    2    id      ASC        false    true

# primary keys can never be null

statement ok
CREATE TABLE d (
  id    INT PRIMARY KEY NULL
)

query TTBTT colnames
SHOW COLUMNS FROM d
----
Field Type   Null  Default Indices
id    INT    false NULL    {primary}

statement ok
CREATE TABLE e (
  id    INT NULL PRIMARY KEY
)

query TTBTT colnames
SHOW COLUMNS FROM e
----
Field Type   Null   Default Indices
id    INT    false  NULL    {primary}

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

query TTBTT colnames
SHOW COLUMNS FROM f
----
Field Type   Null  Default Indices
a     INT   false  NULL    {primary}
b     INT   false  NULL    {primary}
c     INT   false  NULL    {primary}

query T
SHOW TABLES FROM test
----
a
b
c
d
e
f

statement ok
SET DATABASE = ""

query error no database specified
SHOW COLUMNS FROM users

query error database "foo" does not exist
SHOW COLUMNS FROM foo.users

query error table "test.users" does not exist
SHOW COLUMNS FROM test.users

query error no database specified
SHOW INDEXES FROM users

query error database "foo" does not exist
SHOW INDEXES FROM foo.users

query error table "test.users" does not exist
SHOW INDEXES FROM test.users

statement ok
CREATE TABLE test.users (
  id        INT PRIMARY KEY,
  name      VARCHAR NOT NULL,
  title     VARCHAR,
  nickname  STRING CHECK (LENGTH(nickname) < 10),
  username  STRING(10),
  email     VARCHAR(100) NULL,
  INDEX foo (name),
  CHECK (LENGTH(nickname) < LENGTH(name)),
  UNIQUE INDEX bar (id, name),
  FAMILY "primary" (id, name),
  FAMILY fam_1_title (title),
  FAMILY fam_2_nickname (nickname),
  FAMILY fam_3_username_email (username, email)
)

query TTBTT colnames
SHOW COLUMNS FROM test.users
----
Field       Type        Null    Default Indices
id          INT         false   NULL    {primary,foo,bar}
name        STRING      false   NULL    {foo,bar}
title       STRING      true    NULL    {}
nickname    STRING      true    NULL	{}
username    STRING(10)  true    NULL	{}
email       STRING(100) true    NULL    {}

query TTBITTBB colnames
SHOW INDEXES FROM test.users
----
Table  Name     Unique  Seq  Column  Direction  Storing  Implicit
users  primary  true    1    id      ASC        false    false
users  foo      false   1    name    ASC        false    false
users  foo      false   2    id      ASC        false    true
users  bar      true    1    id      ASC        false    false
users  bar      true    2    name    ASC        false    false

statement error precision for type float must be at least 1 bit
CREATE TABLE test.precision (x FLOAT(0))

statement error invalid NUMERIC precision 0
CREATE TABLE test.precision (x DECIMAL(0, 2))

statement error NUMERIC scale 4 must be between 0 and precision 2
CREATE TABLE test.precision (x DECIMAL(2, 4))

query TT
SHOW CREATE TABLE test.users
----
test.users  CREATE TABLE users (
            id INT NOT NULL,
            "name" STRING NOT NULL,
            title STRING NULL,
            nickname STRING NULL,
            username STRING(10) NULL,
            email STRING(100) NULL,
            CONSTRAINT "primary" PRIMARY KEY (id ASC),
            INDEX foo ("name" ASC),
            UNIQUE INDEX bar (id ASC, "name" ASC),
            FAMILY "primary" (id, "name"),
            FAMILY fam_1_title (title),
            FAMILY fam_2_nickname (nickname),
            FAMILY fam_3_username_email (username, email),
            CONSTRAINT check_nickname_name CHECK (length(nickname) < length("name")),
            CONSTRAINT check_nickname CHECK (length(nickname) < 10)
)

statement ok
CREATE TABLE test.dupe_generated (
  foo INT CHECK (foo > 1),
  bar INT CHECK (bar > 2),
  CHECK (foo > 2),
  CHECK (foo < 10)
)

query TTTTT colnames
SHOW CONSTRAINTS FROM test.dupe_generated
----
Table           Name        Type         Column(s)   Details
dupe_generated  check_bar   CHECK        NULL       bar > 2
dupe_generated  check_foo   CHECK        NULL       foo > 2
dupe_generated  check_foo1  CHECK        NULL       foo < 10
dupe_generated  check_foo2  CHECK        NULL       foo > 1

statement ok
CREATE TABLE test.named_constraints (
  id        INT CONSTRAINT pk PRIMARY KEY,
  name      VARCHAR CONSTRAINT notnull NOT NULL,
  title     VARCHAR  CONSTRAINT def DEFAULT 'VP of Something',
  nickname  STRING CONSTRAINT ck1 CHECK (LENGTH(nickname) < 10),
  username  STRING(10) CONSTRAINT nl NULL,
  email     VARCHAR(100) CONSTRAINT uq UNIQUE,
  INDEX foo (name),
  CONSTRAINT uq2 UNIQUE (username),
  CONSTRAINT ck2 CHECK (LENGTH(nickname) < LENGTH(name)),
  UNIQUE INDEX bar (id, name),
  FAMILY "primary" (id, name),
  FAMILY fam_1_title (title),
  FAMILY fam_2_nickname (nickname),
  FAMILY fam_3_username_email (username, email)
)

query TT
SHOW CREATE TABLE test.named_constraints
----
test.named_constraints  CREATE TABLE named_constraints (
                        id INT NOT NULL,
                        "name" STRING NOT NULL,
                        title STRING NULL DEFAULT 'VP of Something':::STRING,
                        nickname STRING NULL,
                        username STRING(10) NULL,
                        email STRING(100) NULL,
                        CONSTRAINT pk PRIMARY KEY (id ASC),
                        UNIQUE INDEX uq (email ASC),
                        INDEX foo ("name" ASC),
                        UNIQUE INDEX uq2 (username ASC),
                        UNIQUE INDEX bar (id ASC, "name" ASC),
                        FAMILY "primary" (id, "name"),
                        FAMILY fam_1_title (title),
                        FAMILY fam_2_nickname (nickname),
                        FAMILY fam_3_username_email (username, email),
                        CONSTRAINT ck2 CHECK (length(nickname) < length("name")),
                        CONSTRAINT ck1 CHECK (length(nickname) < 10)
)

query TTTTT colnames
SHOW CONSTRAINTS FROM test.named_constraints
----
Table              Name  Type         Column(s)  Details
named_constraints  bar   UNIQUE       id, name   NULL
named_constraints  ck1   CHECK        NULL       length(nickname) < 10
named_constraints  ck2   CHECK        NULL       length(nickname) < length("name")
named_constraints  pk    PRIMARY KEY  id         NULL
named_constraints  uq    UNIQUE       email      NULL
named_constraints  uq2   UNIQUE       username   NULL

statement error duplicate constraint name: "pk"
CREATE TABLE test.dupe_named_constraints (
  id        INT CONSTRAINT pk PRIMARY KEY,
  title     VARCHAR CONSTRAINT one CHECK (1>1),
  name      VARCHAR CONSTRAINT pk UNIQUE
)

statement error duplicate constraint name: "one"
CREATE TABLE test.dupe_named_constraints (
  id        INT CONSTRAINT pk PRIMARY KEY,
  title     VARCHAR CONSTRAINT one CHECK (1>1),
  name      VARCHAR CONSTRAINT one UNIQUE
)

statement error duplicate constraint name: "one"
CREATE TABLE test.dupe_named_constraints (
  id        INT CONSTRAINT pk PRIMARY KEY,
  title     VARCHAR CONSTRAINT one CHECK (1>1),
  name      VARCHAR CONSTRAINT one REFERENCES test.named_constraints (username),
  INDEX (name)
)

statement error duplicate constraint name: "one"
CREATE TABLE test.dupe_named_constraints (
  id        INT CONSTRAINT pk PRIMARY KEY,
  title     VARCHAR CONSTRAINT one CHECK (1>1) CONSTRAINT one CHECK (1<1)
)

statement ok
CREATE TABLE test.alltypes (
  a BOOL,
  b INT,
  c INT8,
  d INT64,
  e INTEGER,
  f SMALLINT,
  g BIGINT,
  h SERIAL,
  i SMALLSERIAL,
  j BIGSERIAL,
  k BIT,
  l BIT(12),
  m CHAR,
  n CHAR(12),
  o VARCHAR,
  p VARCHAR(12),
  q REAL,
  r FLOAT,
  s DOUBLE PRECISION,
  t DEC,
  u DEC(1),
  v DEC(2,1),
  w DECIMAL,
  x DECIMAL(1),
  y DECIMAL(2,1),
  z NUMERIC,
  aa NUMERIC(1),
  ab NUMERIC(2,1),
  ac DATE,
  ad TIMESTAMP,
  ae TIMESTAMP WITH TIME ZONE,
  af STRING,
  ag STRING(12),
  ah TEXT,
  ai BLOB,
  aj BYTES,
  ak BYTEA,
  al INTERVAL
  )

query TTBTT colnames
SHOW COLUMNS FROM test.alltypes
----
Field  Type                      Null   Default         Indices
a      BOOL                      true   NULL            {}
b      INT                       true   NULL			{}
c      INT                       true   NULL			{}
d      INT                       true   NULL			{}
e      INT                       true   NULL			{}
f      INT                       true   NULL			{}
g      INT                       true   NULL			{}
h      INT                       true   unique_rowid()	{}
i      INT                       true   unique_rowid()	{}
j      INT                       true   unique_rowid()	{}
k      BIT(1)                    true   NULL			{}
l      BIT(12)                   true   NULL			{}
m      STRING                    true   NULL			{}
n      STRING(12)                true   NULL			{}
o      STRING                    true   NULL			{}
p      STRING(12)                true   NULL			{}
q      FLOAT                     true   NULL			{}
r      FLOAT                     true   NULL			{}
s      FLOAT                     true   NULL			{}
t      DECIMAL                   true   NULL			{}
u      DECIMAL(1)                true   NULL			{}
v      DECIMAL(2,1)              true   NULL			{}
w      DECIMAL                   true   NULL			{}
x      DECIMAL(1)                true   NULL			{}
y      DECIMAL(2,1)              true   NULL			{}
z      DECIMAL                   true   NULL			{}
aa     DECIMAL(1)                true   NULL			{}
ab     DECIMAL(2,1)              true   NULL			{}
ac     DATE                      true   NULL			{}
ad     TIMESTAMP                 true   NULL			{}
ae     TIMESTAMP WITH TIME ZONE  true   NULL			{}
af     STRING                    true   NULL			{}
ag     STRING(12)                true   NULL			{}
ah     STRING                    true   NULL			{}
ai     BYTES                     true   NULL			{}
aj     BYTES                     true   NULL			{}
ak     BYTES                     true   NULL			{}
al     INTERVAL                  true   NULL            {}

statement ok
CREATE DATABASE IF NOT EXISTS smtng

statement ok
CREATE TABLE IF NOT EXISTS smtng.something (
ID SERIAL PRIMARY KEY
)

statement ok
ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS OWNER_ID INT

statement ok
ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS MODEL_ID INT

statement ok
ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS NAME STRING

statement ok
CREATE DATABASE IF NOT EXISTS smtng

statement ok
CREATE TABLE IF NOT EXISTS smtng.something (
ID SERIAL PRIMARY KEY
)

statement ok
ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS OWNER_ID INT

statement ok
ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS MODEL_ID INT

statement ok
ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS NAME STRING

query error pq: unimplemented: ARRAY column types are unsupported \(see issue https://github.com/cockroachdb/cockroach/issues/2115\)
CREATE TABLE IF NOT EXISTS test.int_array_test (
  arr INT[]
)

query error pq: unimplemented: VECTOR column types are unsupported \(see issue https://github.com/cockroachdb/cockroach/issues/2115\)
CREATE TABLE IF NOT EXISTS test.int_array_test (
  arr INT2VECTOR
)

# Regression test for #13725
statement ok
CREATE TABLE test.empty ()

statement ok
SELECT * FROM test.empty

# Issue #14308: support tables with DEFAULT NULL columns.
statement ok
CREATE TABLE test.null_default (
  ts timestamp NULL DEFAULT NULL
)

query TT
SHOW CREATE TABLE test.null_default
----
test.null_default CREATE TABLE null_default
(
  ts  TIMESTAMP NULL DEFAULT NULL,
  FAMILY "primary" (ts, rowid)
)
