Skip to content

Commit a7b7e34

Browse files
authored
Fix PostgresError conformance to DatabaseError (#143)
* fix PostgresError conformance to DatabaseError * delete linux test files
1 parent d0fe766 commit a7b7e34

File tree

2 files changed

+82
-4
lines changed

2 files changed

+82
-4
lines changed

Sources/FluentPostgresDriver/PostgresError+Database.swift

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,72 @@ import FluentSQL
22

33
extension PostgresError: DatabaseError {
44
public var isSyntaxError: Bool {
5-
return false
5+
switch self.code {
6+
case .syntaxErrorOrAccessRuleViolation,
7+
.syntaxError,
8+
.insufficientPrivilege,
9+
.cannotCoerce,
10+
.groupingError,
11+
.windowingError,
12+
.invalidRecursion,
13+
.invalidForeignKey,
14+
.invalidName,
15+
.nameTooLong,
16+
.reservedName,
17+
.datatypeMismatch,
18+
.indeterminateDatatype,
19+
.collationMismatch,
20+
.indeterminateCollation,
21+
.wrongObjectType,
22+
.undefinedColumn,
23+
.undefinedFunction,
24+
.undefinedTable,
25+
.undefinedParameter,
26+
.undefinedObject,
27+
.duplicateColumn,
28+
.duplicateCursor,
29+
.duplicateDatabase,
30+
.duplicateFunction,
31+
.duplicatePreparedStatement,
32+
.duplicateSchema,
33+
.duplicateTable,
34+
.duplicateAlias,
35+
.duplicateObject,
36+
.ambiguousColumn,
37+
.ambiguousFunction,
38+
.ambiguousParameter,
39+
.ambiguousAlias,
40+
.invalidColumnReference,
41+
.invalidColumnDefinition,
42+
.invalidCursorDefinition,
43+
.invalidDatabaseDefinition,
44+
.invalidFunctionDefinition,
45+
.invalidPreparedStatementDefinition,
46+
.invalidSchemaDefinition,
47+
.invalidTableDefinition,
48+
.invalidObjectDefinition:
49+
return true
50+
default:
51+
return false
52+
}
653
}
7-
54+
855
public var isConnectionClosed: Bool {
956
return false
1057
}
11-
58+
1259
public var isConstraintFailure: Bool {
13-
return false
60+
switch self.code {
61+
case .integrityConstraintViolation,
62+
.restrictViolation,
63+
.notNullViolation,
64+
.foreignKeyViolation,
65+
.uniqueViolation,
66+
.checkViolation,
67+
.exclusionViolation:
68+
return true
69+
default:
70+
return false
71+
}
1472
}
1573
}

Tests/FluentPostgresDriverTests/FluentPostgresDriverTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,26 @@ final class FluentPostgresDriverTests: XCTestCase {
3333
func testTransaction() throws { try self.benchmarker.testTransaction() }
3434
func testUnique() throws { try self.benchmarker.testUnique() }
3535

36+
func testDatabaseError() throws {
37+
let sql = (self.db as! SQLDatabase)
38+
do {
39+
try sql.raw("asd").run().wait()
40+
} catch let error as DatabaseError where error.isSyntaxError {
41+
// PASS
42+
} catch {
43+
XCTFail("\(error)")
44+
}
45+
do {
46+
try sql.raw("CREATE TABLE foo (name TEXT UNIQUE)").run().wait()
47+
try sql.raw("INSERT INTO foo (name) VALUES ('bar')").run().wait()
48+
try sql.raw("INSERT INTO foo (name) VALUES ('bar')").run().wait()
49+
} catch let error as DatabaseError where error.isConstraintFailure {
50+
// pass
51+
} catch {
52+
XCTFail("\(error)")
53+
}
54+
}
55+
3656
func testBlob() throws {
3757
final class Foo: Model {
3858
static let schema = "foos"

0 commit comments

Comments
 (0)