Electric.Shapes.Shape (electric v1.1.8)
View SourceStruct describing the requested shape
Summary
Functions
List tables that are a part of this shape.
Return a comparable representation of the shape.
Convert a change to be correctly represented within the shape.
List all relations that are a part of this shape, as oid-name tuples.
Types
@type flag() :: :selects_all_columns | :non_primitive_columns_in_where
@type json_relation() :: [String.t(), ...]
@type json_safe() :: %{ version: non_neg_integer(), root_table: json_relation(), root_table_id: non_neg_integer(), root_pks: [String.t(), ...], root_column_count: non_neg_integer(), where: String.t(), selected_columns: [String.t(), ...], flags: %{optional(flag()) => boolean()}, replica: String.t(), storage: storage_config() | nil, shape_dependencies: [json_safe(), ...] }
@type json_table_info() :: table_info() | json_relation()
@type json_table_list() :: [json_table_info(), ...]
@type replica() :: :full | :default
@type storage_config() :: %{compaction: :enabled | :disabled}
@type t() :: %Electric.Shapes.Shape{ explicitly_selected_columns: [String.t(), ...], flags: %{optional(flag()) => boolean()}, replica: replica(), root_column_count: non_neg_integer(), root_pk: [String.t(), ...], root_table: Electric.relation(), root_table_id: Electric.relation_id(), selected_columns: [String.t(), ...], shape_dependencies: [t(), ...], shape_dependencies_handles: term(), storage: storage_config() | nil, where: Electric.Replication.Eval.Expr.t() | nil }
@type table_info() :: %{ columns: [Electric.Postgres.Inspector.column_info(), ...], pk: [String.t(), ...] }
Functions
@spec affected_tables(t()) :: [Electric.relation()]
List tables that are a part of this shape.
Return a comparable representation of the shape.
This is used to compare shapes for equality as an ETS key - and thus it'll be matched in some cases, not just compared equal. This representation must therefore not contain any maps (as they are matched when one is missing a key for example).
This representation must contain all the information that identifies user-specified properties of the shape. We're omitting storage configuration and other internal state.
Convert a change to be correctly represented within the shape.
New or deleted changes are either propagated as-is, or filtered out completely. Updates, on the other hand, may be converted to an "new record" or a "deleted record" if the previous/new version of the updated row isn't in the shape.
@spec list_relations(t()) :: [Electric.oid_relation()]
List all relations that are a part of this shape, as oid-name tuples.