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 1f74810

Browse files
implement ALTER table support
1 parent d21dcc2 commit 1f74810

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

‎Sources/FluentPostgreSQL/PostgreSQLDatabase+SchemaSupporting.swift‎

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,15 @@ extension PostgreSQLQuery {
3434
columns: fluent.createColumns,
3535
constraints: fluent.createConstraints
3636
))
37-
case .alter: fatalError()
37+
case .alter:
38+
query = .alterTable(.init(
39+
ifExists: false,
40+
name: fluent.table,
41+
addColumns: fluent.createColumns,
42+
dropColumns: fluent.deleteColumns.map { 0ドル.name },
43+
addConstraints: fluent.createConstraints,
44+
dropConstraints: fluent.deleteConstraints.map { 0ドル.name ?? "unknown" }
45+
))
3846
case .drop:
3947
query = .dropTable(.init(name: fluent.table, ifExists: false))
4048
}
@@ -61,7 +69,7 @@ extension PostgreSQLDatabase: SchemaSupporting {
6169

6270
public static func schemaField(for type: Any.Type, isIdentifier: Bool, _ column: PostgreSQLQuery.Column) -> PostgreSQLQuery.ColumnDefinition {
6371
var constraints: [PostgreSQLQuery.ColumnConstraint] = []
64-
let dataType: PostgreSQLQuery.DataType
72+
var dataType: PostgreSQLQuery.DataType
6573

6674
var type = type
6775
if let optional = type as? AnyOptionalType.Type {
@@ -90,10 +98,19 @@ extension PostgreSQLDatabase: SchemaSupporting {
9098
}
9199

92100
if isIdentifier {
93-
switch dataType {
94-
case .smallint, .integer, .bigint:
95-
constraints.append(.init(.generated(.byDefault)))
96-
default: break
101+
if _globalEnableIdentityColumns {
102+
switch dataType {
103+
case .smallint, .integer, .bigint:
104+
constraints.append(.init(.generated(.byDefault)))
105+
default: break
106+
}
107+
} else {
108+
switch dataType {
109+
case .smallint: dataType = .smallserial
110+
case .integer: dataType = .serial
111+
case .bigint: dataType = .bigserial
112+
default: break
113+
}
97114
}
98115

99116
// create a unique name for the primary key since it will be added

‎Tests/FluentPostgreSQLTests/FluentPostgreSQLTests.swift‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ class FluentPostgreSQLTests: XCTestCase {
325325
var id: Int?
326326
let name: String
327327
let type: PlanetType
328+
let test: String?
328329

329330
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
330331
return PostgreSQLDatabase.create(Planet.self, on: conn) { builder in
@@ -346,6 +347,10 @@ class FluentPostgreSQLTests: XCTestCase {
346347

347348
let rows = try Planet.query(on: conn).filter(\.type == .gasGiant).all().wait()
348349
XCTAssertEqual(rows.count, 0)
350+
351+
try PostgreSQLDatabase.update(Planet.self, on: conn) { builder in
352+
builder.field(for: \.test)
353+
}.wait()
349354
}
350355

351356
func testContains() throws {

0 commit comments

Comments
(0)

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