ExcellentMigrations.DangersDetector (excellent_migrations v0.1.3) View Source
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
Specs
Specs
danger_type() :: :column_added_with_default | :column_removed | :column_renamed | :column_type_changed | :index_not_concurrently | :many_columns_index | :not_null_added | :operation_delete | :operation_insert | :operation_update | :raw_sql_executed | :table_dropped | :table_renamed
Specs
line() :: integer()
Link to this section Functions
Specs
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
ast
is a structure that represents AST of database migration. It can be obtained e.g. viaCode.string_to_quoted!/1
.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]