View Source Electric.Postgres.Inspector behaviour (electric v0.9.5)

Summary

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.

Load column information about a given table using a provided inspector.

Expects the table name provided by the user and validates that the table exists and returns the relation.

Types

@type column_info() :: %{
  name: String.t(),
  type: String.t(),
  type_mod: integer() | nil,
  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 inspector() :: {module(), opts :: term()}
@type relation() :: Electric.relation()
@type relation_id() :: Electric.relation_id()
@type relation_info() :: %{relation_id: relation_id(), relation: relation()}

Callbacks

@callback clean(relation(), opts :: term()) :: true
Link to this callback

load_column_info(relation, opts)

View Source
@callback load_column_info(relation(), opts :: term()) ::
  {:ok, [column_info()]} | :table_not_found
@callback load_relation(String.t(), opts :: term()) ::
  {:ok, relation_info()} | {:error, String.t()}

Functions

@spec clean(relation(), inspector()) :: true

Clean up all information about a given relation using a provided inspector.

Link to this function

columns_to_expr(columns)

View Source
@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.

Link to this function

load_column_info(relation, arg)

View Source
@spec load_column_info(relation(), inspector()) ::
  {:ok, [column_info()]} | :table_not_found

Load column information about a given table using a provided inspector.

Link to this function

load_relation(table, arg)

View Source
@spec load_relation(String.t(), inspector()) ::
  {:ok, relation_info()} | {:error, String.t()}

Expects the table name provided by the user and validates that the table exists and returns the relation.

The table name can be quoted or unquoted and can optionally be qualified, e.g. users would return {"public", "users"},

 `usErs` would return `{"public", "users"}`,
 `"Users"` would return `{"public", "Users"}`,
 `some_schema.users` would return `{"some_schema", "users"}`.