Support IN condition against subquery

Closes #94

Signed-off-by: Stephen Celis <stephen@stephencelis.com>
This commit is contained in:
Stephen Celis 2015-04-11 10:27:24 -04:00
Родитель fc086d0db4
Коммит 849d4efe86
2 изменённых файлов: 8 добавлений и 1 удалений

Просмотреть файл

@ -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