Electric.Shapes.Partitions (electric v1.2.4)
View SourceKeeps track of shapes defined on partitioned tables and re-writes transactions to send an equivalent change on the root partitioned table for every change to a partition of that table.
Summary
Functions
Update the partition information table with the given shape.
Handle relation changes from the replication stream, expanding changes to partitions into the partition root as appropriate.
Handle transactions from the replication stream, updating the partition mapping as appropriate.
Remove a shape that was previously added under the given id.
Types
@type options() :: [{:inspector, Electric.Postgres.Inspector.inspector()}]
@type partition_table() :: Electric.relation()
@type root_table() :: Electric.relation()
@type shape_id() :: term()
@type t() :: %Electric.Shapes.Partitions{ active: non_neg_integer(), inspector: Electric.Postgres.Inspector.inspector(), partition_ownership: %{required(Electric.relation()) => MapSet.t(shape_id())}, partitions: %{required(partition_table()) => root_table()} }
Functions
@spec add_shape(t(), shape_id(), Electric.Shapes.Shape.t()) :: t()
Update the partition information table with the given shape.
If the shape is defined on a partitioned table (not a partition of that table) then this will expand the mapping function to add a change to the partition root for every change to a partition of that root.
@spec handle_relation(t(), Electric.Replication.Changes.Relation.t()) :: {:ok, t()} | {:error, :connection_not_available}
Handle relation changes from the replication stream, expanding changes to partitions into the partition root as appropriate.
@spec handle_transaction( t(), Electric.Replication.Changes.Transaction.t() | Electric.Replication.Changes.Relation.t() ) :: {t(), Electric.Replication.Changes.Transaction.t() | Electric.Replication.Changes.Relation.t()}
Handle transactions from the replication stream, updating the partition mapping as appropriate.
Remove a shape that was previously added under the given id.
If that shape was defined on a partitioned table, this will clean up the partition mapping table.