module Hasql.Engine.Structures.OidCache
( OidCache,
toHashMap,
lookupScalar,
lookupArray,
fromHashMap,
empty,
selectUnknownNames,
insertScalar,
)
where
import Data.HashMap.Strict qualified as HashMap
import Data.HashSet qualified as HashSet
import Hasql.Platform.Prelude hiding (empty, insert, lookup, reset)
newtype OidCache
= OidCache
(HashMap (Maybe Text, Text) (Word32, Word32))
deriving stock (Int -> OidCache -> ShowS
[OidCache] -> ShowS
OidCache -> String
(Int -> OidCache -> ShowS)
-> (OidCache -> String) -> ([OidCache] -> ShowS) -> Show OidCache
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OidCache -> ShowS
showsPrec :: Int -> OidCache -> ShowS
$cshow :: OidCache -> String
show :: OidCache -> String
$cshowList :: [OidCache] -> ShowS
showList :: [OidCache] -> ShowS
Show, OidCache -> OidCache -> Bool
(OidCache -> OidCache -> Bool)
-> (OidCache -> OidCache -> Bool) -> Eq OidCache
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OidCache -> OidCache -> Bool
== :: OidCache -> OidCache -> Bool
$c/= :: OidCache -> OidCache -> Bool
/= :: OidCache -> OidCache -> Bool
Eq)
instance Semigroup OidCache where
OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byNameL <> :: OidCache -> OidCache -> OidCache
<> OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byNameR =
HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
OidCache (HashMap (Maybe Text, Text) (Word32, Word32)
-> HashMap (Maybe Text, Text) (Word32, Word32)
-> HashMap (Maybe Text, Text) (Word32, Word32)
forall k v. Eq k => HashMap k v -> HashMap k v -> HashMap k v
HashMap.union HashMap (Maybe Text, Text) (Word32, Word32)
byNameR HashMap (Maybe Text, Text) (Word32, Word32)
byNameL)
instance Monoid OidCache where
mempty :: OidCache
mempty = HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
OidCache HashMap (Maybe Text, Text) (Word32, Word32)
forall a. Monoid a => a
mempty
{-# INLINEABLE empty #-}
empty :: OidCache
empty :: OidCache
empty =
HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
OidCache HashMap (Maybe Text, Text) (Word32, Word32)
forall k v. HashMap k v
HashMap.empty
selectUnknownNames :: HashSet (Maybe Text, Text) -> OidCache -> HashSet (Maybe Text, Text)
selectUnknownNames :: HashSet (Maybe Text, Text)
-> OidCache -> HashSet (Maybe Text, Text)
selectUnknownNames HashSet (Maybe Text, Text)
keys (OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byName) =
((Maybe Text, Text) -> Bool)
-> HashSet (Maybe Text, Text) -> HashSet (Maybe Text, Text)
forall a. (a -> Bool) -> HashSet a -> HashSet a
HashSet.filter (\(Maybe Text, Text)
key -> Bool -> Bool
not ((Maybe Text, Text)
-> HashMap (Maybe Text, Text) (Word32, Word32) -> Bool
forall k a. (Eq k, Hashable k) => k -> HashMap k a -> Bool
HashMap.member (Maybe Text, Text)
key HashMap (Maybe Text, Text) (Word32, Word32)
byName)) HashSet (Maybe Text, Text)
keys
insertScalar :: Maybe Text -> Text -> Word32 -> Word32 -> OidCache -> OidCache
insertScalar :: Maybe Text -> Text -> Word32 -> Word32 -> OidCache -> OidCache
insertScalar Maybe Text
schema Text
name Word32
scalar Word32
array (OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byName) =
HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
OidCache ((Maybe Text, Text)
-> (Word32, Word32)
-> HashMap (Maybe Text, Text) (Word32, Word32)
-> HashMap (Maybe Text, Text) (Word32, Word32)
forall k v.
(Eq k, Hashable k) =>
k -> v -> HashMap k v -> HashMap k v
HashMap.insert (Maybe Text
schema, Text
name) (Word32
scalar, Word32
array) HashMap (Maybe Text, Text) (Word32, Word32)
byName)
fromHashMap :: HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
fromHashMap :: HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
fromHashMap HashMap (Maybe Text, Text) (Word32, Word32)
byName = HashMap (Maybe Text, Text) (Word32, Word32) -> OidCache
OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byName
lookupScalar :: Maybe Text -> Text -> OidCache -> Maybe Word32
lookupScalar :: Maybe Text -> Text -> OidCache -> Maybe Word32
lookupScalar Maybe Text
schema Text
name (OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byName) =
(Maybe Text, Text)
-> HashMap (Maybe Text, Text) (Word32, Word32)
-> Maybe (Word32, Word32)
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
HashMap.lookup (Maybe Text
schema, Text
name) HashMap (Maybe Text, Text) (Word32, Word32)
byName Maybe (Word32, Word32)
-> ((Word32, Word32) -> Word32) -> Maybe Word32
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \(Word32
scalar, Word32
_) -> Word32
scalar
lookupArray :: Maybe Text -> Text -> OidCache -> Maybe Word32
lookupArray :: Maybe Text -> Text -> OidCache -> Maybe Word32
lookupArray Maybe Text
schema Text
name (OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byName) =
(Maybe Text, Text)
-> HashMap (Maybe Text, Text) (Word32, Word32)
-> Maybe (Word32, Word32)
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
HashMap.lookup (Maybe Text
schema, Text
name) HashMap (Maybe Text, Text) (Word32, Word32)
byName Maybe (Word32, Word32)
-> ((Word32, Word32) -> Word32) -> Maybe Word32
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \(Word32
_, Word32
array) -> Word32
array
toHashMap :: OidCache -> HashMap (Maybe Text, Text) (Word32, Word32)
toHashMap :: OidCache -> HashMap (Maybe Text, Text) (Word32, Word32)
toHashMap (OidCache HashMap (Maybe Text, Text) (Word32, Word32)
byName) = HashMap (Maybe Text, Text) (Word32, Word32)
byName