test: add tests for bulk upserts with surrogate keys
This commit is contained in:
@@ -103,6 +103,32 @@ spec =
|
|||||||
, matchHeaders = ["Preference-Applied" <:> "resolution=merge-duplicates, return=representation", matchContentTypeJson]
|
, matchHeaders = ["Preference-Applied" <:> "resolution=merge-duplicates, return=representation", matchContentTypeJson]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
it "INSERTs and UPDATEs rows with SERIAL surrogate primary keys using Prefer: missing=default" $
|
||||||
|
request methodPost "/surr_serial_upsert?columns=id,name&select=name,extra" [("Prefer", "return=representation"), ("Prefer", "resolution=merge-duplicates"), ("Prefer", "missing=default")]
|
||||||
|
[json| [
|
||||||
|
{ "id": 1, "name": "updated value" },
|
||||||
|
{ "name": "new value" }
|
||||||
|
]|] `shouldRespondWith` [json| [
|
||||||
|
{ "name": "updated value", "extra": "existing value" },
|
||||||
|
{ "name": "new value", "extra": null }
|
||||||
|
]|]
|
||||||
|
{ matchStatus = 201
|
||||||
|
, matchHeaders = ["Preference-Applied" <:> "resolution=merge-duplicates, missing=default, return=representation", matchContentTypeJson]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "INSERTs and UPDATEs rows with GENERATED BY DEFAULT surrogate primary keys using Prefer: missing=default" $
|
||||||
|
request methodPost "/surr_gen_default_upsert?columns=id,name&select=name,extra" [("Prefer", "return=representation"), ("Prefer", "resolution=merge-duplicates"), ("Prefer", "missing=default")]
|
||||||
|
[json| [
|
||||||
|
{ "id": 1, "name": "updated value" },
|
||||||
|
{ "name": "new value" }
|
||||||
|
]|] `shouldRespondWith` [json| [
|
||||||
|
{ "name": "updated value", "extra": "existing value" },
|
||||||
|
{ "name": "new value", "extra": null }
|
||||||
|
]|]
|
||||||
|
{ matchStatus = 201
|
||||||
|
, matchHeaders = ["Preference-Applied" <:> "resolution=merge-duplicates, missing=default, return=representation", matchContentTypeJson]
|
||||||
|
}
|
||||||
|
|
||||||
it "succeeds if the table has only PK cols and no other cols" $
|
it "succeeds if the table has only PK cols and no other cols" $
|
||||||
request methodPost "/only_pk" [("Prefer", "return=representation"), ("Prefer", "resolution=merge-duplicates")]
|
request methodPost "/only_pk" [("Prefer", "return=representation"), ("Prefer", "resolution=merge-duplicates")]
|
||||||
[json|[ { "id": 1 }, { "id": 2 }, { "id": 4} ]|]
|
[json|[ { "id": 1 }, { "id": 2 }, { "id": 4} ]|]
|
||||||
@@ -192,6 +218,30 @@ spec =
|
|||||||
, matchHeaders = ["Preference-Applied" <:> "resolution=ignore-duplicates, return=representation"]
|
, matchHeaders = ["Preference-Applied" <:> "resolution=ignore-duplicates, return=representation"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
it "INSERTs and UPDATEs rows with SERIAL surrogate primary keys using Prefer: missing=default" $
|
||||||
|
request methodPost "/surr_serial_upsert?columns=id,name&select=name,extra" [("Prefer", "return=representation"), ("Prefer", "resolution=ignore-duplicates"), ("Prefer", "missing=default")]
|
||||||
|
[json| [
|
||||||
|
{ "id": 1, "name": "updated value" },
|
||||||
|
{ "name": "new value" }
|
||||||
|
]|] `shouldRespondWith` [json| [
|
||||||
|
{ "name": "new value", "extra": null }
|
||||||
|
]|]
|
||||||
|
{ matchStatus = 201
|
||||||
|
, matchHeaders = ["Preference-Applied" <:> "resolution=ignore-duplicates, missing=default, return=representation", matchContentTypeJson]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "INSERTs and UPDATEs rows with GENERATED BY DEFAULT surrogate primary keys using Prefer: missing=default" $
|
||||||
|
request methodPost "/surr_gen_default_upsert?columns=id,name&select=name,extra" [("Prefer", "return=representation"), ("Prefer", "resolution=ignore-duplicates"), ("Prefer", "missing=default")]
|
||||||
|
[json| [
|
||||||
|
{ "id": 1, "name": "updated value" },
|
||||||
|
{ "name": "new value" }
|
||||||
|
]|] `shouldRespondWith` [json| [
|
||||||
|
{ "name": "new value", "extra": null }
|
||||||
|
]|]
|
||||||
|
{ matchStatus = 201
|
||||||
|
, matchHeaders = ["Preference-Applied" <:> "resolution=ignore-duplicates, missing=default, return=representation", matchContentTypeJson]
|
||||||
|
}
|
||||||
|
|
||||||
it "succeeds if the table has only PK cols and no other cols" $
|
it "succeeds if the table has only PK cols and no other cols" $
|
||||||
request methodPost "/only_pk" [("Prefer", "return=representation"), ("Prefer", "resolution=ignore-duplicates")]
|
request methodPost "/only_pk" [("Prefer", "return=representation"), ("Prefer", "resolution=ignore-duplicates")]
|
||||||
[json|[ { "id": 1 }, { "id": 2 }, { "id": 3} ]|]
|
[json|[ { "id": 1 }, { "id": 2 }, { "id": 3} ]|]
|
||||||
|
|||||||
Vendored
+6
@@ -924,3 +924,9 @@ INSERT INTO process_supervisor VALUES (4, 1);
|
|||||||
INSERT INTO process_supervisor VALUES (4, 2);
|
INSERT INTO process_supervisor VALUES (4, 2);
|
||||||
INSERT INTO process_supervisor VALUES (5, 3);
|
INSERT INTO process_supervisor VALUES (5, 3);
|
||||||
INSERT INTO process_supervisor VALUES (6, 3);
|
INSERT INTO process_supervisor VALUES (6, 3);
|
||||||
|
|
||||||
|
TRUNCATE TABLE surr_serial_upsert CASCADE;
|
||||||
|
INSERT INTO surr_serial_upsert(name, extra) VALUES ('value', 'existing value');
|
||||||
|
|
||||||
|
TRUNCATE TABLE surr_gen_default_upsert CASCADE;
|
||||||
|
INSERT INTO surr_gen_default_upsert(name, extra) VALUES ('value', 'existing value');
|
||||||
|
|||||||
Vendored
+2
@@ -39,6 +39,8 @@ GRANT USAGE ON SEQUENCE
|
|||||||
, items3_id_seq
|
, items3_id_seq
|
||||||
, callcounter_count
|
, callcounter_count
|
||||||
, leak_id_seq
|
, leak_id_seq
|
||||||
|
, surr_serial_upsert_id_seq
|
||||||
|
, surr_gen_default_upsert_id_seq
|
||||||
TO postgrest_test_anonymous;
|
TO postgrest_test_anonymous;
|
||||||
|
|
||||||
GRANT USAGE ON SEQUENCE channels_id_seq TO postgrest_test_anonymous;
|
GRANT USAGE ON SEQUENCE channels_id_seq TO postgrest_test_anonymous;
|
||||||
|
|||||||
Vendored
+12
@@ -3782,3 +3782,15 @@ create table process_supervisor (
|
|||||||
supervisor_id int references supervisors(id),
|
supervisor_id int references supervisors(id),
|
||||||
primary key (process_id, supervisor_id)
|
primary key (process_id, supervisor_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
create table surr_serial_upsert (
|
||||||
|
id serial primary key,
|
||||||
|
name text,
|
||||||
|
extra text
|
||||||
|
);
|
||||||
|
|
||||||
|
create table surr_gen_default_upsert (
|
||||||
|
id int generated by default as identity primary key,
|
||||||
|
name text,
|
||||||
|
extra text
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user