module Database.LSMTree.Simple (
Session,
withSession,
openSession,
closeSession,
Table,
withTable,
withTableWith,
newTable,
newTableWith,
closeTable,
member,
members,
lookup,
lookups,
rangeLookup,
insert,
inserts,
delete,
deletes,
update,
updates,
withDuplicate,
duplicate,
withUnion,
withUnions,
union,
unions,
withIncrementalUnion,
withIncrementalUnions,
incrementalUnion,
incrementalUnions,
remainingUnionDebt,
supplyUnionCredits,
Cursor,
withCursor,
withCursorAtOffset,
newCursor,
newCursorAtOffset,
closeCursor,
next,
take,
takeWhile,
saveSnapshot,
withTableFromSnapshot,
withTableFromSnapshotWith,
openTableFromSnapshot,
openTableFromSnapshotWith,
doesSnapshotExist,
deleteSnapshot,
listSnapshots,
SnapshotName,
isValidSnapshotName,
toSnapshotName,
SnapshotLabel (..),
TableConfig (
confMergePolicy,
confSizeRatio,
confWriteBufferAlloc,
confBloomFilterAlloc,
confFencePointerIndex,
confDiskCachePolicy,
confMergeSchedule
),
MergePolicy (LazyLevelling),
SizeRatio (Four),
WriteBufferAlloc (AllocNumEntries),
BloomFilterAlloc (AllocFixed, AllocRequestFPR),
FencePointerIndexType (OrdinaryIndex, CompactIndex),
DiskCachePolicy (..),
MergeSchedule (..),
OverrideDiskCachePolicy (..),
Range (..),
UnionCredits (..),
UnionDebt (..),
RawBytes (RawBytes),
SerialiseKey (serialiseKey, deserialiseKey),
SerialiseKeyOrderPreserving,
SerialiseValue (serialiseValue, deserialiseValue),
serialiseKeyIdentity,
serialiseKeyIdentityUpToSlicing,
serialiseKeyPreservesOrdering,
serialiseKeyMinimalSize,
serialiseValueIdentity,
serialiseValueIdentityUpToSlicing,
packSlice,
SessionDirDoesNotExistError (..),
SessionDirLockedError (..),
SessionDirCorruptedError (..),
SessionClosedError (..),
TableClosedError (..),
TableCorruptedError (..),
TableTooLargeError (..),
TableUnionNotCompatibleError (..),
SnapshotExistsError (..),
SnapshotDoesNotExistError (..),
SnapshotCorruptedError (..),
SnapshotNotCompatibleError (..),
CursorClosedError (..),
InvalidSnapshotNameError (..),
) where
import Control.ActionRegistry (mapExceptionWithActionRegistry)
import Control.Exception.Base (Exception, SomeException (..))
import Data.Bifunctor (Bifunctor (..))
import Data.Coerce (coerce)
import Data.Kind (Type)
import Data.List.NonEmpty (NonEmpty (..))
import Data.Typeable (TypeRep)
import Data.Vector (Vector)
import Data.Void (Void)
import Database.LSMTree (BloomFilterAlloc, CursorClosedError (..),
DiskCachePolicy, FencePointerIndexType,
InvalidSnapshotNameError (..), MergePolicy, MergeSchedule,
OverrideDiskCachePolicy (..), Range (..), RawBytes,
ResolveAsFirst (..), SerialiseKey (..),
SerialiseKeyOrderPreserving, SerialiseValue (..),
SessionClosedError (..), SizeRatio,
SnapshotCorruptedError (..),
SnapshotDoesNotExistError (..), SnapshotExistsError (..),
SnapshotLabel (..), SnapshotName,
SnapshotNotCompatibleError (..), TableClosedError (..),
TableConfig (..), TableCorruptedError (..),
TableTooLargeError (..), UnionCredits (..), UnionDebt (..),
WriteBufferAlloc, isValidSnapshotName, packSlice,
serialiseKeyIdentity, serialiseKeyIdentityUpToSlicing,
serialiseKeyMinimalSize, serialiseKeyPreservesOrdering,
serialiseValueIdentity, serialiseValueIdentityUpToSlicing,
toSnapshotName)
import qualified Database.LSMTree as LSMT
import Prelude hiding (lookup, take, takeWhile)
type Session :: Type
newtype Session = Session (LSMT.Session IO)
withSession ::
forall a.
FilePath ->
(Session -> IO a) ->
IO a
withSession :: forall a. FilePath -> (Session -> IO a) -> IO a
withSession FilePath
dir Session -> IO a
action = do
let tracer :: Tracer IO LSMTreeTrace
tracer = Tracer IO LSMTreeTrace
forall a. Monoid a => a
mempty
FilePath -> IO a -> IO a
forall a. FilePath -> IO a -> IO a
_convertSessionDirErrors FilePath
dir (IO a -> IO a) -> IO a -> IO a
forall a b. (a -> b) -> a -> b
$
Tracer IO LSMTreeTrace -> FilePath -> (Session IO -> IO a) -> IO a
forall a.
Tracer IO LSMTreeTrace -> FilePath -> (Session IO -> IO a) -> IO a
LSMT.withSessionIO Tracer IO LSMTreeTrace
tracer FilePath
dir (Session -> IO a
action (Session -> IO a) -> (Session IO -> Session) -> Session IO -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Session IO -> Session
Session)
openSession ::
FilePath ->
IO Session
openSession :: FilePath -> IO Session
openSession FilePath
dir = do
let tracer :: Tracer IO LSMTreeTrace
tracer = Tracer IO LSMTreeTrace
forall a. Monoid a => a
mempty
FilePath -> IO Session -> IO Session
forall a. FilePath -> IO a -> IO a
_convertSessionDirErrors FilePath
dir (IO Session -> IO Session) -> IO Session -> IO Session
forall a b. (a -> b) -> a -> b
$ do
Session IO -> Session
Session (Session IO -> Session) -> IO (Session IO) -> IO Session
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tracer IO LSMTreeTrace -> FilePath -> IO (Session IO)
LSMT.openSessionIO Tracer IO LSMTreeTrace
tracer FilePath
dir
closeSession ::
Session ->
IO ()
closeSession :: Session -> IO ()
closeSession (Session Session IO
session) =
Session IO -> IO ()
forall (m :: * -> *). IOLike m => Session m -> m ()
LSMT.closeSession Session IO
session
type role Table nominal nominal
type Table :: Type -> Type -> Type
newtype Table k v = Table (LSMT.Table IO k (LSMT.ResolveAsFirst v) Void)
withTable ::
forall k v a.
Session ->
(Table k v -> IO a) ->
IO a
withTable :: forall k v a. Session -> (Table k v -> IO a) -> IO a
withTable (Session Session IO
session) Table k v -> IO a
action =
Session IO -> (Table IO k (ResolveAsFirst v) Void -> IO a) -> IO a
forall (m :: * -> *) k v b a.
IOLike m =>
Session m -> (Table m k v b -> m a) -> m a
LSMT.withTable Session IO
session (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
withTableWith ::
forall k v a.
TableConfig ->
Session ->
(Table k v -> IO a) ->
IO a
withTableWith :: forall k v a. TableConfig -> Session -> (Table k v -> IO a) -> IO a
withTableWith TableConfig
tableConfig (Session Session IO
session) Table k v -> IO a
action =
TableConfig
-> Session IO
-> (Table IO k (ResolveAsFirst v) Void -> IO a)
-> IO a
forall (m :: * -> *) k v b a.
IOLike m =>
TableConfig -> Session m -> (Table m k v b -> m a) -> m a
LSMT.withTableWith TableConfig
tableConfig Session IO
session (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
newTable ::
forall k v.
Session ->
IO (Table k v)
newTable :: forall k v. Session -> IO (Table k v)
newTable (Session Session IO
session) =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Session IO -> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
IOLike m =>
Session m -> m (Table m k v b)
LSMT.newTable Session IO
session
newTableWith ::
forall k v.
TableConfig ->
Session ->
IO (Table k v)
newTableWith :: forall k v. TableConfig -> Session -> IO (Table k v)
newTableWith TableConfig
tableConfig (Session Session IO
session) =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TableConfig
-> Session IO -> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
IOLike m =>
TableConfig -> Session m -> m (Table m k v b)
LSMT.newTableWith TableConfig
tableConfig Session IO
session
closeTable ::
forall k v.
Table k v ->
IO ()
closeTable :: forall k v. Table k v -> IO ()
closeTable (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> IO ()
forall (m :: * -> *) k v b. IOLike m => Table m k v b -> m ()
LSMT.closeTable Table IO k (ResolveAsFirst v) Void
table
member ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
k ->
IO Bool
member :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> k -> IO Bool
member (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> k -> IO Bool
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Table m k v b -> k -> m Bool
LSMT.member Table IO k (ResolveAsFirst v) Void
table
members ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
Vector k ->
IO (Vector Bool)
members :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> Vector k -> IO (Vector Bool)
members (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> Vector k -> IO (Vector Bool)
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Table m k v b -> Vector k -> m (Vector Bool)
LSMT.members Table IO k (ResolveAsFirst v) Void
table
getValue :: LSMT.LookupResult (ResolveAsFirst v) (LSMT.BlobRef IO Void) -> Maybe v
getValue :: forall v.
LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v
getValue =
(ResolveAsFirst v -> v) -> Maybe (ResolveAsFirst v) -> Maybe v
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ResolveAsFirst v -> v
forall v. ResolveAsFirst v -> v
LSMT.unResolveAsFirst (Maybe (ResolveAsFirst v) -> Maybe v)
-> (LookupResult (ResolveAsFirst v) (BlobRef IO Void)
-> Maybe (ResolveAsFirst v))
-> LookupResult (ResolveAsFirst v) (BlobRef IO Void)
-> Maybe v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LookupResult (ResolveAsFirst v) (BlobRef IO Void)
-> Maybe (ResolveAsFirst v)
forall v b. LookupResult v b -> Maybe v
LSMT.getValue
lookup ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
k ->
IO (Maybe v)
lookup :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> k -> IO (Maybe v)
lookup (Table Table IO k (ResolveAsFirst v) Void
table) =
(LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v)
-> IO (LookupResult (ResolveAsFirst v) (BlobRef IO Void))
-> IO (Maybe v)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v
forall v.
LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v
getValue (IO (LookupResult (ResolveAsFirst v) (BlobRef IO Void))
-> IO (Maybe v))
-> (k -> IO (LookupResult (ResolveAsFirst v) (BlobRef IO Void)))
-> k
-> IO (Maybe v)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void
-> k -> IO (LookupResult (ResolveAsFirst v) (BlobRef IO Void))
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Table m k v b -> k -> m (LookupResult v (BlobRef m b))
LSMT.lookup Table IO k (ResolveAsFirst v) Void
table
lookups ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
Vector k ->
IO (Vector (Maybe v))
lookups :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> Vector k -> IO (Vector (Maybe v))
lookups (Table Table IO k (ResolveAsFirst v) Void
table) =
(Vector (LookupResult (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (Maybe v))
-> IO (Vector (LookupResult (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Vector (Maybe v))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v)
-> Vector (LookupResult (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (Maybe v)
forall a b. (a -> b) -> Vector a -> Vector b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v
forall v.
LookupResult (ResolveAsFirst v) (BlobRef IO Void) -> Maybe v
getValue) (IO (Vector (LookupResult (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Vector (Maybe v)))
-> (Vector k
-> IO (Vector (LookupResult (ResolveAsFirst v) (BlobRef IO Void))))
-> Vector k
-> IO (Vector (Maybe v))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void
-> Vector k
-> IO (Vector (LookupResult (ResolveAsFirst v) (BlobRef IO Void)))
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Table m k v b
-> Vector k -> m (Vector (LookupResult v (BlobRef m b)))
LSMT.lookups Table IO k (ResolveAsFirst v) Void
table
getKeyValue :: LSMT.Entry k (ResolveAsFirst v) (LSMT.BlobRef IO Void) -> (k, v)
getKeyValue :: forall k v. Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
getKeyValue (LSMT.Entry k
k ResolveAsFirst v
v) = (k
k, ResolveAsFirst v -> v
forall v. ResolveAsFirst v -> v
LSMT.unResolveAsFirst ResolveAsFirst v
v)
getKeyValue (LSMT.EntryWithBlob k
k ResolveAsFirst v
v !BlobRef IO Void
_b) = (k
k, ResolveAsFirst v -> v
forall v. ResolveAsFirst v -> v
LSMT.unResolveAsFirst ResolveAsFirst v
v)
rangeLookup ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
Range k ->
IO (Vector (k, v))
rangeLookup :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> Range k -> IO (Vector (k, v))
rangeLookup (Table Table IO k (ResolveAsFirst v) Void
table) =
(Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (k, v))
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Vector (k, v))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v))
-> Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (k, v)
forall a b. (a -> b) -> Vector a -> Vector b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
forall k v. Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
getKeyValue) (IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Vector (k, v)))
-> (Range k
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))))
-> Range k
-> IO (Vector (k, v))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void
-> Range k
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Table m k v b -> Range k -> m (Vector (Entry k v (BlobRef m b)))
LSMT.rangeLookup Table IO k (ResolveAsFirst v) Void
table
insert ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
k ->
v ->
IO ()
insert :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> k -> v -> IO ()
insert (Table Table IO k (ResolveAsFirst v) Void
table) k
k v
v =
Table IO k (ResolveAsFirst v) Void
-> k -> ResolveAsFirst v -> Maybe Void -> IO ()
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v,
SerialiseValue b) =>
Table m k v b -> k -> v -> Maybe b -> m ()
LSMT.insert Table IO k (ResolveAsFirst v) Void
table k
k (v -> ResolveAsFirst v
forall v. v -> ResolveAsFirst v
LSMT.ResolveAsFirst v
v) Maybe Void
forall a. Maybe a
Nothing
inserts ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
Vector (k, v) ->
IO ()
inserts :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> Vector (k, v) -> IO ()
inserts (Table Table IO k (ResolveAsFirst v) Void
table) Vector (k, v)
entries =
Table IO k (ResolveAsFirst v) Void
-> Vector (k, ResolveAsFirst v, Maybe Void) -> IO ()
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v,
SerialiseValue b) =>
Table m k v b -> Vector (k, v, Maybe b) -> m ()
LSMT.inserts Table IO k (ResolveAsFirst v) Void
table (((k, v) -> (k, ResolveAsFirst v, Maybe Void))
-> Vector (k, v) -> Vector (k, ResolveAsFirst v, Maybe Void)
forall a b. (a -> b) -> Vector a -> Vector b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(k
k, v
v) -> (k
k, v -> ResolveAsFirst v
forall v. v -> ResolveAsFirst v
LSMT.ResolveAsFirst v
v, Maybe Void
forall a. Maybe a
Nothing)) Vector (k, v)
entries)
delete ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
k ->
IO ()
delete :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> k -> IO ()
delete (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> k -> IO ()
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v,
SerialiseValue b) =>
Table m k v b -> k -> m ()
LSMT.delete Table IO k (ResolveAsFirst v) Void
table
deletes ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
Vector k ->
IO ()
deletes :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> Vector k -> IO ()
deletes (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> Vector k -> IO ()
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v,
SerialiseValue b) =>
Table m k v b -> Vector k -> m ()
LSMT.deletes Table IO k (ResolveAsFirst v) Void
table
maybeValueToUpdate :: Maybe v -> LSMT.Update (ResolveAsFirst v) Void
maybeValueToUpdate :: forall v. Maybe v -> Update (ResolveAsFirst v) Void
maybeValueToUpdate =
Update (ResolveAsFirst v) Void
-> (v -> Update (ResolveAsFirst v) Void)
-> Maybe v
-> Update (ResolveAsFirst v) Void
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Update (ResolveAsFirst v) Void
forall v b. Update v b
LSMT.Delete (\v
v -> ResolveAsFirst v -> Maybe Void -> Update (ResolveAsFirst v) Void
forall v b. v -> Maybe b -> Update v b
LSMT.Insert (v -> ResolveAsFirst v
forall v. v -> ResolveAsFirst v
LSMT.ResolveAsFirst v
v) Maybe Void
forall a. Maybe a
Nothing)
update ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
k ->
Maybe v ->
IO ()
update :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> k -> Maybe v -> IO ()
update (Table Table IO k (ResolveAsFirst v) Void
table) k
k =
Table IO k (ResolveAsFirst v) Void
-> k -> Update (ResolveAsFirst v) Void -> IO ()
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v,
SerialiseValue b) =>
Table m k v b -> k -> Update v b -> m ()
LSMT.update Table IO k (ResolveAsFirst v) Void
table k
k (Update (ResolveAsFirst v) Void -> IO ())
-> (Maybe v -> Update (ResolveAsFirst v) Void) -> Maybe v -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe v -> Update (ResolveAsFirst v) Void
forall v. Maybe v -> Update (ResolveAsFirst v) Void
maybeValueToUpdate
updates ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v ->
Vector (k, Maybe v) ->
IO ()
updates :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Table k v -> Vector (k, Maybe v) -> IO ()
updates (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void
-> Vector (k, Update (ResolveAsFirst v) Void) -> IO ()
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v,
SerialiseValue b) =>
Table m k v b -> Vector (k, Update v b) -> m ()
LSMT.updates Table IO k (ResolveAsFirst v) Void
table (Vector (k, Update (ResolveAsFirst v) Void) -> IO ())
-> (Vector (k, Maybe v)
-> Vector (k, Update (ResolveAsFirst v) Void))
-> Vector (k, Maybe v)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((k, Maybe v) -> (k, Update (ResolveAsFirst v) Void))
-> Vector (k, Maybe v)
-> Vector (k, Update (ResolveAsFirst v) Void)
forall a b. (a -> b) -> Vector a -> Vector b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Maybe v -> Update (ResolveAsFirst v) Void)
-> (k, Maybe v) -> (k, Update (ResolveAsFirst v) Void)
forall b c a. (b -> c) -> (a, b) -> (a, c)
forall (p :: * -> * -> *) b c a.
Bifunctor p =>
(b -> c) -> p a b -> p a c
second Maybe v -> Update (ResolveAsFirst v) Void
forall v. Maybe v -> Update (ResolveAsFirst v) Void
maybeValueToUpdate)
withDuplicate ::
forall k v a.
Table k v ->
(Table k v -> IO a) ->
IO a
withDuplicate :: forall k v a. Table k v -> (Table k v -> IO a) -> IO a
withDuplicate (Table Table IO k (ResolveAsFirst v) Void
table) Table k v -> IO a
action =
Table IO k (ResolveAsFirst v) Void
-> (Table IO k (ResolveAsFirst v) Void -> IO a) -> IO a
forall (m :: * -> *) k v b a.
IOLike m =>
Table m k v b -> (Table m k v b -> m a) -> m a
LSMT.withDuplicate Table IO k (ResolveAsFirst v) Void
table (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
duplicate ::
forall k v.
Table k v ->
IO (Table k v)
duplicate :: forall k v. Table k v -> IO (Table k v)
duplicate (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Table IO k (ResolveAsFirst v) Void
-> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
IOLike m =>
Table m k v b -> m (Table m k v b)
LSMT.duplicate Table IO k (ResolveAsFirst v) Void
table
withUnion ::
forall k v a.
Table k v ->
Table k v ->
(Table k v -> IO a) ->
IO a
withUnion :: forall k v a. Table k v -> Table k v -> (Table k v -> IO a) -> IO a
withUnion (Table Table IO k (ResolveAsFirst v) Void
table1) (Table Table IO k (ResolveAsFirst v) Void
table2) Table k v -> IO a
action =
Table IO k (ResolveAsFirst v) Void
-> Table IO k (ResolveAsFirst v) Void
-> (Table IO k (ResolveAsFirst v) Void -> IO a)
-> IO a
forall (m :: * -> *) k v b a.
(IOLike m, ResolveValue v) =>
Table m k v b -> Table m k v b -> (Table m k v b -> m a) -> m a
LSMT.withUnion Table IO k (ResolveAsFirst v) Void
table1 Table IO k (ResolveAsFirst v) Void
table2 (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
withUnions ::
forall k v a.
NonEmpty (Table k v) ->
(Table k v -> IO a) ->
IO a
withUnions :: forall k v a. NonEmpty (Table k v) -> (Table k v -> IO a) -> IO a
withUnions NonEmpty (Table k v)
tables Table k v -> IO a
action =
NonEmpty (Table IO k (ResolveAsFirst v) Void)
-> (Table IO k (ResolveAsFirst v) Void -> IO a) -> IO a
forall (m :: * -> *) k v b a.
(IOLike m, ResolveValue v) =>
NonEmpty (Table m k v b) -> (Table m k v b -> m a) -> m a
LSMT.withUnions (NonEmpty (Table k v)
-> NonEmpty (Table IO k (ResolveAsFirst v) Void)
forall a b. Coercible a b => a -> b
coerce NonEmpty (Table k v)
tables) (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
union ::
forall k v.
Table k v ->
Table k v ->
IO (Table k v)
union :: forall k v. Table k v -> Table k v -> IO (Table k v)
union (Table Table IO k (ResolveAsFirst v) Void
table1) (Table Table IO k (ResolveAsFirst v) Void
table2) =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Table IO k (ResolveAsFirst v) Void
-> Table IO k (ResolveAsFirst v) Void
-> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
Table m k v b -> Table m k v b -> m (Table m k v b)
LSMT.union Table IO k (ResolveAsFirst v) Void
table1 Table IO k (ResolveAsFirst v) Void
table2
unions ::
forall k v.
NonEmpty (Table k v) ->
IO (Table k v)
unions :: forall k v. NonEmpty (Table k v) -> IO (Table k v)
unions NonEmpty (Table k v)
tables =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty (Table IO k (ResolveAsFirst v) Void)
-> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
NonEmpty (Table m k v b) -> m (Table m k v b)
LSMT.unions (NonEmpty (Table k v)
-> NonEmpty (Table IO k (ResolveAsFirst v) Void)
forall a b. Coercible a b => a -> b
coerce NonEmpty (Table k v)
tables)
withIncrementalUnion ::
forall k v a.
Table k v ->
Table k v ->
(Table k v -> IO a) ->
IO a
withIncrementalUnion :: forall k v a. Table k v -> Table k v -> (Table k v -> IO a) -> IO a
withIncrementalUnion (Table Table IO k (ResolveAsFirst v) Void
table1) (Table Table IO k (ResolveAsFirst v) Void
table2) Table k v -> IO a
action =
Table IO k (ResolveAsFirst v) Void
-> Table IO k (ResolveAsFirst v) Void
-> (Table IO k (ResolveAsFirst v) Void -> IO a)
-> IO a
forall (m :: * -> *) k v b a.
IOLike m =>
Table m k v b -> Table m k v b -> (Table m k v b -> m a) -> m a
LSMT.withIncrementalUnion Table IO k (ResolveAsFirst v) Void
table1 Table IO k (ResolveAsFirst v) Void
table2 (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
withIncrementalUnions ::
forall k v a.
NonEmpty (Table k v) ->
(Table k v -> IO a) ->
IO a
withIncrementalUnions :: forall k v a. NonEmpty (Table k v) -> (Table k v -> IO a) -> IO a
withIncrementalUnions NonEmpty (Table k v)
tables Table k v -> IO a
action =
NonEmpty (Table IO k (ResolveAsFirst v) Void)
-> (Table IO k (ResolveAsFirst v) Void -> IO a) -> IO a
forall (m :: * -> *) k v b a.
IOLike m =>
NonEmpty (Table m k v b) -> (Table m k v b -> m a) -> m a
LSMT.withIncrementalUnions (NonEmpty (Table k v)
-> NonEmpty (Table IO k (ResolveAsFirst v) Void)
forall a b. Coercible a b => a -> b
coerce NonEmpty (Table k v)
tables) (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
incrementalUnion ::
forall k v.
Table k v ->
Table k v ->
IO (Table k v)
incrementalUnion :: forall k v. Table k v -> Table k v -> IO (Table k v)
incrementalUnion (Table Table IO k (ResolveAsFirst v) Void
table1) (Table Table IO k (ResolveAsFirst v) Void
table2) = do
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Table IO k (ResolveAsFirst v) Void
-> Table IO k (ResolveAsFirst v) Void
-> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
IOLike m =>
Table m k v b -> Table m k v b -> m (Table m k v b)
LSMT.incrementalUnion Table IO k (ResolveAsFirst v) Void
table1 Table IO k (ResolveAsFirst v) Void
table2
incrementalUnions ::
forall k v.
NonEmpty (Table k v) ->
IO (Table k v)
incrementalUnions :: forall k v. NonEmpty (Table k v) -> IO (Table k v)
incrementalUnions NonEmpty (Table k v)
tables = do
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty (Table IO k (ResolveAsFirst v) Void)
-> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
NonEmpty (Table m k v b) -> m (Table m k v b)
LSMT.unions (NonEmpty (Table k v)
-> NonEmpty (Table IO k (ResolveAsFirst v) Void)
forall a b. Coercible a b => a -> b
coerce NonEmpty (Table k v)
tables)
remainingUnionDebt ::
forall k v.
Table k v ->
IO UnionDebt
remainingUnionDebt :: forall k v. Table k v -> IO UnionDebt
remainingUnionDebt (Table Table IO k (ResolveAsFirst v) Void
table) =
Table IO k (ResolveAsFirst v) Void -> IO UnionDebt
forall (m :: * -> *) k v b.
IOLike m =>
Table m k v b -> m UnionDebt
LSMT.remainingUnionDebt Table IO k (ResolveAsFirst v) Void
table
supplyUnionCredits ::
forall k v.
Table k v ->
UnionCredits ->
IO UnionCredits
supplyUnionCredits :: forall k v. Table k v -> UnionCredits -> IO UnionCredits
supplyUnionCredits (Table Table IO k (ResolveAsFirst v) Void
table) UnionCredits
credits =
Table IO k (ResolveAsFirst v) Void
-> UnionCredits -> IO UnionCredits
forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
Table m k v b -> UnionCredits -> m UnionCredits
LSMT.supplyUnionCredits Table IO k (ResolveAsFirst v) Void
table UnionCredits
credits
type role Cursor nominal nominal
type Cursor :: Type -> Type -> Type
newtype Cursor k v = Cursor (LSMT.Cursor IO k (ResolveAsFirst v) Void)
withCursor ::
forall k v a.
Table k v ->
(Cursor k v -> IO a) ->
IO a
withCursor :: forall k v a. Table k v -> (Cursor k v -> IO a) -> IO a
withCursor (Table Table IO k (ResolveAsFirst v) Void
table) Cursor k v -> IO a
action =
Table IO k (ResolveAsFirst v) Void
-> (Cursor IO k (ResolveAsFirst v) Void -> IO a) -> IO a
forall (m :: * -> *) k v b a.
(IOLike m, ResolveValue v) =>
Table m k v b -> (Cursor m k v b -> m a) -> m a
LSMT.withCursor Table IO k (ResolveAsFirst v) Void
table (Cursor k v -> IO a
action (Cursor k v -> IO a)
-> (Cursor IO k (ResolveAsFirst v) Void -> Cursor k v)
-> Cursor IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
forall k v. Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
Cursor)
withCursorAtOffset ::
forall k v a.
(SerialiseKey k) =>
Table k v ->
k ->
(Cursor k v -> IO a) ->
IO a
withCursorAtOffset :: forall k v a.
SerialiseKey k =>
Table k v -> k -> (Cursor k v -> IO a) -> IO a
withCursorAtOffset (Table Table IO k (ResolveAsFirst v) Void
table) k
offsetKey Cursor k v -> IO a
action =
Table IO k (ResolveAsFirst v) Void
-> k -> (Cursor IO k (ResolveAsFirst v) Void -> IO a) -> IO a
forall (m :: * -> *) k v b a.
(IOLike m, SerialiseKey k, ResolveValue v) =>
Table m k v b -> k -> (Cursor m k v b -> m a) -> m a
LSMT.withCursorAtOffset Table IO k (ResolveAsFirst v) Void
table k
offsetKey (Cursor k v -> IO a
action (Cursor k v -> IO a)
-> (Cursor IO k (ResolveAsFirst v) Void -> Cursor k v)
-> Cursor IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
forall k v. Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
Cursor)
newCursor ::
forall k v.
Table k v ->
IO (Cursor k v)
newCursor :: forall k v. Table k v -> IO (Cursor k v)
newCursor (Table Table IO k (ResolveAsFirst v) Void
table) =
Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
forall k v. Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
Cursor (Cursor IO k (ResolveAsFirst v) Void -> Cursor k v)
-> IO (Cursor IO k (ResolveAsFirst v) Void) -> IO (Cursor k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Table IO k (ResolveAsFirst v) Void
-> IO (Cursor IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
Table m k v b -> m (Cursor m k v b)
LSMT.newCursor Table IO k (ResolveAsFirst v) Void
table
newCursorAtOffset ::
forall k v.
(SerialiseKey k) =>
Table k v ->
k ->
IO (Cursor k v)
newCursorAtOffset :: forall k v. SerialiseKey k => Table k v -> k -> IO (Cursor k v)
newCursorAtOffset (Table Table IO k (ResolveAsFirst v) Void
table) k
offsetKey =
Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
forall k v. Cursor IO k (ResolveAsFirst v) Void -> Cursor k v
Cursor (Cursor IO k (ResolveAsFirst v) Void -> Cursor k v)
-> IO (Cursor IO k (ResolveAsFirst v) Void) -> IO (Cursor k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Table IO k (ResolveAsFirst v) Void
-> k -> IO (Cursor IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, ResolveValue v) =>
Table m k v b -> k -> m (Cursor m k v b)
LSMT.newCursorAtOffset Table IO k (ResolveAsFirst v) Void
table k
offsetKey
closeCursor ::
forall k v.
Cursor k v ->
IO ()
closeCursor :: forall k v. Cursor k v -> IO ()
closeCursor (Cursor Cursor IO k (ResolveAsFirst v) Void
cursor) =
Cursor IO k (ResolveAsFirst v) Void -> IO ()
forall (m :: * -> *) k v b. IOLike m => Cursor m k v b -> m ()
LSMT.closeCursor Cursor IO k (ResolveAsFirst v) Void
cursor
next ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Cursor k v ->
IO (Maybe (k, v))
next :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Cursor k v -> IO (Maybe (k, v))
next (Cursor Cursor IO k (ResolveAsFirst v) Void
cursor) =
(Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v))
-> Maybe (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Maybe (k, v)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
forall k v. Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
getKeyValue (Maybe (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Maybe (k, v))
-> IO (Maybe (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Maybe (k, v))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Cursor IO k (ResolveAsFirst v) Void
-> IO (Maybe (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Cursor m k v b -> m (Maybe (Entry k v (BlobRef m b)))
LSMT.next Cursor IO k (ResolveAsFirst v) Void
cursor
take ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Int ->
Cursor k v ->
IO (Vector (k, v))
take :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Int -> Cursor k v -> IO (Vector (k, v))
take Int
n (Cursor Cursor IO k (ResolveAsFirst v) Void
cursor) =
(Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v))
-> Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (k, v)
forall a b. (a -> b) -> Vector a -> Vector b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
forall k v. Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
getKeyValue (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (k, v))
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Vector (k, v))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int
-> Cursor IO k (ResolveAsFirst v) Void
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Int -> Cursor m k v b -> m (Vector (Entry k v (BlobRef m b)))
LSMT.take Int
n Cursor IO k (ResolveAsFirst v) Void
cursor
takeWhile ::
forall k v.
(SerialiseKey k, SerialiseValue v) =>
Int ->
(k -> Bool) ->
Cursor k v ->
IO (Vector (k, v))
takeWhile :: forall k v.
(SerialiseKey k, SerialiseValue v) =>
Int -> (k -> Bool) -> Cursor k v -> IO (Vector (k, v))
takeWhile Int
n k -> Bool
p (Cursor Cursor IO k (ResolveAsFirst v) Void
cursor) =
(Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v))
-> Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (k, v)
forall a b. (a -> b) -> Vector a -> Vector b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
forall k v. Entry k (ResolveAsFirst v) (BlobRef IO Void) -> (k, v)
getKeyValue (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void))
-> Vector (k, v))
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
-> IO (Vector (k, v))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int
-> (k -> Bool)
-> Cursor IO k (ResolveAsFirst v) Void
-> IO (Vector (Entry k (ResolveAsFirst v) (BlobRef IO Void)))
forall (m :: * -> *) k v b.
(IOLike m, SerialiseKey k, SerialiseValue v, ResolveValue v) =>
Int
-> (k -> Bool)
-> Cursor m k v b
-> m (Vector (Entry k v (BlobRef m b)))
LSMT.takeWhile Int
n k -> Bool
p Cursor IO k (ResolveAsFirst v) Void
cursor
saveSnapshot ::
forall k v.
SnapshotName ->
SnapshotLabel ->
Table k v ->
IO ()
saveSnapshot :: forall k v. SnapshotName -> SnapshotLabel -> Table k v -> IO ()
saveSnapshot SnapshotName
snapName SnapshotLabel
snapLabel (Table Table IO k (ResolveAsFirst v) Void
table) =
SnapshotName
-> SnapshotLabel -> Table IO k (ResolveAsFirst v) Void -> IO ()
forall (m :: * -> *) k v b.
IOLike m =>
SnapshotName -> SnapshotLabel -> Table m k v b -> m ()
LSMT.saveSnapshot SnapshotName
snapName SnapshotLabel
snapLabel Table IO k (ResolveAsFirst v) Void
table
withTableFromSnapshot ::
forall k v a.
Session ->
SnapshotName ->
SnapshotLabel ->
(Table k v -> IO a) ->
IO a
withTableFromSnapshot :: forall k v a.
Session
-> SnapshotName -> SnapshotLabel -> (Table k v -> IO a) -> IO a
withTableFromSnapshot (Session Session IO
session) SnapshotName
snapName SnapshotLabel
snapLabel Table k v -> IO a
action =
Session IO
-> SnapshotName
-> SnapshotLabel
-> (Table IO k (ResolveAsFirst v) Void -> IO a)
-> IO a
forall (m :: * -> *) k v b a.
(IOLike m, ResolveValue v) =>
Session m
-> SnapshotName -> SnapshotLabel -> (Table m k v b -> m a) -> m a
LSMT.withTableFromSnapshot Session IO
session SnapshotName
snapName SnapshotLabel
snapLabel (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
withTableFromSnapshotWith ::
forall k v a.
OverrideDiskCachePolicy ->
Session ->
SnapshotName ->
SnapshotLabel ->
(Table k v -> IO a) ->
IO a
withTableFromSnapshotWith :: forall k v a.
OverrideDiskCachePolicy
-> Session
-> SnapshotName
-> SnapshotLabel
-> (Table k v -> IO a)
-> IO a
withTableFromSnapshotWith OverrideDiskCachePolicy
tableConfigOverride (Session Session IO
session) SnapshotName
snapName SnapshotLabel
snapLabel Table k v -> IO a
action =
OverrideDiskCachePolicy
-> Session IO
-> SnapshotName
-> SnapshotLabel
-> (Table IO k (ResolveAsFirst v) Void -> IO a)
-> IO a
forall (m :: * -> *) k v b a.
(IOLike m, ResolveValue v) =>
OverrideDiskCachePolicy
-> Session m
-> SnapshotName
-> SnapshotLabel
-> (Table m k v b -> m a)
-> m a
LSMT.withTableFromSnapshotWith OverrideDiskCachePolicy
tableConfigOverride Session IO
session SnapshotName
snapName SnapshotLabel
snapLabel (Table k v -> IO a
action (Table k v -> IO a)
-> (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> Table IO k (ResolveAsFirst v) Void
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table)
openTableFromSnapshot ::
forall k v.
Session ->
SnapshotName ->
SnapshotLabel ->
IO (Table k v)
openTableFromSnapshot :: forall k v.
Session -> SnapshotName -> SnapshotLabel -> IO (Table k v)
openTableFromSnapshot (Session Session IO
session) SnapshotName
snapName SnapshotLabel
snapLabel =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
Session m -> SnapshotName -> SnapshotLabel -> m (Table m k v b)
LSMT.openTableFromSnapshot @IO @k @(ResolveAsFirst v) Session IO
session SnapshotName
snapName SnapshotLabel
snapLabel
openTableFromSnapshotWith ::
forall k v.
OverrideDiskCachePolicy ->
Session ->
SnapshotName ->
SnapshotLabel ->
IO (Table k v)
openTableFromSnapshotWith :: forall k v.
OverrideDiskCachePolicy
-> Session -> SnapshotName -> SnapshotLabel -> IO (Table k v)
openTableFromSnapshotWith OverrideDiskCachePolicy
tableConfigOverride (Session Session IO
session) SnapshotName
snapName SnapshotLabel
snapLabel =
Table IO k (ResolveAsFirst v) Void -> Table k v
forall k v. Table IO k (ResolveAsFirst v) Void -> Table k v
Table (Table IO k (ResolveAsFirst v) Void -> Table k v)
-> IO (Table IO k (ResolveAsFirst v) Void) -> IO (Table k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> OverrideDiskCachePolicy
-> Session IO
-> SnapshotName
-> SnapshotLabel
-> IO (Table IO k (ResolveAsFirst v) Void)
forall (m :: * -> *) k v b.
(IOLike m, ResolveValue v) =>
OverrideDiskCachePolicy
-> Session m -> SnapshotName -> SnapshotLabel -> m (Table m k v b)
LSMT.openTableFromSnapshotWith OverrideDiskCachePolicy
tableConfigOverride Session IO
session SnapshotName
snapName SnapshotLabel
snapLabel
deleteSnapshot ::
Session ->
SnapshotName ->
IO ()
deleteSnapshot :: Session -> SnapshotName -> IO ()
deleteSnapshot (Session Session IO
session) =
Session IO -> SnapshotName -> IO ()
forall (m :: * -> *). IOLike m => Session m -> SnapshotName -> m ()
LSMT.deleteSnapshot Session IO
session
doesSnapshotExist ::
Session ->
SnapshotName ->
IO Bool
doesSnapshotExist :: Session -> SnapshotName -> IO Bool
doesSnapshotExist (Session Session IO
session) =
Session IO -> SnapshotName -> IO Bool
forall (m :: * -> *).
IOLike m =>
Session m -> SnapshotName -> m Bool
LSMT.doesSnapshotExist Session IO
session
listSnapshots ::
Session ->
IO [SnapshotName]
listSnapshots :: Session -> IO [SnapshotName]
listSnapshots (Session Session IO
session) =
Session IO -> IO [SnapshotName]
forall (m :: * -> *). IOLike m => Session m -> m [SnapshotName]
LSMT.listSnapshots Session IO
session
data SessionDirDoesNotExistError
= ErrSessionDirDoesNotExist !FilePath
deriving stock (Int -> SessionDirDoesNotExistError -> ShowS
[SessionDirDoesNotExistError] -> ShowS
SessionDirDoesNotExistError -> FilePath
(Int -> SessionDirDoesNotExistError -> ShowS)
-> (SessionDirDoesNotExistError -> FilePath)
-> ([SessionDirDoesNotExistError] -> ShowS)
-> Show SessionDirDoesNotExistError
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SessionDirDoesNotExistError -> ShowS
showsPrec :: Int -> SessionDirDoesNotExistError -> ShowS
$cshow :: SessionDirDoesNotExistError -> FilePath
show :: SessionDirDoesNotExistError -> FilePath
$cshowList :: [SessionDirDoesNotExistError] -> ShowS
showList :: [SessionDirDoesNotExistError] -> ShowS
Show, SessionDirDoesNotExistError -> SessionDirDoesNotExistError -> Bool
(SessionDirDoesNotExistError
-> SessionDirDoesNotExistError -> Bool)
-> (SessionDirDoesNotExistError
-> SessionDirDoesNotExistError -> Bool)
-> Eq SessionDirDoesNotExistError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SessionDirDoesNotExistError -> SessionDirDoesNotExistError -> Bool
== :: SessionDirDoesNotExistError -> SessionDirDoesNotExistError -> Bool
$c/= :: SessionDirDoesNotExistError -> SessionDirDoesNotExistError -> Bool
/= :: SessionDirDoesNotExistError -> SessionDirDoesNotExistError -> Bool
Eq)
deriving anyclass (Show SessionDirDoesNotExistError
Typeable SessionDirDoesNotExistError
(Typeable SessionDirDoesNotExistError,
Show SessionDirDoesNotExistError) =>
(SessionDirDoesNotExistError -> SomeException)
-> (SomeException -> Maybe SessionDirDoesNotExistError)
-> (SessionDirDoesNotExistError -> FilePath)
-> Exception SessionDirDoesNotExistError
SomeException -> Maybe SessionDirDoesNotExistError
SessionDirDoesNotExistError -> FilePath
SessionDirDoesNotExistError -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e) -> (e -> FilePath) -> Exception e
$ctoException :: SessionDirDoesNotExistError -> SomeException
toException :: SessionDirDoesNotExistError -> SomeException
$cfromException :: SomeException -> Maybe SessionDirDoesNotExistError
fromException :: SomeException -> Maybe SessionDirDoesNotExistError
$cdisplayException :: SessionDirDoesNotExistError -> FilePath
displayException :: SessionDirDoesNotExistError -> FilePath
Exception)
data SessionDirLockedError
= ErrSessionDirLocked !FilePath
deriving stock (Int -> SessionDirLockedError -> ShowS
[SessionDirLockedError] -> ShowS
SessionDirLockedError -> FilePath
(Int -> SessionDirLockedError -> ShowS)
-> (SessionDirLockedError -> FilePath)
-> ([SessionDirLockedError] -> ShowS)
-> Show SessionDirLockedError
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SessionDirLockedError -> ShowS
showsPrec :: Int -> SessionDirLockedError -> ShowS
$cshow :: SessionDirLockedError -> FilePath
show :: SessionDirLockedError -> FilePath
$cshowList :: [SessionDirLockedError] -> ShowS
showList :: [SessionDirLockedError] -> ShowS
Show, SessionDirLockedError -> SessionDirLockedError -> Bool
(SessionDirLockedError -> SessionDirLockedError -> Bool)
-> (SessionDirLockedError -> SessionDirLockedError -> Bool)
-> Eq SessionDirLockedError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SessionDirLockedError -> SessionDirLockedError -> Bool
== :: SessionDirLockedError -> SessionDirLockedError -> Bool
$c/= :: SessionDirLockedError -> SessionDirLockedError -> Bool
/= :: SessionDirLockedError -> SessionDirLockedError -> Bool
Eq)
deriving anyclass (Show SessionDirLockedError
Typeable SessionDirLockedError
(Typeable SessionDirLockedError, Show SessionDirLockedError) =>
(SessionDirLockedError -> SomeException)
-> (SomeException -> Maybe SessionDirLockedError)
-> (SessionDirLockedError -> FilePath)
-> Exception SessionDirLockedError
SomeException -> Maybe SessionDirLockedError
SessionDirLockedError -> FilePath
SessionDirLockedError -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e) -> (e -> FilePath) -> Exception e
$ctoException :: SessionDirLockedError -> SomeException
toException :: SessionDirLockedError -> SomeException
$cfromException :: SomeException -> Maybe SessionDirLockedError
fromException :: SomeException -> Maybe SessionDirLockedError
$cdisplayException :: SessionDirLockedError -> FilePath
displayException :: SessionDirLockedError -> FilePath
Exception)
data SessionDirCorruptedError
= ErrSessionDirCorrupted !FilePath
deriving stock (Int -> SessionDirCorruptedError -> ShowS
[SessionDirCorruptedError] -> ShowS
SessionDirCorruptedError -> FilePath
(Int -> SessionDirCorruptedError -> ShowS)
-> (SessionDirCorruptedError -> FilePath)
-> ([SessionDirCorruptedError] -> ShowS)
-> Show SessionDirCorruptedError
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SessionDirCorruptedError -> ShowS
showsPrec :: Int -> SessionDirCorruptedError -> ShowS
$cshow :: SessionDirCorruptedError -> FilePath
show :: SessionDirCorruptedError -> FilePath
$cshowList :: [SessionDirCorruptedError] -> ShowS
showList :: [SessionDirCorruptedError] -> ShowS
Show, SessionDirCorruptedError -> SessionDirCorruptedError -> Bool
(SessionDirCorruptedError -> SessionDirCorruptedError -> Bool)
-> (SessionDirCorruptedError -> SessionDirCorruptedError -> Bool)
-> Eq SessionDirCorruptedError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SessionDirCorruptedError -> SessionDirCorruptedError -> Bool
== :: SessionDirCorruptedError -> SessionDirCorruptedError -> Bool
$c/= :: SessionDirCorruptedError -> SessionDirCorruptedError -> Bool
/= :: SessionDirCorruptedError -> SessionDirCorruptedError -> Bool
Eq)
deriving anyclass (Show SessionDirCorruptedError
Typeable SessionDirCorruptedError
(Typeable SessionDirCorruptedError,
Show SessionDirCorruptedError) =>
(SessionDirCorruptedError -> SomeException)
-> (SomeException -> Maybe SessionDirCorruptedError)
-> (SessionDirCorruptedError -> FilePath)
-> Exception SessionDirCorruptedError
SomeException -> Maybe SessionDirCorruptedError
SessionDirCorruptedError -> FilePath
SessionDirCorruptedError -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e) -> (e -> FilePath) -> Exception e
$ctoException :: SessionDirCorruptedError -> SomeException
toException :: SessionDirCorruptedError -> SomeException
$cfromException :: SomeException -> Maybe SessionDirCorruptedError
fromException :: SomeException -> Maybe SessionDirCorruptedError
$cdisplayException :: SessionDirCorruptedError -> FilePath
displayException :: SessionDirCorruptedError -> FilePath
Exception)
_convertSessionDirErrors ::
forall a.
FilePath ->
IO a ->
IO a
_convertSessionDirErrors :: forall a. FilePath -> IO a -> IO a
_convertSessionDirErrors FilePath
sessionDir =
(SessionDirDoesNotExistError -> SomeException) -> IO a -> IO a
forall e1 e2 (m :: * -> *) a.
(Exception e1, Exception e2, MonadCatch m) =>
(e1 -> e2) -> m a -> m a
mapExceptionWithActionRegistry (\(LSMT.ErrSessionDirDoesNotExist FsErrorPath
_fsErrorPath) -> SessionDirDoesNotExistError -> SomeException
forall e. Exception e => e -> SomeException
SomeException (SessionDirDoesNotExistError -> SomeException)
-> SessionDirDoesNotExistError -> SomeException
forall a b. (a -> b) -> a -> b
$ FilePath -> SessionDirDoesNotExistError
ErrSessionDirDoesNotExist FilePath
sessionDir)
(IO a -> IO a) -> (IO a -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SessionDirLockedError -> SomeException) -> IO a -> IO a
forall e1 e2 (m :: * -> *) a.
(Exception e1, Exception e2, MonadCatch m) =>
(e1 -> e2) -> m a -> m a
mapExceptionWithActionRegistry (\(LSMT.ErrSessionDirLocked FsErrorPath
_fsErrorPath) -> SessionDirLockedError -> SomeException
forall e. Exception e => e -> SomeException
SomeException (SessionDirLockedError -> SomeException)
-> SessionDirLockedError -> SomeException
forall a b. (a -> b) -> a -> b
$ FilePath -> SessionDirLockedError
ErrSessionDirLocked FilePath
sessionDir)
(IO a -> IO a) -> (IO a -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SessionDirCorruptedError -> SomeException) -> IO a -> IO a
forall e1 e2 (m :: * -> *) a.
(Exception e1, Exception e2, MonadCatch m) =>
(e1 -> e2) -> m a -> m a
mapExceptionWithActionRegistry (\(LSMT.ErrSessionDirCorrupted FsErrorPath
_fsErrorPath) -> SessionDirCorruptedError -> SomeException
forall e. Exception e => e -> SomeException
SomeException (SessionDirCorruptedError -> SomeException)
-> SessionDirCorruptedError -> SomeException
forall a b. (a -> b) -> a -> b
$ FilePath -> SessionDirCorruptedError
ErrSessionDirCorrupted FilePath
sessionDir)
data TableUnionNotCompatibleError
= ErrTableUnionHandleTypeMismatch
!Int
!TypeRep
!Int
!TypeRep
| ErrTableUnionSessionMismatch
!Int
!FilePath
!Int
!FilePath
deriving stock (Int -> TableUnionNotCompatibleError -> ShowS
[TableUnionNotCompatibleError] -> ShowS
TableUnionNotCompatibleError -> FilePath
(Int -> TableUnionNotCompatibleError -> ShowS)
-> (TableUnionNotCompatibleError -> FilePath)
-> ([TableUnionNotCompatibleError] -> ShowS)
-> Show TableUnionNotCompatibleError
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TableUnionNotCompatibleError -> ShowS
showsPrec :: Int -> TableUnionNotCompatibleError -> ShowS
$cshow :: TableUnionNotCompatibleError -> FilePath
show :: TableUnionNotCompatibleError -> FilePath
$cshowList :: [TableUnionNotCompatibleError] -> ShowS
showList :: [TableUnionNotCompatibleError] -> ShowS
Show, TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool
(TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool)
-> (TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool)
-> Eq TableUnionNotCompatibleError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool
== :: TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool
$c/= :: TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool
/= :: TableUnionNotCompatibleError
-> TableUnionNotCompatibleError -> Bool
Eq)
deriving anyclass (Show TableUnionNotCompatibleError
Typeable TableUnionNotCompatibleError
(Typeable TableUnionNotCompatibleError,
Show TableUnionNotCompatibleError) =>
(TableUnionNotCompatibleError -> SomeException)
-> (SomeException -> Maybe TableUnionNotCompatibleError)
-> (TableUnionNotCompatibleError -> FilePath)
-> Exception TableUnionNotCompatibleError
SomeException -> Maybe TableUnionNotCompatibleError
TableUnionNotCompatibleError -> FilePath
TableUnionNotCompatibleError -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e) -> (e -> FilePath) -> Exception e
$ctoException :: TableUnionNotCompatibleError -> SomeException
toException :: TableUnionNotCompatibleError -> SomeException
$cfromException :: SomeException -> Maybe TableUnionNotCompatibleError
fromException :: SomeException -> Maybe TableUnionNotCompatibleError
$cdisplayException :: TableUnionNotCompatibleError -> FilePath
displayException :: TableUnionNotCompatibleError -> FilePath
Exception)
_convertTableUnionNotCompatibleError ::
forall a.
(Int -> FilePath) ->
IO a ->
IO a
_convertTableUnionNotCompatibleError :: forall a. (Int -> FilePath) -> IO a -> IO a
_convertTableUnionNotCompatibleError Int -> FilePath
sessionDirFor =
(TableUnionNotCompatibleError -> TableUnionNotCompatibleError)
-> IO a -> IO a
forall e1 e2 (m :: * -> *) a.
(Exception e1, Exception e2, MonadCatch m) =>
(e1 -> e2) -> m a -> m a
mapExceptionWithActionRegistry ((TableUnionNotCompatibleError -> TableUnionNotCompatibleError)
-> IO a -> IO a)
-> (TableUnionNotCompatibleError -> TableUnionNotCompatibleError)
-> IO a
-> IO a
forall a b. (a -> b) -> a -> b
$ \case
LSMT.ErrTableUnionHandleTypeMismatch Int
i1 TypeRep
typeRep1 Int
i2 TypeRep
typeRep2 ->
Int -> TypeRep -> Int -> TypeRep -> TableUnionNotCompatibleError
ErrTableUnionHandleTypeMismatch Int
i1 TypeRep
typeRep1 Int
i2 TypeRep
typeRep2
LSMT.ErrTableUnionSessionMismatch Int
i1 FsErrorPath
_fsErrorPath1 Int
i2 FsErrorPath
_fsErrorPath2 ->
Int -> FilePath -> Int -> FilePath -> TableUnionNotCompatibleError
ErrTableUnionSessionMismatch Int
i1 (Int -> FilePath
sessionDirFor Int
i1) Int
i2 (Int -> FilePath
sessionDirFor Int
i2)