diff --git a/Sources/StructuredQueriesCore/Operators.swift b/Sources/StructuredQueriesCore/Operators.swift index a11aafb5..81eb721e 100644 --- a/Sources/StructuredQueriesCore/Operators.swift +++ b/Sources/StructuredQueriesCore/Operators.swift @@ -912,12 +912,21 @@ extension Statement where QueryValue: QueryBindable { } } -extension Statement { +extension PartialSelectStatement { /// Returns a predicate expression indicating whether this subquery contains any element. /// /// - Returns: A predicate expression indicating whether this subquery contains any element. public func exists() -> some QueryExpression { - SQLQueryExpression("EXISTS \(self)") + SQLQueryExpression("EXISTS \(self.queryFragment)") + } +} + +extension Table { + /// Returns a predicate expression indicating whether this table contains any element. + /// + /// - Returns: A predicate expression indicating whether this subquery contains any element. + public static func exists() -> some QueryExpression { + all.exists() } } diff --git a/Tests/StructuredQueriesTests/OperatorsTests.swift b/Tests/StructuredQueriesTests/OperatorsTests.swift index e21840f0..856c0842 100644 --- a/Tests/StructuredQueriesTests/OperatorsTests.swift +++ b/Tests/StructuredQueriesTests/OperatorsTests.swift @@ -568,6 +568,20 @@ extension SnapshotTests { } @Test func exists() { + assertQuery(Values(Reminder.exists())) { + """ + SELECT EXISTS ( + SELECT "reminders"."id", "reminders"."assignedUserID", "reminders"."dueDate", "reminders"."isCompleted", "reminders"."isFlagged", "reminders"."notes", "reminders"."priority", "reminders"."remindersListID", "reminders"."title" + FROM "reminders" + ) + """ + } results: { + """ + ┌──────┐ + │ true │ + └──────┘ + """ + } assertQuery(Values(Reminder.where { $0.id == 1 }.exists())) { """ SELECT EXISTS (