Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 21 additions & 23 deletions Sources/StructuredQueriesCore/PrimaryKeyed.swift
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,17 @@ extension PrimaryKeyedTable {
public static func find(
_ primaryKey: some QueryExpression<TableColumns.PrimaryKey>
) -> Where<Self> {
Self.where { $0.primaryKey.eq(primaryKey) }
Self.find([primaryKey])
}

/// A where clause filtered by primary keys.
///
/// - Parameter primaryKey: Primary keys identifying table rows.
/// - Returns: A `WHERE` clause.
public static func find(
_ primaryKeys: some Sequence<some QueryExpression<TableColumns.PrimaryKey>>
) -> Where<Self> {
Self.where { $0.primaryKey.in(primaryKeys) }
}

public var primaryKey: PrimaryKey.QueryOutput {
Expand All @@ -105,7 +115,7 @@ extension TableDraft {
_ primaryKey: some QueryExpression<PrimaryTable.TableColumns.PrimaryKey>
) -> Where<Self> {
Self.where { _ in
PrimaryTable.columns.primaryKey.eq(primaryKey)
PrimaryTable.columns.primaryKey.in([primaryKey])
}
}
}
Expand All @@ -116,7 +126,7 @@ extension Where where From: PrimaryKeyedTable {
/// - Parameter primaryKey: A primary key.
/// - Returns: A where clause with the added primary key.
public func find(_ primaryKey: some QueryExpression<From.TableColumns.PrimaryKey>) -> Self {
self.where { $0.primaryKey.eq(primaryKey) }
self.where { $0.primaryKey.in([primaryKey]) }
}
}

Expand All @@ -125,12 +135,8 @@ extension Where where From: TableDraft {
///
/// - Parameter primaryKey: A primary key.
/// - Returns: A where clause with the added primary key.
public func find(_ primaryKey: From.PrimaryTable.TableColumns.PrimaryKey.QueryOutput) -> Self {
self.where { _ in
From.PrimaryTable.columns.primaryKey.eq(
From.PrimaryTable.TableColumns.PrimaryKey(queryOutput: primaryKey)
)
}
public func find(_ primaryKey: some QueryExpression<From.PrimaryTable.TableColumns.PrimaryKey>) -> Self {
self.where { $0.primaryKey.in([primaryKey]) }
}
}

Expand Down Expand Up @@ -162,7 +168,7 @@ extension Update where From: PrimaryKeyedTable {
/// - Parameter primaryKey: A primary key identifying a table row.
/// - Returns: An update statement filtered by the given key.
public func find(_ primaryKey: some QueryExpression<From.TableColumns.PrimaryKey>) -> Self {
self.where { $0.primaryKey.eq(primaryKey) }
self.where { $0.primaryKey.in([primaryKey]) }
}
}

Expand All @@ -171,12 +177,8 @@ extension Update where From: TableDraft {
///
/// - Parameter primaryKey: A primary key identifying a table row.
/// - Returns: An update statement filtered by the given key.
public func find(_ primaryKey: From.PrimaryTable.TableColumns.PrimaryKey.QueryOutput) -> Self {
self.where { _ in
From.PrimaryTable.columns.primaryKey.eq(
From.PrimaryTable.TableColumns.PrimaryKey(queryOutput: primaryKey)
)
}
public func find(_ primaryKey: some QueryExpression<From.PrimaryTable.TableColumns.PrimaryKey>) -> Self {
self.where { $0.primaryKey.in([primaryKey]) }
}
}

Expand All @@ -186,7 +188,7 @@ extension Delete where From: PrimaryKeyedTable {
/// - Parameter primaryKey: A primary key identifying a table row.
/// - Returns: A delete statement filtered by the given key.
public func find(_ primaryKey: some QueryExpression<From.TableColumns.PrimaryKey>) -> Self {
self.where { $0.primaryKey.eq(primaryKey) }
self.where { $0.primaryKey.in([primaryKey]) }
}
}

Expand All @@ -195,11 +197,7 @@ extension Delete where From: TableDraft {
///
/// - Parameter primaryKey: A primary key identifying a table row.
/// - Returns: A delete statement filtered by the given key.
public func find(_ primaryKey: From.PrimaryTable.TableColumns.PrimaryKey.QueryOutput) -> Self {
self.where { _ in
From.PrimaryTable.columns.primaryKey.eq(
From.PrimaryTable.TableColumns.PrimaryKey(queryOutput: primaryKey)
)
}
public func find(_ primaryKey: some QueryExpression<From.PrimaryTable.TableColumns.PrimaryKey>) -> Self {
self.where { $0.primaryKey.in([primaryKey]) }
}
}
48 changes: 38 additions & 10 deletions Tests/StructuredQueriesTests/PrimaryKeyedTableTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ extension SnapshotTests {
"""
UPDATE "reminders"
SET "title" = ("reminders"."title" || '!!!')
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
RETURNING "title"
"""
} results: {
Expand All @@ -50,7 +50,7 @@ extension SnapshotTests {
"""
UPDATE "reminders"
SET "title" = ("reminders"."title" || '???')
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
RETURNING "title"
"""
} results: {
Expand All @@ -69,7 +69,7 @@ extension SnapshotTests {
) {
"""
DELETE FROM "reminders"
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
RETURNING "reminders"."id"
"""
} results: {
Expand All @@ -86,7 +86,7 @@ extension SnapshotTests {
) {
"""
DELETE FROM "reminders"
WHERE ("reminders"."id" = 2)
WHERE ("reminders"."id" IN (2))
RETURNING "reminders"."id"
"""
} results: {
Expand All @@ -105,7 +105,7 @@ extension SnapshotTests {
"""
SELECT "reminders"."id", "reminders"."title"
FROM "reminders"
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
"""
} results: {
"""
Expand All @@ -121,7 +121,7 @@ extension SnapshotTests {
"""
SELECT "reminders"."id", "reminders"."title"
FROM "reminders"
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
"""
} results: {
"""
Expand All @@ -137,7 +137,7 @@ extension SnapshotTests {
"""
SELECT "reminders"."id", "reminders"."title"
FROM "reminders"
WHERE ("reminders"."id" = 2)
WHERE ("reminders"."id" IN (2))
"""
} results: {
"""
Expand All @@ -147,13 +147,41 @@ extension SnapshotTests {
"""
}

assertQuery(
Reminder.select { ($0.id, $0.title) }.find(Reminder.select(\.id))
) {
"""
SELECT "reminders"."id", "reminders"."title"
FROM "reminders"
WHERE ("reminders"."id" IN ((
SELECT "reminders"."id"
FROM "reminders"
)))
"""
} results: {
"""
┌────┬────────────────────────────┐
│ 1 │ "Groceries" │
│ 2 │ "Haircut" │
│ 3 │ "Doctor appointment" │
│ 4 │ "Take a walk" │
│ 5 │ "Buy concert tickets" │
│ 6 │ "Pick up kids from school" │
│ 7 │ "Get laundry" │
│ 8 │ "Take out trash" │
│ 9 │ "Call accountant" │
│ 10 │ "Send weekly emails" │
└────┴────────────────────────────┘
"""
}

assertQuery(
Reminder.Draft.select { ($0.id, $0.title) }.find(2)
) {
"""
SELECT "reminders"."id", "reminders"."title"
FROM "reminders"
WHERE ("reminders"."id" = 2)
WHERE ("reminders"."id" IN (2))
"""
} results: {
"""
Expand All @@ -175,7 +203,7 @@ extension SnapshotTests {
SELECT "reminders"."title", "remindersLists"."title"
FROM "reminders"
JOIN "remindersLists" ON ("reminders"."remindersListID" = "remindersLists"."id")
WHERE ("reminders"."id" = 2)
WHERE ("reminders"."id" IN (2))
"""
} results: {
"""
Expand Down Expand Up @@ -214,7 +242,7 @@ extension SnapshotTests {
"""
SELECT "rows"."id", "rows"."isDeleted", "rows"."isNotDeleted"
FROM "rows"
WHERE ("rows"."id" = '00000000-0000-0000-0000-000000000001')
WHERE ("rows"."id" IN ('00000000-0000-0000-0000-000000000001'))
"""
} results: {
"""
Expand Down
4 changes: 2 additions & 2 deletions Tests/StructuredQueriesTests/UpdateTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ extension SnapshotTests {
"""
UPDATE "reminders"
SET "dueDate" = CASE WHEN ("reminders"."dueDate" IS NULL) THEN '2018-01-29 00:08:00.000' END
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
RETURNING "dueDate"
"""
} results: {
Expand All @@ -383,7 +383,7 @@ extension SnapshotTests {
"""
UPDATE "reminders"
SET "dueDate" = CASE WHEN ("reminders"."dueDate" IS NULL) THEN '2018-01-29 00:08:00.000' END
WHERE ("reminders"."id" = 1)
WHERE ("reminders"."id" IN (1))
RETURNING "dueDate"
"""
} results: {
Expand Down
2 changes: 1 addition & 1 deletion Tests/StructuredQueriesTests/WhereTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ extension SnapshotTests {
SELECT "remindersLists"."id", "remindersLists"."color", "remindersLists"."title", "remindersLists"."position", "reminders"."id", "reminders"."assignedUserID", "reminders"."dueDate", "reminders"."isCompleted", "reminders"."isFlagged", "reminders"."notes", "reminders"."priority", "reminders"."remindersListID", "reminders"."title", "reminders"."updatedAt"
FROM "remindersLists"
LEFT JOIN "reminders" ON ("remindersLists"."id" = "reminders"."remindersListID")
WHERE ("remindersLists"."id" = 4) AND "reminders"."isCompleted"
WHERE ("remindersLists"."id" IN (4)) AND "reminders"."isCompleted"
"""
} results: {
"""
Expand Down