Packages
electric
1.3.2
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/replication/persistent_replication_state.ex
defmodule Electric.Replication.PersistentReplicationState do
alias Electric.PersistentKV
alias Electric.Replication.Changes
@type opts() :: [
stack_id: String.t(),
persistent_kv: Electric.PersistentKV.t()
]
@base_tracked_relations %{
table_to_id: %{},
id_to_table_info: %{}
}
@type tracked_relations :: %{
table_to_id: %{{String.t(), String.t()} => Changes.relation_id()},
id_to_table_info: %{Changes.relation_id() => Changes.Relation.t()}
}
@spec set_tracked_relations(tracked_relations, opts()) :: :ok
def set_tracked_relations(tracked_relations, opts) do
set("tracked_relations", tracked_relations, opts)
end
@spec get_tracked_relations(opts()) :: tracked_relations()
def get_tracked_relations(opts) do
case get("tracked_relations", opts) do
{:ok, tracked_relations} -> tracked_relations
{:error, :not_found} -> @base_tracked_relations
end
end
@spec reset(opts()) :: :ok
def reset(opts) do
set_tracked_relations(@base_tracked_relations, opts)
end
@spec set(String.t(), any(), opts()) :: :ok
defp set(key, value, opts) do
persistent_kv = Access.fetch!(opts, :persistent_kv)
stack_id = Access.fetch!(opts, :stack_id)
PersistentKV.set(persistent_kv, "#{stack_id}:#{key}", value)
end
@spec get(String.t(), opts()) :: {:ok, any()} | {:error, :not_found}
defp get(key, opts) do
persistent_kv = Access.fetch!(opts, :persistent_kv)
stack_id = Access.fetch!(opts, :stack_id)
PersistentKV.get(persistent_kv, "#{stack_id}:#{key}")
end
end