Skip to content

Commit 270ea92

Browse files
authored
Merge pull request #152 from vapor/count-fixes
count fixes
2 parents 2011e1b + 3635d70 commit 270ea92

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

Sources/Fluent/Query/Query.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,20 @@ extension QueryRepresentable {
158158
public func count() throws -> Int {
159159
let query = try makeQuery()
160160
query.action = .count
161-
return try query.raw().int ?? 0
161+
162+
let raw = try query.raw()
163+
164+
let count: Int
165+
166+
if let c = raw.int {
167+
count = c
168+
} else if let c = raw[0, "_fluent_count"]?.int {
169+
count = c
170+
} else {
171+
throw QueryError.notSupported("Count not supported.")
172+
}
173+
174+
return count
162175
}
163176

164177
//MARK: Create

Sources/Fluent/SQL/GeneralSQLSerializer.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ open class GeneralSQLSerializer: SQLSerializer {
7373
var statement: [String] = []
7474
var values: [Node] = []
7575

76-
statement += "SELECT COUNT(*) FROM"
76+
statement += "SELECT COUNT(*) as _fluent_count FROM"
7777
statement += sql(table)
7878

7979
if !unions.isEmpty {

Tests/FluentTests/SQLSerializerTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class SQLSerializerTests: XCTestCase {
7474
let sql = SQL.count(table: "users", filters: [], joins: [])
7575
let (statement, values) = serialize(sql)
7676

77-
XCTAssertEqual(statement, "SELECT COUNT(*) FROM `users`")
77+
XCTAssertEqual(statement, "SELECT COUNT(*) as _fluent_count FROM `users`")
7878
XCTAssert(values.isEmpty)
7979
}
8080

@@ -83,7 +83,7 @@ class SQLSerializerTests: XCTestCase {
8383
let sql = SQL.count(table: "users", filters: [filter], joins: [])
8484
let (statement, values) = serialize(sql)
8585

86-
XCTAssertEqual(statement, "SELECT COUNT(*) FROM `users` WHERE `users`.`age` >= ?")
86+
XCTAssertEqual(statement, "SELECT COUNT(*) as _fluent_count FROM `users` WHERE `users`.`age` >= ?")
8787
XCTAssertEqual(values.first?.int, 21)
8888
XCTAssertEqual(values.count, 1)
8989
}
@@ -94,7 +94,7 @@ class SQLSerializerTests: XCTestCase {
9494
let select = SQL.count(table: "friends", filters: [filter], joins: [])
9595
let (statement, values) = serialize(select)
9696

97-
XCTAssertEqual(statement, "SELECT COUNT(*) FROM `friends` WHERE `users`.`name` != ?")
97+
XCTAssertEqual(statement, "SELECT COUNT(*) as _fluent_count FROM `friends` WHERE `users`.`name` != ?")
9898
XCTAssertEqual(values.first?.string, "duck")
9999
XCTAssertEqual(values.count, 1)
100100
}
@@ -105,7 +105,7 @@ class SQLSerializerTests: XCTestCase {
105105
let select = SQL.count(table: "friends", filters: [filter], joins: [])
106106
let (statement, values) = serialize(select)
107107

108-
XCTAssertEqual(statement, "SELECT COUNT(*) FROM `friends` WHERE `users`.`name` LIKE ?")
108+
XCTAssertEqual(statement, "SELECT COUNT(*) as _fluent_count FROM `friends` WHERE `users`.`name` LIKE ?")
109109
XCTAssertEqual(values.first?.string, "duc%")
110110
XCTAssertEqual(values.count, 1)
111111
}

Tests/FluentTests/Utilities/Dummy.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ class DummyDriver: Driver {
3030
}
3131

3232
func query<T: Entity>(_ query: Query<T>) throws -> Node {
33+
if query.action == .count {
34+
return 0
35+
}
36+
3337
return .array([])
3438
}
3539

0 commit comments

Comments
 (0)