# Parallel statement execution was removed in 19.2. See #34789.
# The RETURNING NOTHING syntax was retained to ensure backward compatibility,
# even though the runtime semantics of parallel statements were removed. This
# logic test ensures that we continue to maintain compatibility with clients
# using the syntax, even though it is now ignored.

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

statement ok
CREATE TABLE fk(
    f INT REFERENCES kv
)


# RETURNING NOTHING can be used outside a transaction

statement ok
INSERT INTO kv VALUES (1, 2) RETURNING NOTHING

statement error duplicate key value violates unique constraint "kv_pkey"\nDETAIL: Key \(k\)=\(1\) already exists\.
INSERT INTO kv VALUES (1, 2) RETURNING NOTHING

statement ok
UPSERT INTO kv VALUES (2, 2) RETURNING NOTHING

statement error failed to satisfy CHECK constraint \(v < 100:::INT8\)
UPSERT INTO kv VALUES (2, 500) RETURNING NOTHING

statement ok
UPDATE kv SET v = k WHERE k = 3 RETURNING NOTHING

statement error duplicate key value violates unique constraint "kv_pkey"\nDETAIL: Key \(k\)=\(1\) already exists\.
UPDATE kv SET k = 1 WHERE k = 2 RETURNING NOTHING

statement ok
DELETE FROM kv WHERE k = 1 RETURNING NOTHING

statement ok
INSERT INTO fk VALUES (2)

statement error delete on table "kv" violates foreign key constraint "fk_f_fkey" on table "fk"\nDETAIL: Key \(k\)=\(2\) is still referenced from table "fk"
DELETE FROM kv WHERE k = 2 RETURNING NOTHING

statement ok
DELETE FROM fk

statement ok
DELETE FROM kv


# insert with RETURNING NOTHING can be used inside a successful transaction

statement ok
BEGIN

statement ok
INSERT INTO kv VALUES (1, 2) RETURNING NOTHING

statement ok
INSERT INTO kv VALUES (2, 3) RETURNING NOTHING

statement ok
INSERT INTO kv VALUES (3, 4) RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
2  3
3  4

# insert with RETURNING NOTHING can be used inside an unsuccessful transaction

statement ok
BEGIN

statement ok
INSERT INTO kv VALUES (4, 5) RETURNING NOTHING

statement error duplicate key value violates unique constraint "kv_pkey"\nDETAIL: Key \(k\)=\(2\) already exists\.
INSERT INTO kv VALUES (2, 3) RETURNING NOTHING

statement error current transaction is aborted, commands ignored until end of transaction block
INSERT INTO kv VALUES (5, 6) RETURNING NOTHING

statement ok
COMMIT

query T
SHOW TRANSACTION STATUS
----
NoTxn

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
2  3
3  4


# upsert with RETURNING NOTHING can be used inside a successful transaction

statement ok
BEGIN

statement ok
UPSERT INTO kv VALUES (1, 7) RETURNING NOTHING

statement ok
UPSERT INTO kv VALUES (4, 8) RETURNING NOTHING

statement ok
UPSERT INTO kv VALUES (3, 9) RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  7
2  3
3  9
4  8

# upsert with RETURNING NOTHING can be used inside an unsuccessful transaction

statement ok
BEGIN

statement ok
UPSERT INTO kv VALUES (1, 8) RETURNING NOTHING

statement error failed to satisfy CHECK constraint \(v < 100:::INT8\)
UPSERT INTO kv VALUES (4, 500) RETURNING NOTHING

statement error current transaction is aborted, commands ignored until end of transaction block
UPSERT INTO kv VALUES (3, 10) RETURNING NOTHING

statement ok 
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  7
2  3
3  9
4  8


# update with RETURNING NOTHING can be used inside a successful transaction

statement ok
BEGIN

statement ok
UPDATE kv SET v = k WHERE k = 1 RETURNING NOTHING

statement ok
UPDATE kv SET v = k WHERE k = 3 RETURNING NOTHING

statement ok
UPDATE kv SET v = k WHERE k = 9 RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  1
2  3
3  3
4  8

# update with RETURNING NOTHING can be used inside an unsuccessful transaction

statement ok
BEGIN

statement ok
UPDATE kv SET k = 9 WHERE k = 1 RETURNING NOTHING

statement error duplicate key value violates unique constraint "kv_pkey"\nDETAIL: Key \(k\)=\(3\) already exists\.
UPDATE kv SET k = 3 WHERE k = 2 RETURNING NOTHING

statement error current transaction is aborted, commands ignored until end of transaction block
UPDATE kv SET k = 10 WHERE k = 4 RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  1
2  3
3  3
4  8


# delete with RETURNING NOTHING can be used inside a successful transaction

statement ok
BEGIN

statement ok
DELETE FROM kv WHERE k = 1 RETURNING NOTHING

statement ok
DELETE FROM kv WHERE k = 5 RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
2  3
3  3
4  8

# delete with RETURNING NOTHING can be used inside an unsuccessful transaction

statement ok
INSERT INTO fk VALUES (2)

statement ok
BEGIN

statement ok
DELETE FROM kv WHERE k = 1 RETURNING NOTHING

statement error delete on table "kv" violates foreign key constraint "fk_f_fkey" on table "fk"\nDETAIL: Key \(k\)=\(2\) is still referenced from table "fk"
DELETE FROM kv WHERE k = 2 RETURNING NOTHING

statement error current transaction is aborted, commands ignored until end of transaction block
DELETE FROM kv WHERE k = 3 RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
2  3
3  3
4  8

statement ok
DELETE FROM fk


# mixed mutations with RETURNING NOTHING can be used inside a successful transaction

statement ok
BEGIN

statement ok
INSERT INTO kv VALUES (1, 2) RETURNING NOTHING

statement ok
INSERT INTO kv VALUES (5, 9)

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
2  3
3  3
4  8
5  9

statement ok
UPSERT INTO kv VALUES (6, 10) RETURNING NOTHING

statement ok
UPDATE kv SET v = k+1 WHERE k = 3 RETURNING NOTHING

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
2  3
3  4
4  8
5  9
6  10

statement ok
DELETE FROM kv WHERE k = 2 RETURNING NOTHING

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
3  4
4  8
5  9
6  10

# mixed mutations with RETURNING NOTHING can be used inside an unsuccessful transaction

statement ok
BEGIN

statement error duplicate key value violates unique constraint "kv_pkey"\nDETAIL: Key \(k\)=\(1\) already exists\.
INSERT INTO kv VALUES (1, 2) RETURNING NOTHING

statement error current transaction is aborted, commands ignored until end of transaction block
INSERT INTO kv VALUES (7, 7)

statement ok
ROLLBACK

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
3  4
4  8
5  9
6  10


# Throw statement planning error

statement ok
BEGIN

statement error pgcode 42703 column "z" does not exist
UPDATE kv SET z = 10 WHERE k = 3 RETURNING NOTHING

statement ok
ROLLBACK


# RETURNING NOTHING can be prepared and executed.

statement ok
DELETE FROM kv

statement ok
PREPARE x AS INSERT INTO kv VALUES ($1, $2) RETURNING NOTHING

statement ok
BEGIN

statement ok
EXECUTE x(1, 2)

statement error duplicate key value violates unique constraint "kv_pkey"\nDETAIL: Key \(k\)=\(1\) already exists\.
EXECUTE x(1, 2)

statement ok
ROLLBACK

statement ok
BEGIN

statement ok
EXECUTE x(1, 2)

statement ok
EXECUTE x(2, 3)

statement ok
EXECUTE x(3, 4)

statement ok
COMMIT

query II
SELECT k, v FROM kv ORDER BY k
----
1  2
2  3
3  4
