Electric.Postgres.Inspector behaviour (electric v1.1.9)
View SourceSummary
Functions
Clean up all information about a given relation using a provided inspector.
Convert a column list into something that can be used by
Electric.Replication.Eval.Parser.parse_and_validate_expression/2
Get columns that should be considered a PK for table. If the table has no PK, then we're considering all columns as identifying.
List relations that have stale cache. Doesn't clean the cache immediately,
that's left to the caller. Inspectors without cache will return an :error
.
Load column information about a given table using a provided inspector.
Load additional information about a given relation.
Expects the table name provided by the user and validates that the table exists, returning the OID.
Types
@type column_info() :: %{ name: String.t(), type: String.t(), type_mod: integer() | nil, type_kind: type_kind(), formatted_type: String.t(), pk_position: non_neg_integer() | nil, type_id: {typid :: non_neg_integer(), typmod :: integer()}, array_dimensions: non_neg_integer(), not_null: boolean(), array_type: String.t() }
@type relation() :: Electric.relation()
@type relation_id() :: Electric.relation_id()
@type relation_info() :: %{ relation_id: relation_id(), relation: relation(), kind: relation_kind(), parent: nil | relation(), children: nil | [relation(), ...] }
@type relation_kind() :: :ordinary_table | :partitioned_table
@type type_kind() ::
:base | :composite | :domain | :enum | :pseudo | :range | :multirange
Callbacks
@callback clean(relation_id(), opts :: term()) :: :ok
@callback list_relations_with_stale_cache(opts :: term()) :: {:ok, [Electric.oid_relation()]} | :error
@callback load_column_info(relation_id(), opts :: term()) :: {:ok, [column_info()]} | :table_not_found | {:error, String.t()}
@callback load_relation_info(relation_id(), opts :: term()) :: {:ok, relation_info()} | :table_not_found | {:error, String.t()}
@callback load_relation_oid(relation(), opts :: term()) :: {:ok, Electric.oid_relation()} | :table_not_found | {:error, String.t()}
Functions
@spec clean(relation_id(), inspector()) :: :ok
Clean up all information about a given relation using a provided inspector.
@spec columns_to_expr([column_info(), ...]) :: Electric.Replication.Eval.Parser.refs_map()
Convert a column list into something that can be used by
Electric.Replication.Eval.Parser.parse_and_validate_expression/2
@spec get_pk_cols([column_info(), ...]) :: [String.t(), ...]
Get columns that should be considered a PK for table. If the table has no PK, then we're considering all columns as identifying.
@spec list_relations_with_stale_cache(inspector()) :: {:ok, [Electric.oid_relation()]} | :error
List relations that have stale cache. Doesn't clean the cache immediately,
that's left to the caller. Inspectors without cache will return an :error
.
@spec load_column_info(relation_id(), inspector()) :: {:ok, [column_info()]} | :table_not_found | {:error, String.t()}
Load column information about a given table using a provided inspector.
@spec load_relation_info(relation_id(), inspector()) :: {:ok, relation_info()} | :table_not_found | {:error, String.t()}
Load additional information about a given relation.
Additional information includes the relation kind, parent/child relationships, and other metadata.
@spec load_relation_oid(relation(), inspector()) :: {:ok, Electric.oid_relation()} | :table_not_found | {:error, String.t()}
Expects the table name provided by the user and validates that the table exists, returning the OID.
Table name is expected to have been normalized beforehand