Skip to content

Commit 5e0c4cf

Browse files
authored
Merge pull request #39 from vapor/dbkit-gm
dbkit 1.0.0 gm
2 parents e7011af + fbe86ed commit 5e0c4cf

8 files changed

+56
-51
lines changed

Diff for: Package.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ let package = Package(
99
],
1010
dependencies: [
1111
// 🌎 Utility package containing tools for byte manipulation, Codable, OS APIs, and debugging.
12-
.package(url: "https://github.com/vapor/core.git", from: "3.0.0-rc.2"),
12+
.package(url: "https://github.com/vapor/core.git", from: "3.0.0"),
1313

1414
// Swift ORM framework (queries, models, and relations) for building NoSQL and SQL database integrations.
15-
.package(url: "https://github.com/vapor/fluent.git", from: "3.0.0-rc.2"),
15+
.package(url: "https://github.com/vapor/fluent.git", from: "3.0.0-rc"),
1616

1717
// 🐘 Non-blocking, event-driven Swift client for PostgreSQL.
18-
.package(url: "https://github.com/vapor/postgresql.git", from: "1.0.0-rc.2"),
18+
.package(url: "https://github.com/vapor/postgresql.git", from: "1.0.0"),
1919
],
2020
targets: [
2121
.target(name: "FluentPostgreSQL", dependencies: ["Async", "Fluent", "FluentSQL", "PostgreSQL"]),

Diff for: Sources/FluentPostgreSQL/FluentPostgreSQLProvider.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public final class FluentPostgreSQLProvider: Provider {
2424

2525
/// See `Provider.boot(_:)`
2626
public func willBoot(_ worker: Container) throws -> Future<Void> {
27-
return worker.withConnection(to: .psql) { conn in
27+
return worker.withPooledConnection(to: .psql) { conn in
2828
return conn.simpleQuery("SELECT current_setting('server_version') as version").map(to: Void.self) { rows in
2929
_serverVersion = try rows[0].firstValue(forColumn: "version")!.decode(String.self)
3030
if let versionString = _serverVersion {

Diff for: Sources/FluentPostgreSQL/PostgreSQLDatabase+LogSupporting.swift

-14
This file was deleted.

Diff for: Sources/FluentPostgreSQL/PostgreSQLDatabase+QuerySupporting.swift

+23-20
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Core
33
import FluentSQL
44

55
/// Adds ability to do basic Fluent queries using a `PostgreSQLDatabase`.
6-
extension PostgreSQLDatabase: QuerySupporting, CustomSQLSupporting {
6+
extension PostgreSQLDatabase: QuerySupporting, CustomSQLSupporting, KeyedCacheSupporting {
77
/// See `QuerySupporting.execute`
88
public static func execute(
99
query: DatabaseQuery<PostgreSQLDatabase>,
@@ -15,15 +15,26 @@ extension PostgreSQLDatabase: QuerySupporting, CustomSQLSupporting {
1515
// Convert Fluent `DatabaseQuery` to generic FluentSQL `DataQuery`
1616
var (sqlQuery, bindValues) = query.makeDataQuery()
1717

18-
// If the query has an Encodable model attached serialize it.
19-
// Dictionary keys should be added to the DataQuery as columns.
20-
// Dictionary values should be added to the parameterized array.
21-
var modelData: [PostgreSQLData] = []
22-
modelData.reserveCapacity(query.data.count)
23-
for (field, data) in query.data {
24-
if case .create = query.action, data.isNull && field.name == "id" { continue } // bad hack
25-
sqlQuery.columns.append(DataColumn(table: field.entity, name: field.name))
26-
modelData.append(data)
18+
/// Convert params
19+
let parameters: [PostgreSQLData]
20+
21+
switch sqlQuery {
22+
case .manipulation(var m):
23+
// If the query has an Encodable model attached serialize it.
24+
// Dictionary keys should be added to the DataQuery as columns.
25+
// Dictionary values should be added to the parameterized array.
26+
var modelData: [PostgreSQLData] = []
27+
modelData.reserveCapacity(query.data.count)
28+
m.columns = query.data.compactMap { (field, data) in
29+
// if case .create = query.action, data.isNull && field.name == "id" { return nil } // bad hack
30+
modelData.append(data)
31+
let col = DataColumn(table: field.entity, name: field.name)
32+
return .init(column: col, value: .placeholder)
33+
}
34+
parameters = modelData + bindValues
35+
sqlQuery = .manipulation(m)
36+
case .query: parameters = bindValues
37+
case .definition: parameters = []
2738
}
2839

2940
/// Apply custom sql transformations
@@ -33,18 +44,10 @@ extension PostgreSQLDatabase: QuerySupporting, CustomSQLSupporting {
3344

3445
// Create a PostgreSQL-flavored SQL serializer to create a SQL string
3546
let sqlSerializer = PostgreSQLSQLSerializer()
36-
let sqlString = sqlSerializer.serialize(data: sqlQuery)
37-
38-
/// Convert params
39-
let parameters: [PostgreSQLData] = modelData + bindValues
40-
41-
/// Log supporting
42-
if let logger = connection.logger {
43-
logger.log(query: sqlString, parameters: parameters)
44-
}
47+
let sqlString = sqlSerializer.serialize(sqlQuery)
4548

4649
// Run the query
47-
return try connection.query(sqlString, parameters) { row in
50+
return connection.query(sqlString, parameters) { row in
4851
var res: [QueryField: PostgreSQLData] = [:]
4952
for (col, data) in row {
5053
let field = QueryField(entity: tableNameCache.storage[col.tableOID], name: col.name)

Diff for: Sources/FluentPostgreSQL/PostgreSQLDatabase+SchemaSupporting.swift

+9-4
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,16 @@ extension PostgreSQLDatabase: SchemaSupporting, IndexSupporting {
6868
return Future.flatMap(on: connection) {
6969
var schemaQuery = schema.makeSchemaQuery(dataTypeFactory: dataType)
7070
schema.applyReferences(to: &schemaQuery)
71-
let sqlString = PostgreSQLSQLSerializer().serialize(schema: schemaQuery)
72-
if let logger = connection.logger {
73-
logger.log(query: sqlString, parameters: [])
71+
72+
var sqlQuery: SQLQuery = .definition(schemaQuery)
73+
74+
/// Apply custom sql transformations
75+
for customSQL in schema.customSQL {
76+
customSQL.closure(&sqlQuery)
7477
}
75-
return try connection.query(sqlString).map(to: Void.self) { rows in
78+
79+
let sqlString = PostgreSQLSQLSerializer().serialize(sqlQuery)
80+
return connection.query(sqlString).map(to: Void.self) { rows in
7681
assert(rows.count == 0)
7782
}.flatMap(to: Void.self) {
7883
/// handle indexes as separate query

Diff for: Sources/FluentPostgreSQL/PostgreSQLSQLSerializer.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ internal class PostgreSQLSQLSerializer: SQLSerializer {
1010
self.placeholderOffset = 1
1111
}
1212

13-
/// See `SQLSerializer.makeEscapedString(from:)`
13+
/// See `SQLSerializer`
1414
func makeEscapedString(from string: String) -> String {
1515
return "\"\(string)\""
1616
}
1717

18-
/// See `SQLSerializer.makePlaceholder(name:)`
19-
func makePlaceholder(name: String) -> String {
18+
/// See `SQLSerializer`
19+
func makePlaceholder() -> String {
2020
defer { placeholderOffset += 1 }
2121
return "$\(placeholderOffset)"
2222
}

Diff for: Tests/FluentPostgreSQLTests/FluentPostgreSQLTests.swift

+1-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class FluentPostgreSQLTests: XCTestCase {
2727
)
2828
database = PostgreSQLDatabase(config: config)
2929
let eventLoop = MultiThreadedEventLoopGroup(numThreads: 1)
30-
benchmarker = Benchmarker(database, on: eventLoop, onFail: XCTFail)
30+
benchmarker = try! Benchmarker(database, on: eventLoop, onFail: XCTFail)
3131
}
3232

3333
func testSchema() throws {
@@ -136,7 +136,6 @@ class FluentPostgreSQLTests: XCTestCase {
136136

137137

138138
func testUpdate() throws {
139-
benchmarker.database.enableLogging(using: .print)
140139
let conn = try benchmarker.pool.requestConnection().wait()
141140
defer { try? User.revert(on: conn).wait() }
142141
try User.prepare(on: conn).wait()
@@ -148,7 +147,6 @@ class FluentPostgreSQLTests: XCTestCase {
148147
}
149148

150149
func testGH24() throws {
151-
benchmarker.database.enableLogging(using: .print)
152150
let conn = try benchmarker.pool.requestConnection().wait()
153151
defer { try? Allergy.revert(on: conn).wait() }
154152
try Allergy.prepare(on: conn).wait()
@@ -179,7 +177,6 @@ class FluentPostgreSQLTests: XCTestCase {
179177
try print(Pet.reflectProperties())
180178

181179
/// - prepare db
182-
benchmarker.database.enableLogging(using: .print)
183180
let conn = try benchmarker.pool.requestConnection().wait()
184181
defer { try? Pet.revert(on: conn).wait() }
185182
try Pet.prepare(on: conn).wait()
@@ -196,7 +193,6 @@ class FluentPostgreSQLTests: XCTestCase {
196193
}
197194

198195
func testPersistsDateMillisecondPart() throws {
199-
database.enableLogging(using: DatabaseLogger(handler: { print($0) }))
200196
let conn = try benchmarker.pool.requestConnection().wait()
201197
defer { try? DefaultTest.revert(on: conn).wait() }
202198
try DefaultTest.prepare(on: conn).wait()
@@ -220,7 +216,6 @@ class FluentPostgreSQLTests: XCTestCase {
220216
}
221217

222218
/// - prepare db
223-
benchmarker.database.enableLogging(using: .print)
224219
let conn = try benchmarker.pool.requestConnection().wait()
225220
defer { try? Foo.revert(on: conn).wait() }
226221
try Foo.prepare(on: conn).wait()

Diff for: circle.yml

+16
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
version: 2
22

33
jobs:
4+
5+
6+
47
macos:
58
macos:
69
xcode: "9.2"
710
steps:
811
- checkout
912
- run: swift build
1013
- run: swift test
14+
15+
16+
17+
1118
linux:
1219
docker:
1320
- image: codevapor/swift:4.1
@@ -23,6 +30,14 @@ jobs:
2330
- run:
2431
name: Run unit tests
2532
command: swift test
33+
34+
35+
36+
linux-release:
37+
docker:
38+
- image: codevapor/swift:4.1
39+
steps:
40+
- checkout
2641
- run:
2742
name: Compile code with optimizations
2843
command: swift build -c release
@@ -33,6 +48,7 @@ workflows:
3348
tests:
3449
jobs:
3550
- linux
51+
- linux-release
3652
# - macos
3753

3854
nightly:

0 commit comments

Comments
 (0)