Skip to content

Commit 8c35817

Browse files
committed
Subqueries
1 parent da43834 commit 8c35817

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

CoreDataQueryInterface/Miscellanea.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ public func alias(_ expression: KeyPathExpressionConvertible, type: NSAttributeT
2929
return alias(expression, name: expression.cdqiName, type: type)
3030
}
3131

32-
public func subquery<E: EntityAttribute>(_ items: E, _ query: (E) -> NSPredicate) -> ExpressionConvertible where E: KeyPathExpressionConvertible {
32+
public func subquery<E: EntityAttribute>(_ items: E, _ query: (E) -> NSPredicate) -> ExpressionConvertible where E: ExpressionConvertible {
3333
let uuid = NSUUID().uuidString
3434
let index = uuid.index(uuid.startIndex, offsetBy: 6)
3535
let randomString = uuid.substring(to: index)
3636
let variable = "v\(randomString)"
3737
return NSExpression(forSubquery: items.cdqiExpression, usingIteratorVariable: variable, predicate: query(E(variable: variable)))
3838
}
3939

40-
public func subqueryCount<E: EntityAttribute>(_ items: E, _ query: (E) -> NSPredicate) -> FunctionExpression where E: KeyPathExpressionConvertible {
40+
public func subqueryCount<E: EntityAttribute>(_ items: E, _ query: (E) -> NSPredicate) -> FunctionExpression where E: ExpressionConvertible {
4141
return count(subquery(items, query))
4242
}

CoreDataQueryInterfaceTests/FilterTests.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,14 @@ class FilterTests : BaseTestCase {
8686
XCTAssertEqual(highSalaryCount, 17)
8787
}
8888

89-
// func testNumberOfDepartmentsWithEmployeesWhoseLastNamesStartWithSUsingSubquery() {
90-
// let departmentCount = try! managedObjectContext.from(Department).filter{ department in
91-
// department.employees.subquery {
92-
// some($0.lastName.beginsWith("S", options: .CaseInsensitivePredicateOption))
93-
// }.cdqiCount() > 0
94-
// }.count()
95-
// XCTAssertEqual(departmentCount, 2)
96-
// }
89+
func testNumberOfDepartmentsWithEmployeesWhoseLastNamesStartWithSUsingSubquery() {
90+
let departmentCount = try! managedObjectContext.from(Department.self).filter{ department in
91+
subquery(department.employees) { (employee: EmployeeAttribute) in
92+
some(employee.lastName.cdqiBeginsWith("S", options: .caseInsensitive))
93+
}.cdqiCount() > 0
94+
}.count()
95+
XCTAssertEqual(departmentCount, 2)
96+
}
9797

9898
func testNumberOfDepartmentsWithNoSalariesLessThanOrEqualTo() {
9999
let departmentCount = try! managedObjectContext.from(Department.self).filter {

0 commit comments

Comments
 (0)