View Source ExcellentMigrations.DangersDetector (excellent_migrations v0.1.8)
This module finds potentially dangerous or destructive database operations in a given migration AST.
Link to this section Summary
Functions
Traverses ast
and finds potentially dangerous database operations. Returns keyword list
containing danger types and lines where they were detected.
Link to this section Types
@type danger_type() ::
:check_constraint_added
| :column_added_with_default
| :column_reference_added
| :column_removed
| :column_renamed
| :column_type_changed
| :column_volatile_default
| :index_concurrently_without_disable_ddl_transaction
| :index_concurrently_without_disable_migration_lock
| :index_not_concurrently
| :json_column_added
| :many_columns_index
| :not_null_added
| :operation_delete
| :operation_insert
| :operation_update
| :raw_sql_executed
| :table_dropped
| :table_renamed
@type line() :: integer()
Link to this section Functions
@spec detect_dangers(ast(), String.t()) :: [{danger_type(), line()}]
Traverses ast
and finds potentially dangerous database operations. Returns keyword list
containing danger types and lines where they were detected.
parameters
Parameters
ast
is a structure that represents AST of database migration. It can be obtained e.g. viaCode.string_to_quoted!/1
.
examples
Examples
iex> source_code = """
...> alter table("dumplings") do
...> remove(:taste, :string)
...> remove(:stuffing, :string)
...> end
...> """
iex> ast = Code.string_to_quoted!(source_code)
{:ok,
{:alter, [line: 1],
[
{:table, [line: 1], ["dumplings"]},
[
do: {:__block__, [],
[
{:remove, [line: 2], [:taste, :string]},
{:remove, [line: 3], [:stuffing, :string]}
]}
]
]}}
iex> ExcellentMigrations.DangersDetector.detect_dangers(ast, source_code)
[column_removed: 2, column_removed: 3]