diff --git a/Sources/PostgREST/PostgrestQueryBuilder.swift b/Sources/PostgREST/PostgrestQueryBuilder.swift index 4924b15..c5deeaf 100644 --- a/Sources/PostgREST/PostgrestQueryBuilder.swift +++ b/Sources/PostgREST/PostgrestQueryBuilder.swift @@ -79,14 +79,13 @@ public final class PostgrestQueryBuilder: PostgrestBuilder { onConflict: String? = nil, returning: PostgrestReturningOptions = .representation, count: CountOption? = nil, - ignoreDuplicates: Bool? = nil + ignoreDuplicates: Bool = false ) -> PostgrestFilterBuilder { method = "POST" var prefersHeaders = [ - ignoreDuplicates.map { "resolution=\($0 ? "ignore" : "merge")-duplicates" }, + "resolution=\(ignoreDuplicates ? "ignore" : "merge")-duplicates", "return=\(returning.rawValue)", ] - .compactMap { $0 } if let onConflict = onConflict { appendSearchParams(name: "on_conflict", value: onConflict) } diff --git a/Tests/PostgRESTTests/BuildURLRequestTests.swift b/Tests/PostgRESTTests/BuildURLRequestTests.swift index b252e5b..b7e851a 100644 --- a/Tests/PostgRESTTests/BuildURLRequestTests.swift +++ b/Tests/PostgRESTTests/BuildURLRequestTests.swift @@ -78,6 +78,14 @@ .select() .contains(column: "name", value: ["is:online", "faction:red"]) }, + TestCase(name: "test upsert not ignoring duplicates") { client in + client.from("users") + .upsert(values: ["email": "johndoe@supabase.io"]) + }, + TestCase(name: "test upsert ignoring duplicates") { client in + client.from("users") + .upsert(values: ["email": "johndoe@supabase.io"], ignoreDuplicates: true) + }, ] for testCase in testCases { diff --git a/Tests/PostgRESTTests/__Snapshots__/BuildURLRequestTests/testBuildRequest.test-upsert-ignoring-duplicates.txt b/Tests/PostgRESTTests/__Snapshots__/BuildURLRequestTests/testBuildRequest.test-upsert-ignoring-duplicates.txt new file mode 100644 index 0000000..c5567bf --- /dev/null +++ b/Tests/PostgRESTTests/__Snapshots__/BuildURLRequestTests/testBuildRequest.test-upsert-ignoring-duplicates.txt @@ -0,0 +1,7 @@ +curl \ + --request POST \ + --header "Accept: application/json" \ + --header "Content-Type: application/json" \ + --header "Prefer: resolution=ignore-duplicates,return=representation" \ + --data "{\"email\":\"johndoe@supabase.io\"}" \ + "https://example.supabase.co/users" \ No newline at end of file diff --git a/Tests/PostgRESTTests/__Snapshots__/BuildURLRequestTests/testBuildRequest.test-upsert-not-ignoring-duplicates.txt b/Tests/PostgRESTTests/__Snapshots__/BuildURLRequestTests/testBuildRequest.test-upsert-not-ignoring-duplicates.txt new file mode 100644 index 0000000..052aa50 --- /dev/null +++ b/Tests/PostgRESTTests/__Snapshots__/BuildURLRequestTests/testBuildRequest.test-upsert-not-ignoring-duplicates.txt @@ -0,0 +1,7 @@ +curl \ + --request POST \ + --header "Accept: application/json" \ + --header "Content-Type: application/json" \ + --header "Prefer: resolution=merge-duplicates,return=representation" \ + --data "{\"email\":\"johndoe@supabase.io\"}" \ + "https://example.supabase.co/users" \ No newline at end of file