@@ -832,8 +832,9 @@ extension QueryExpression where QueryValue: QueryBindable {
832832 ///
833833 /// - Parameter expression: A sequence of expressions.
834834 /// - Returns: A predicate expression indicating whether this expression is in the given sequence
835- public func `in`( _ expression: [ some QueryExpression < QueryValue > ] ) -> some QueryExpression < Bool > {
836- BinaryOperator ( lhs: self , operator: " IN " , rhs: Array . Expression ( elements: expression) )
835+ public func `in`< S: Sequence > ( _ expression: S ) -> some QueryExpression < Bool >
836+ where S. Element: QueryExpression < QueryValue > {
837+ BinaryOperator ( lhs: self , operator: " IN " , rhs: S . Expression ( elements: expression) )
837838 }
838839
839840 /// Returns a predicate expression indicating whether the expression is in a subquery.
@@ -868,7 +869,7 @@ extension QueryExpression where QueryValue: QueryBindable {
868869 }
869870}
870871
871- extension Array where Element: QueryBindable {
872+ extension Sequence where Element: QueryBindable {
872873 /// Returns a predicate expression indicating whether the sequence contains the given expression.
873874 ///
874875 /// An alias for ``QueryExpression/in(_:)``, flipped.
@@ -912,12 +913,21 @@ extension Statement where QueryValue: QueryBindable {
912913 }
913914}
914915
915- extension Statement {
916+ extension PartialSelectStatement {
916917 /// Returns a predicate expression indicating whether this subquery contains any element.
917918 ///
918919 /// - Returns: A predicate expression indicating whether this subquery contains any element.
919920 public func exists( ) -> some QueryExpression < Bool > {
920- SQLQueryExpression ( " EXISTS \( self ) " )
921+ SQLQueryExpression ( " EXISTS \( self . queryFragment) " )
922+ }
923+ }
924+
925+ extension Table {
926+ /// Returns a predicate expression indicating whether this table contains any element.
927+ ///
928+ /// - Returns: A predicate expression indicating whether this subquery contains any element.
929+ public static func exists( ) -> some QueryExpression < Bool > {
930+ all. exists ( )
921931 }
922932}
923933
@@ -977,16 +987,15 @@ private struct LikeOperator<
977987 }
978988}
979989
980- extension Array where Element: QueryExpression , Element. QueryValue: QueryBindable {
981- fileprivate struct Expression : QueryExpression {
982- typealias QueryValue = Array
990+ extension Sequence where Element: QueryExpression , Element. QueryValue: QueryBindable {
991+ fileprivate typealias Expression = _SequenceExpression < Self >
992+ }
983993
984- let elements : [ Element ]
985- init ( elements: [ Element ] ) {
986- self . elements = elements
987- }
988- var queryFragment : QueryFragment {
989- " ( \( elements. map ( \. queryFragment) . joined ( separator: " , " ) ) ) "
990- }
994+ private struct _SequenceExpression < S: Sequence > : QueryExpression
995+ where S. Element: QueryExpression , S. Element. QueryValue: QueryBindable {
996+ typealias QueryValue = S
997+ let queryFragment : QueryFragment
998+ init ( elements: S ) {
999+ queryFragment = " ( \( elements. map ( \. queryFragment) . joined ( separator: " , " ) ) ) "
9911000 }
9921001}
0 commit comments