ValidOnClause was too restrictive, ToFrom is actually the correct amount of leniency. ValidOnClause would not catch use of on for a cross join but would prevent nested joins
This commit is contained in:
parent
4f9793f6cb
commit
9bf34761a4
@ -61,7 +61,6 @@ module Database.Esqueleto.Experimental
|
|||||||
, ToAliasReference(..)
|
, ToAliasReference(..)
|
||||||
, ToAliasReferenceT
|
, ToAliasReferenceT
|
||||||
, ToSqlSetOperation(..)
|
, ToSqlSetOperation(..)
|
||||||
, ValidOnClauseValue
|
|
||||||
|
|
||||||
-- * The Normal Stuff
|
-- * The Normal Stuff
|
||||||
, where_
|
, where_
|
||||||
|
|||||||
@ -46,19 +46,6 @@ instance (ToMaybe a, ToMaybe b) => ToMaybe (a :& b) where
|
|||||||
type ToMaybeT (a :& b) = (ToMaybeT a :& ToMaybeT b)
|
type ToMaybeT (a :& b) = (ToMaybeT a :& ToMaybeT b)
|
||||||
toMaybe (a :& b) = (toMaybe a :& toMaybe b)
|
toMaybe (a :& b) = (toMaybe a :& toMaybe b)
|
||||||
|
|
||||||
-- | Constraint for `on`. Ensures that only types that require an `on` can be used on
|
|
||||||
-- the left hand side. This was previously reusing the From class which was actually
|
|
||||||
-- a bit too lenient as it allowed to much.
|
|
||||||
--
|
|
||||||
-- @since 3.4.0.0
|
|
||||||
type family ValidOnClauseValue a :: Constraint where
|
|
||||||
ValidOnClauseValue (Table a) = ()
|
|
||||||
ValidOnClauseValue (SubQuery a) = ()
|
|
||||||
ValidOnClauseValue (SqlQuery a) = ()
|
|
||||||
ValidOnClauseValue (SqlSetOperation a) = ()
|
|
||||||
ValidOnClauseValue (a -> SqlQuery b) = ()
|
|
||||||
ValidOnClauseValue (From a) = ()
|
|
||||||
ValidOnClauseValue _ = TypeError ('Text "Illegal use of ON")
|
|
||||||
|
|
||||||
-- | An @ON@ clause that describes how two tables are related. This should be
|
-- | An @ON@ clause that describes how two tables are related. This should be
|
||||||
-- used as an infix operator after a 'JOIN'. For example,
|
-- used as an infix operator after a 'JOIN'. For example,
|
||||||
@ -70,7 +57,7 @@ type family ValidOnClauseValue a :: Constraint where
|
|||||||
-- \`on\` (\\(p :& bP) ->
|
-- \`on\` (\\(p :& bP) ->
|
||||||
-- p ^. PersonId ==. bP ^. BlogPostAuthorId)
|
-- p ^. PersonId ==. bP ^. BlogPostAuthorId)
|
||||||
-- @
|
-- @
|
||||||
on :: ValidOnClauseValue a => a -> (b -> SqlExpr (Value Bool)) -> (a, b -> SqlExpr (Value Bool))
|
on :: ToFrom a a' => a -> (b -> SqlExpr (Value Bool)) -> (a, b -> SqlExpr (Value Bool))
|
||||||
on = (,)
|
on = (,)
|
||||||
infix 9 `on`
|
infix 9 `on`
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user