# LogicTest: default parallel-stmts

statement ok
CREATE TABLE kv (
  k INT PRIMARY KEY,
  v INT
)

statement error value type tuple{int, int} doesn't match type INT of column "v"
UPDATE kv SET v = (SELECT (10, 11))

statement error value type decimal doesn't match type INT of column "v"
UPDATE kv SET v = 3.2

statement error value type decimal doesn't match type INT of column "v"
UPDATE kv SET (k, v) = (3, 3.2)

statement error value type decimal doesn't match type INT of column "v"
UPDATE kv SET (k, v) = (SELECT 3, 3.2)

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

statement ok
UPDATE kv SET v = 9 WHERE k IN (1, 3)

query II rowsort
SELECT * FROM kv
----
1 9
3 9
5 6
7 8

statement ok
UPDATE kv SET v = k + v

query II rowsort
SELECT * FROM kv
----
1 10
3 12
5 11
7 15

statement error column "m" does not exist
UPDATE kv SET m = 9 WHERE k IN (1, 3)

statement error compound types not supported yet: "kv.k"
UPDATE kv SET kv.k = 9

statement error compound types not supported yet: "k.\*"
UPDATE kv SET k.* = 9

statement error compound types not supported yet: "k\.v"
UPDATE kv SET k.v = 9

statement ok
CREATE VIEW kview as SELECT k,v from kv

query II rowsort
SELECT * FROM kview
----
1 10
3 12
5 11
7 15

statement error cannot run UPDATE on view "kview" - views are not updateable
UPDATE kview SET v = 99 WHERE k IN (1, 3)

query II rowsort
SELECT * FROM kview
----
1 10
3 12
5 11
7 15

statement ok
CREATE TABLE kv2 (
  k CHAR PRIMARY KEY,
  v CHAR,
  UNIQUE INDEX a (v),
  FAMILY (k),
  FAMILY (v)
)

statement ok
INSERT INTO kv2 VALUES ('a', 'b'), ('c', 'd'), ('e', 'f'), ('f', 'g')

query TT rowsort
SELECT * FROM kv2
----
a   b
c   d
e   f
f   g

query ITTT
EXPLAIN (DEBUG) SELECT * FROM kv2
----
0  /kv2/primary/'a'    NULL  PARTIAL
0  /kv2/primary/'a'/v  'b'   ROW
1  /kv2/primary/'c'    NULL  PARTIAL
1  /kv2/primary/'c'/v  'd'   ROW
2  /kv2/primary/'e'    NULL  PARTIAL
2  /kv2/primary/'e'/v  'f'   ROW
3  /kv2/primary/'f'    NULL  PARTIAL
3  /kv2/primary/'f'/v  'g'   ROW

query ITTT
EXPLAIN (DEBUG) SELECT * FROM kv2@a
----
0  /kv2/a/'b'  /'a'  ROW
1  /kv2/a/'d'  /'c'  ROW
2  /kv2/a/'f'  /'e'  ROW
3  /kv2/a/'g'  /'f'  ROW


statement error duplicate key value \(v\)=\('g'\) violates unique constraint "a"
UPDATE kv2 SET v = 'g' WHERE k IN ('a')

query ITTT
EXPLAIN (DEBUG) SELECT * FROM kv2
----
0  /kv2/primary/'a'    NULL  PARTIAL
0  /kv2/primary/'a'/v  'b'   ROW
1  /kv2/primary/'c'    NULL  PARTIAL
1  /kv2/primary/'c'/v  'd'   ROW
2  /kv2/primary/'e'    NULL  PARTIAL
2  /kv2/primary/'e'/v  'f'   ROW
3  /kv2/primary/'f'    NULL  PARTIAL
3  /kv2/primary/'f'/v  'g'   ROW

query ITTT
EXPLAIN (DEBUG) SELECT * FROM kv2@a
----
0  /kv2/a/'b'  /'a'  ROW
1  /kv2/a/'d'  /'c'  ROW
2  /kv2/a/'f'  /'e'  ROW
3  /kv2/a/'g'  /'f'  ROW

statement ok
UPDATE kv2 SET v = 'i' WHERE k IN ('a')

query TT rowsort
SELECT * FROM kv2
----
a   i
c   d
e   f
f   g

statement ok
UPDATE kv2 SET v = 'b' WHERE k IN ('a')

query TT rowsort
SELECT * FROM kv2
----
a   b
c   d
e   f
f   g

statement ok
CREATE TABLE kv3 (
  k CHAR PRIMARY KEY,
  v CHAR NOT NULL
)

statement ok
INSERT INTO kv3 VALUES ('a', 'b')

statement error null value in column "v" violates not-null constraint
UPDATE kv3 SET v = NULL WHERE k = 'a'

query TT
SELECT * FROM kv3
----
a   b

statement error column name "nonexistent" not found
UPDATE kv3 SET v = NULL WHERE nonexistent = 'a'

statement ok
CREATE TABLE abc (
  a INT PRIMARY KEY,
  b INT,
  c INT,
  UNIQUE INDEX d (c)
)

statement ok
INSERT INTO abc VALUES (1, 2, 3)

statement error number of columns \(2\) does not match number of values \(1\)
UPDATE abc SET (b, c) = (4)

statement error DEFAULT can only appear in a VALUES list within INSERT or on the right side of a SET within UPDATE
UPDATE abc SET (b, c) = (SELECT (VALUES (DEFAULT, DEFAULT)))

statement ok
UPDATE abc SET (b, c) = (4, 5)

query III
SELECT * FROM abc
----
1 4 5

statement ok
UPDATE abc SET a = 1, (b, c) = (SELECT 1, 2)

query III colnames
UPDATE abc SET (b, c) = (8, 9) RETURNING abc.b, c, 4
----
b c 4
8 9 4

query III colnames
UPDATE abc SET (b, c) = (8, 9) RETURNING b as col1, c as col2, 4 as col3
----
col1 col2 col3
8    9    4

query I colnames
UPDATE abc SET (b, c) = (8, 9) RETURNING a
----
a
1

query IIII colnames
UPDATE abc SET (b, c) = (5, 6) RETURNING a, b, c, 4
----
a b c 4
1 5 6 4

query III colnames
UPDATE abc SET (b, c) = (7, 8) RETURNING *
----
a b c
1 7 8

query IIII colnames
UPDATE abc SET (b, c) = (7, 8) RETURNING *, 4
----
a b c 4
1 7 8 4

query III colnames
UPDATE abc SET (b, c) = (8, 9) RETURNING abc.*
----
a b c
1 8 9

statement error pq: "abc.*" cannot be aliased
UPDATE abc SET (b, c) = (8, 9) RETURNING abc.* as x

query III
SELECT * FROM abc
----
1 8 9

statement ok
INSERT INTO abc VALUES (4, 5, 6)

statement error duplicate key value \(a\)=\(4\) violates unique constraint "primary"
UPDATE abc SET a = 4, b = 3

statement error duplicate key value \(c\)=\(6\) violates unique constraint "d"
UPDATE abc SET a = 2, c = 6

query III
UPDATE abc SET a = 2, b = 3 WHERE a = 1 RETURNING *
----
2 3 9

query III rowsort
SELECT * FROM abc
----
2 3 9
4 5 6

query III
SELECT * FROM abc@d WHERE c = 9
----
2 3 9

statement error multiple assignments to the same column "b"
UPDATE abc SET b = 10, b = 11

statement error multiple assignments to the same column "b"
UPDATE abc SET (b, b) = (10, 11)

statement error multiple assignments to the same column "b"
UPDATE abc SET (b, c) = (10, 11), b = 12

statement ok
CREATE TABLE xyz (
  x INT PRIMARY KEY,
  y INT,
  z INT
)

statement ok
INSERT INTO xyz VALUES (111, 222, 333)

statement ok
UPDATE xyz SET (z, y) = (SELECT 666, 777), x = (SELECT 2)

query III
SELECT * from xyz
----
2 777 666

query ITTT
EXPLAIN UPDATE xyz SET y = x
----
0  update
0         table  xyz
0         set    y
1  scan
1         table  xyz@primary
1         spans  ALL

query ITTTTT
EXPLAIN (METADATA) UPDATE xyz SET (x, y) = (1, 2)
----
0  update                      ()
0          table  xyz
0          set    x, y
1  render                      (x, y, z, "1", "2")  ="1",="2"
2  scan                        (x, y, z)
2          table  xyz@primary
2          spans  ALL

query ITTTTT
EXPLAIN (METADATA) UPDATE xyz SET (x, y) = (y, x)
----
0  update                      ()
0          table  xyz
0          set    x, y
1  scan                        (x, y, z)
1          table  xyz@primary
1          spans  ALL

query ITTTTT
EXPLAIN (METADATA) UPDATE xyz SET (x, y) = (2, 2)
----
0  update                      ()
0          table  xyz
0          set    x, y
1  render                      (x, y, z, "2")  ="2"
2  scan                        (x, y, z)
2          table  xyz@primary
2          spans  ALL

statement ok
CREATE TABLE lots (
  k1 INT,
  k2 INT,
  k3 INT,
  k4 INT,
  k5 INT
)

statement ok
INSERT INTO lots VALUES (1, 2, 3, 4, 5)

statement ok
UPDATE lots SET (k1, k2) = (6, 7), k3 = 8, (k4, k5) = (9, 10)

query IIIII
SELECT * FROM lots
----
6  7  8  9  10

statement ok
UPDATE lots SET (k5, k4, k3, k2, k1) = (SELECT * FROM lots)

query IIIII
SELECT * FROM lots
----
10  9  8  7  6

statement ok
CREATE TABLE pks (
  k1 INT,
  k2 INT,
  v INT,
  PRIMARY KEY (k1, k2),
  UNIQUE INDEX i (k2, v),
  FAMILY (k1, k2),
  FAMILY (v)
)

statement ok
INSERT INTO pks VALUES (1, 2, 3), (4, 5, 3)

statement error duplicate key value \(k2,v\)=\(5,3\) violates unique constraint "i"
UPDATE pks SET k2 = 5 where k1 = 1

# Test updating only one of the columns of a multi-column primary key.

statement ok
UPDATE pks SET k1 = 2 WHERE k1 = 1

query ITTT
EXPLAIN (DEBUG) SELECT * FROM pks WHERE k1 = 2
----
0  /pks/primary/2/2    NULL  PARTIAL
0  /pks/primary/2/2/v  3     ROW
