Skip to content

Commit e3b2b5f

Browse files
authored
Merge pull request vapor#81 from vkill/patch-1
Fix PostgreSQLUpsert.upsert bug
2 parents f44de16 + 2b0e8a9 commit e3b2b5f

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

Sources/PostgreSQL/SQL/PostgreSQLUpsert.swift

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ public struct PostgreSQLUpsert: SQLSerializable {
66
public typealias Expression = PostgreSQLExpression
77

88
/// See `SQLUpsert`.
9-
public static func upsert(_ column: [PostgreSQLColumnIdentifier], _ values: [(Identifier, Expression)]) -> PostgreSQLUpsert {
10-
return self.init(columns: [.column(nil, .identifier("id"))], values: values)
9+
public static func upsert(_ columns: [PostgreSQLColumnIdentifier]?, _ values: [(Identifier, Expression)]) -> PostgreSQLUpsert {
10+
if let columns = columns, !columns.isEmpty {
11+
return self.init(columns: columns, values: values)
12+
} else {
13+
return self.init(columns: [.column(nil, .identifier("id"))], values: values)
14+
}
1115
}
1216

1317
/// See `SQLUpsert`.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import PostgreSQL
2+
import XCTest
3+
4+
class PostgreSQLUpsertTests: XCTestCase {
5+
6+
func testUpsert() throws {
7+
let values: [(PostgreSQLUpsert.Identifier, PostgreSQLUpsert.Expression)] = []
8+
9+
var upsert: PostgreSQLUpsert
10+
11+
upsert = PostgreSQLUpsert.upsert(nil, values)
12+
XCTAssertEqual(upsert.columns, [PostgreSQLColumnIdentifier.column(nil, .identifier("id"))])
13+
14+
upsert = PostgreSQLUpsert.upsert([], values)
15+
XCTAssertEqual(upsert.columns, [PostgreSQLColumnIdentifier.column(nil, .identifier("id"))])
16+
17+
upsert = PostgreSQLUpsert.upsert([.column(nil, .identifier("field"))], values)
18+
XCTAssertEqual(upsert.columns, [PostgreSQLColumnIdentifier.column(nil, .identifier("field"))])
19+
}
20+
21+
static var allTests = [
22+
("testUpsert", testUpsert),
23+
]
24+
}

0 commit comments

Comments
 (0)