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 relation() :: Electric.relation()
@type relation_id() :: Electric.relation_id()
@type relation_info() :: %{relation_id: relation_id(), relation: relation()}
Callbacks
@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
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 load_column_info(relation(), inspector()) :: {:ok, [column_info()]} | :table_not_found
Load column information about a given table using a provided inspector.
@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"}`.