Packages
electric
1.1.4
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.
Retired package: Release invalid - Has a critical bug in replication stream handling. Please upgrade to >= 1.1.7
Current section
Files
Jump to
Current section
Files
lib/electric/shapes/dependency_layers.ex
defmodule Electric.Shapes.DependencyLayers do
def new do
[]
end
def add_dependency(layers, shape, shape_handle) do
case shape.shape_dependencies_handles do
[] ->
add_to_first_layer(layers, shape_handle)
[dependency_handle] ->
[first_layer | rest] = layers
if MapSet.member?(first_layer, dependency_handle) do
[first_layer | add_to_first_layer(rest, shape_handle)]
else
[first_layer | add_dependency(rest, shape, shape_handle)]
end
end
end
def remove_dependency(layers, shape_handle) do
# FIXME: this assumes children are removed before parents, not sure how true this is
Enum.map(layers, &MapSet.delete(&1, shape_handle))
end
defp add_to_first_layer([], shape_handle) do
[MapSet.new([shape_handle])]
end
defp add_to_first_layer([first_layer | rest], shape_handle) do
[MapSet.put(first_layer, shape_handle) | rest]
end
def get_for_handles(layers, shape_handles) do
layers
|> Enum.map(&MapSet.intersection(&1, shape_handles))
|> Enum.reject(&(&1 == MapSet.new()))
end
end