Electric.Shapes.Shape (electric v1.1.8)

View Source

Struct 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

flag()

@type flag() :: :selects_all_columns | :non_primitive_columns_in_where

json_relation()

@type json_relation() :: [String.t(), ...]

json_safe()

@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(), ...]
}

json_table_info()

@type json_table_info() :: table_info() | json_relation()

json_table_list()

@type json_table_list() :: [json_table_info(), ...]

replica()

@type replica() :: :full | :default

storage_config()

@type storage_config() :: %{compaction: :enabled | :disabled}

t()

@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
}

table_info()

@type table_info() :: %{
  columns: [Electric.Postgres.Inspector.column_info(), ...],
  pk: [String.t(), ...]
}

Functions

affected_tables(shape)

@spec affected_tables(t()) :: [Electric.relation()]

List tables that are a part of this shape.

comparable(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_change(shape, change, extra_refs \\ %{})

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.

default_replica_mode()

from_json_safe(data)

@spec from_json_safe(map()) :: {:ok, t()} | {:error, String.t()}

generate_id(shape)

hash(shape)

is_affected_by_relation_change?(shape, relation)

list_relations(shape)

@spec list_relations(t()) :: [Electric.oid_relation()]

List all relations that are a part of this shape, as oid-name tuples.

new(opts)

new(table, opts)

new!(table, opts \\ [])

pk(shape, relation \\ nil)

schema_options()

verify_replica(mode)