From 8e3fd559622f96b59f1cc9882dcfd6361635f3de Mon Sep 17 00:00:00 2001 From: Ross MacLeod Date: Thu, 7 Sep 2017 12:06:49 -0400 Subject: [PATCH] add support for ORDER and LIMIT on UPDATE and DELETE --- Sources/SQLite/Typed/Query.swift | 8 ++++++-- Tests/SQLiteTests/QueryTests.swift | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Sources/SQLite/Typed/Query.swift b/Sources/SQLite/Typed/Query.swift index c9d2ea9c..2ab51e45 100644 --- a/Sources/SQLite/Typed/Query.swift +++ b/Sources/SQLite/Typed/Query.swift @@ -648,7 +648,9 @@ extension QueryType { tableName(), Expression(literal: "SET"), ", ".join(values.map { " = ".join([$0.column, $0.value]) }), - whereClause + whereClause, + orderClause, + limitOffsetClause ] return Update(" ".join(clauses.flatMap { $0 }).expression) @@ -660,7 +662,9 @@ extension QueryType { let clauses: [Expressible?] = [ Expression(literal: "DELETE FROM"), tableName(), - whereClause + whereClause, + orderClause, + limitOffsetClause ] return Delete(" ".join(clauses.flatMap { $0 }).expression) diff --git a/Tests/SQLiteTests/QueryTests.swift b/Tests/SQLiteTests/QueryTests.swift index 2cf164c6..e725105b 100644 --- a/Tests/SQLiteTests/QueryTests.swift +++ b/Tests/SQLiteTests/QueryTests.swift @@ -245,6 +245,13 @@ class QueryTests : XCTestCase { ) } + func test_update_compilesUpdateLimitOrderExpression() { + AssertSQL( + "UPDATE \"users\" SET \"age\" = 30 ORDER BY \"id\" LIMIT 1", + users.order(id).limit(1).update(age <- 30) + ) + } + func test_delete_compilesDeleteExpression() { AssertSQL( "DELETE FROM \"users\" WHERE (\"id\" = 1)", @@ -252,6 +259,13 @@ class QueryTests : XCTestCase { ) } + func test_delete_compilesDeleteLimitOrderExpression() { + AssertSQL( + "DELETE FROM \"users\" ORDER BY \"id\" LIMIT 1", + users.order(id).limit(1).delete() + ) + } + func test_delete_compilesExistsExpression() { AssertSQL( "SELECT EXISTS (SELECT * FROM \"users\")",