chore(avs): E.values working example established
This commit is contained in:
parent
3794f7482b
commit
59f268a796
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
module Database.Esqueleto.Utils
|
module Database.Esqueleto.Utils
|
||||||
( true, false
|
( true, false
|
||||||
, justVal, justValList
|
, justVal, justValList, toValues
|
||||||
, isJust, alt
|
, isJust, alt
|
||||||
, isInfixOf, hasInfix
|
, isInfixOf, hasInfix
|
||||||
, strConcat, substring
|
, strConcat, substring
|
||||||
@ -50,7 +50,9 @@ import Data.Universe
|
|||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import qualified Data.List as List
|
import qualified Data.List as List
|
||||||
import qualified Data.Foldable as F
|
import qualified Data.Foldable as F
|
||||||
|
import Data.List.NonEmpty (NonEmpty(..))
|
||||||
import qualified Database.Esqueleto.Legacy as E
|
import qualified Database.Esqueleto.Legacy as E
|
||||||
|
import qualified Database.Esqueleto.Experimental as Ex
|
||||||
import qualified Database.Esqueleto.PostgreSQL as E
|
import qualified Database.Esqueleto.PostgreSQL as E
|
||||||
import qualified Database.Esqueleto.Internal.Internal as E
|
import qualified Database.Esqueleto.Internal.Internal as E
|
||||||
import Database.Esqueleto.Utils.TH
|
import Database.Esqueleto.Utils.TH
|
||||||
@ -104,6 +106,9 @@ justValList :: PersistField typ => [typ] -> E.SqlExpr (E.ValueList (Maybe typ))
|
|||||||
-- justValList = E.valList . map Just
|
-- justValList = E.valList . map Just
|
||||||
justValList = E.justList . E.valList
|
justValList = E.justList . E.valList
|
||||||
|
|
||||||
|
toValues :: PersistField typ => NonEmpty typ -> Ex.From (Ex.SqlExpr (Ex.Value typ)) -- E.From does not work here! Requires Experimental!
|
||||||
|
toValues = E.values . fmap Ex.val
|
||||||
|
|
||||||
infixl 4 =?.
|
infixl 4 =?.
|
||||||
(=?.) :: PersistField typ => E.SqlExpr (E.Value typ) -> E.SqlExpr (E.Value (Maybe typ)) -> E.SqlExpr (E.Value Bool)
|
(=?.) :: PersistField typ => E.SqlExpr (E.Value typ) -> E.SqlExpr (E.Value (Maybe typ)) -> E.SqlExpr (E.Value Bool)
|
||||||
(=?.) = (E.==.) . E.just
|
(=?.) = (E.==.) . E.just
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- TODO: remove this line, once the module is completed
|
{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- TODO: remove this line, once the module is completed
|
||||||
{-# OPTIONS_GHC -Wno-error=unused-local-binds #-} -- TODO: remove this line, once the module is completed
|
{-# OPTIONS_GHC -Wno-error=unused-local-binds #-} -- TODO: remove this line, once the module is completed
|
||||||
{-# OPTIONS_GHC -Wno-warn=unused-local-binds #-} -- TODO: remove this line, once the module is completed
|
|
||||||
|
|
||||||
|
|
||||||
module Handler.Utils.Avs
|
module Handler.Utils.Avs
|
||||||
@ -134,24 +134,35 @@ checkLicences = do
|
|||||||
noOne = AvsPersonId 0
|
noOne = AvsPersonId 0
|
||||||
vorORrollfeld' = Set.dropWhileAntitone (`avsPersonLicenceIsLEQ` AvsNoLicence) licences
|
vorORrollfeld' = Set.dropWhileAntitone (`avsPersonLicenceIsLEQ` AvsNoLicence) licences
|
||||||
rollfeld' = Set.dropWhileAntitone (`avsPersonLicenceIsLEQ` AvsLicenceVorfeld) vorORrollfeld'
|
rollfeld' = Set.dropWhileAntitone (`avsPersonLicenceIsLEQ` AvsLicenceVorfeld) vorORrollfeld'
|
||||||
vorORrollfeld :: NonEmpty AvsPersonId = set2NonEmpty noOne (Set.map avsLicencePersonID vorORrollfeld')
|
vorORrollfeld = set2NonEmpty noOne (Set.map avsLicencePersonID vorORrollfeld')
|
||||||
rollfeld = set2NonEmpty noOne (Set.map avsLicencePersonID rollfeld' )
|
rollfeld = set2NonEmpty noOne (Set.map avsLicencePersonID rollfeld' )
|
||||||
|
|
||||||
|
|
||||||
-- we get a weird type error so we try a simple demo here:
|
-- we get a weird type error so we try a simple demo here:
|
||||||
(_res :: [(E.Value AvsPersonId, E.Value AvsPersonId )]) <- runDB $ E.select $ do
|
(_res :: [(E.Value AvsPersonId, E.Value AvsPersonId )]) <- runDB $ E.select $ do
|
||||||
(usrAvs E.:& (excl,_)) <-
|
(usrAvs E.:& excl) <-
|
||||||
E.from $ E.table @UserAvs `E.innerJoin` E.values ((E.val (AvsPersonId 10), E.val ("ten" :: Text))
|
E.from $ E.table @UserAvs `E.innerJoin` E.toValues rollfeld
|
||||||
:| [ (E.val (AvsPersonId 20), E.val "twenty")
|
`E.on` (\(usrAvs E.:& excl) -> excl E.==. usrAvs E.^. UserAvsPersonId)
|
||||||
, (E.val (AvsPersonId 30), E.val "thirty") ]
|
|
||||||
)
|
|
||||||
`E.on` (\(usrAvs E.:& (excl,_)) -> excl E.==. usrAvs E.^. UserAvsPersonId)
|
|
||||||
return (usrAvs E.^. UserAvsPersonId, excl)
|
return (usrAvs E.^. UserAvsPersonId, excl)
|
||||||
-- > Looks like we need te Type NonEmpty (SqlExpr (Value typ)) i.e. we need to wrap everything with E.val?!
|
-- > Looks like we need te Type NonEmpty (SqlExpr (Value typ)) i.e. we need to wrap everything with E.val?!
|
||||||
|
|
||||||
{-
|
{-
|
||||||
|
Cases to consider (AVS_Licence,has_valid_F, has_valid_R):
|
||||||
-- antijoinAvsLicences :: AvsLicence -> NonEmpty AvsPersonId -> DB [(E.Value (Maybe AvsPersonId), E.Value (Maybe AvsPersonId))]
|
(0,0,0) -> ok; avs_id not returned from queries, no problem
|
||||||
|
(0,0,1) -> do nothing -- CHECK since id is returned by roll-query
|
||||||
|
(0,1,0) -> set F for id
|
||||||
|
(0,1,1) -> set R for id
|
||||||
|
(1,0,0) -> unset F for id
|
||||||
|
(1,0,1) -> unset F for id
|
||||||
|
(1,1,0) -> ok
|
||||||
|
(1,1,1) -> set R for id
|
||||||
|
(2,0,0) -> unset R for id
|
||||||
|
(2,0,1) -> unset R for id -- CHECK
|
||||||
|
(2,1,0) -> set F for id
|
||||||
|
(2,1,1) -> ok
|
||||||
|
-}
|
||||||
|
|
||||||
|
antijoinAvsLicences :: AvsLicence -> NonEmpty AvsPersonId -> DB [(E.Value (Maybe AvsPersonId), E.Value (Maybe AvsPersonId))]
|
||||||
antijoinAvsLicences lic avsLics = --fmap (fmap $(E.unValueN 2)) $
|
antijoinAvsLicences lic avsLics = --fmap (fmap $(E.unValueN 2)) $
|
||||||
E.select $ do
|
E.select $ do
|
||||||
((_qauli E.:& _qualUser E.:& usrAvs) E.:& excl) <-
|
((_qauli E.:& _qualUser E.:& usrAvs) E.:& excl) <-
|
||||||
@ -167,11 +178,11 @@ checkLicences = do
|
|||||||
)
|
)
|
||||||
`E.innerJoin` E.table @UserAvs
|
`E.innerJoin` E.table @UserAvs
|
||||||
`E.on` (\(_ E.:& qualUser E.:& usrAvs) -> qualUser E.^. QualificationUserUser E.==. usrAvs E.^. UserAvsUser)
|
`E.on` (\(_ E.:& qualUser E.:& usrAvs) -> qualUser E.^. QualificationUserUser E.==. usrAvs E.^. UserAvsUser)
|
||||||
) `E.fullOuterJoin` E.values avsLics -- left-hand side produces all currently valid matching qualifications
|
) `E.fullOuterJoin` E.toValues avsLics -- left-hand side produces all currently valid matching qualifications
|
||||||
`E.on` (\((_ E.:& _ E.:& usrAvs) E.:& excl) -> usrAvs E.?. UserAvsPersonId E.==. excl)
|
`E.on` (\((_ E.:& _ E.:& usrAvs) E.:& excl) -> usrAvs E.?. UserAvsPersonId E.==. excl)
|
||||||
E.where_ $ E.isNothing excl E.||. E.isNothing (usrAvs E.?. UserAvsPersonId) -- anti join
|
E.where_ $ E.isNothing excl E.||. E.isNothing (usrAvs E.?. UserAvsPersonId) -- anti join
|
||||||
return (usrAvs E.?. UserAvsPersonId, excl)
|
return (usrAvs E.?. UserAvsPersonId, excl)
|
||||||
-}
|
|
||||||
-- (_rollDelta, _vorfDelta) <- runDB $ (,)
|
-- (_rollDelta, _vorfDelta) <- runDB $ (,)
|
||||||
-- <$> antijoinAvsLicences AvsLicenceRollfeld rollfeld
|
-- <$> antijoinAvsLicences AvsLicenceRollfeld rollfeld
|
||||||
-- <*> antijoinAvsLicences AvsLicenceVorfeld vorORrollfeld
|
-- <*> antijoinAvsLicences AvsLicenceVorfeld vorORrollfeld
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user