!c`$      !"#None>ESX_k$eventsourcing-postgresqlReturn all the % elements before the first & and the value of the first &.'()$*+,None "#=?@AHSVXeventsourcing-postgresql2A wrapper around a SELECT query that instantiates  ReadModel so that it can be used by the application layer without said layer to be aware of SQL. The implementation can then be swapped for something else, e.g. for tests.None"#=>?@AEHSUVX_keventsourcing-postgresql1Stream of events stored in a PostgreSQL relation.The job of sharding streams in different tables is left to the database. If this is something you want to do, you can create a view and a trigger on insert into that view.-eventsourcing-postgresql#Select all events in correct order..eventsourcing-postgresql]Build a query to insert a new event. The constraints are there to postpone them to calls to writeEventWithMetadata\. If the user never writes new events, these constraints won't be required by the compiler.eventsourcing-postgresqlMake a < from basic information about the relation name and columns.eventsourcing-postgresqlMake a stream from queries. This function is less safe than  and should only be used when ^ is not flexible enough. It is also closer to the implementation and more subject to changes.eventsourcing-postgresqlConnection pool as a function.eventsourcing-postgresqlRelation name.eventsourcing-postgresql:Identifier column name. If there are several, use a tuple.eventsourcing-postgresqlColumn names for metadata.eventsourcing-postgresqlEvent column name.eventsourcing-postgresqlConnection pool as a function.eventsourcing-postgresql Select query.eventsourcing-postgresqlInsert query builder.eventsourcing-postgresql)Identifier column (use tuple if several.)None"#=>?@AHSVXk,< eventsourcing-postgresql8Family of event streams stored in a PostgreSQL relation.Each stream should have a unique stream identifier and event identifiers must be unique within a stream, but not necessarily across them. allNewEventsy starts a new thread which reads notifications on the given channel and writes them to a transactional bounded queue (a TBQueue*) which is then consumed by the returned Producer. The maximum size of this queue is hard-coded to 100. Should an exception be raised in the listening thread, it is thrown back by the producer./eventsourcing-postgresql[Run two threads concurrently and return the result of the first one to write to the givem TMVarw. If the first thread to finish does so because it throws an exception, the exception is rethrown in the main process.    None"#$>XkBeventsourcing-postgresqlMigrate a stream family stored in a PostgreSQL database to the same database. It is meant to run in parallel with the application using the stream family without disturbing it.An alternative use of this is to migrate a stream family to a new relation without swapping the tables at the end. The old table stays in use by the application and the new one can be read by an external system for instance.If the new table already exists (and the initialisation query does not fail in that case,) the migration will start over from the point it left off.eventsourcing-postgresql%Name of the new (temporary) relation.eventsourcing-postgresql"New stream identifier column name.eventsourcing-postgresql!New event identifier column name.eventsourcing-postgresqlNew metadata column names.eventsourcing-postgresqlNew event column name.eventsourcing-postgresqlInitialisation query that creates the new relation. It is given the name of the current relation to migrate. It must be idempotent to be able to restart the migrator.eventsourcing-postgresqlQuery to lock the relation used by the application. It is given the name of the current relation. It must be idempotent to be able to restart the migrator. eventsourcing-postgresqlbQuery to swap the relation used by the application. It is given the name of the current relation.None "#/=>?@ASX_kV)0eventsourcing-postgresqlAn alternative to 'Maybe st'.AIf we use 'Maybe st' and 'st ~ Maybe a' (or something else where NULL is a valid state,) then getTrackedState's SELECTJ statement would return a value of type 'Maybe (Maybe a)' which would be 13 instead of 'Just Nothing' if the column is 'NULL.-This type works differently: it tries to use 2 on the field and return 3 if it didn't work AND it is NULL. Otherwise, it fails.eventsourcing-postgresql5Return SQL query to upsert a row in a tracking table.eventsourcing-postgresql/Update the tracking table for the given stream.eventsourcing-postgresql2Create tracking table if it doesn't exist already.A tracking table is a table used to track the last events processed by a projection for each stream in a stream family. It allows them to restart from where they have left off.eventsourcing-postgresql0The new state or the error message if it failed.eventsourcing-postgresql0The new state or the error message if it failed.eventsourcing-postgresqlName of the tracking table.eventsourcing-postgresqlType of stream identifiers.eventsourcing-postgresqlType of event identifiers.eventsourcing-postgresqlType of the state.None&'.>HPSX_k`Jeventsourcing-postgresqlIExecute the SQL actions and update the tracking table in one transaction.ZThe custom actions are transformed into a list of SQL actions by the given function. See ! for an example. eventsourcing-postgresqlzExecute custom actions by calling the runner function on each action in turn and updating the tracking table accordingly. eventsourcing-postgresqlRun an action returning either an error or a rollback action. If any of the rollback actions fail, the others are not run. Rollback actions are run in reversed order.!eventsourcing-postgresqlRelation name. ! !None`   !   !4        !"#$%&'()*+,-+,.//01234567+89:;<=>5eventsourcing-postgresql-0.9.0-LKZKPYFtGXXGAc7tGP6TIX!Database.CQRS.PostgreSQL.SQLQueryDatabase.CQRS.PostgreSQL.Stream%Database.CQRS.PostgreSQL.StreamFamily"Database.CQRS.PostgreSQL.Migration&Database.CQRS.PostgreSQL.TrackingTable#Database.CQRS.PostgreSQL.Projection!Database.CQRS.PostgreSQL.InternalDatabase.CQRS.PostgreSQLSQLQueryconnectionPool queryTemplate$fReadModelmSQLQueryStream makeStream makeStream'$fWritableStreammStream$fStreammStream StreamFamilyrelationnotificationChannelparseNotificationstreamIdentifierColumneventIdentifierColumnmetadataColumns eventColumnmakeStreamFamily$fStreamFamilymStreamFamily $fToFieldPairmigrate TrackingTableupsertTrackingTabledoUpsertTrackingTablecreateTrackingTable$fFromFieldOptionalState.$fTrackingTablemTrackingTablestreamIdeventIdst ProjectionexecuteSqlActionsexecuteCustomActionsfromTabularDataActions$fFromTabularDataActionFlat$$fFromTabularDataActionWithUniqueKey stopOnLeftbase Data.EitherRightLeft SomeParams SqlAction makeSqlActionappendSqlActions handleError selectQuery insertQueryrace OptionalState GHC.MaybeNothing.postgresql-simple-0.6.2-7qfA7BS3LfKB9A06EjbjXo$Database.PostgreSQL.Simple.FromField fromFieldNoState