Support IN condition against subquery
Closes #94 Signed-off-by: Stephen Celis <stephen@stephencelis.com>
This commit is contained in:
Родитель
fc086d0db4
Коммит
849d4efe86
|
@ -536,6 +536,11 @@ class ExpressionTests: SQLiteTestCase {
|
|||
AssertSQLContains("(\"age\" IN (20))", contains(Set([20]), age))
|
||||
}
|
||||
|
||||
func test_containsFunction_withValueExpressionAndQuery_buildsInExpression() {
|
||||
let query = users.select(max(age)).group(id)
|
||||
AssertSQLContains("(\"id\" IN (SELECT max(\"age\") FROM \"users\" GROUP BY \"id\"))", contains(query, id))
|
||||
}
|
||||
|
||||
func test_plusEquals_withStringExpression_buildsSetter() {
|
||||
users.update(email += email)!
|
||||
users.update(email += email2)!
|
||||
|
|
|
@ -769,7 +769,6 @@ public typealias Star = (Expression<Binding>?, Expression<Binding>?) -> Expressi
|
|||
public func * (Expression<Binding>?, Expression<Binding>?) -> Expression<()> {
|
||||
return Expression(literal: "*")
|
||||
}
|
||||
|
||||
public func contains<V: Value, C: CollectionType where C.Generator.Element == V, C.Index.Distance == Int>(values: C, column: Expression<V>) -> Expression<Bool> {
|
||||
let templates = join(", ", [String](count: count(values), repeatedValue: "?"))
|
||||
return infix("IN", column, Expression<V>(literal: "(\(templates))", map(values) { $0.datatypeValue }))
|
||||
|
@ -777,6 +776,9 @@ public func contains<V: Value, C: CollectionType where C.Generator.Element == V,
|
|||
public func contains<V: Value, C: CollectionType where C.Generator.Element == V, C.Index.Distance == Int>(values: C, column: Expression<V?>) -> Expression<Bool> {
|
||||
return contains(values, Expression<V>(column))
|
||||
}
|
||||
public func contains<V: Value>(values: Query, column: Expression<V>) -> Expression<Bool> {
|
||||
return infix("IN", column, wrap("", values.selectExpression) as Expression<()>)
|
||||
}
|
||||
|
||||
// MARK: - Modifying
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче