Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a7b7e34

Browse files
Fix PostgresError conformance to DatabaseError (vapor#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)

AltStyle によって変換されたページ (->オリジナル) /