Helpers for creating the Bandera flags table. Call from your own migration:
defmodule MyApp.Repo.Migrations.CreateBanderaFlags do
use Ecto.Migration
def up, do: Bandera.Ecto.Migrations.up()
def down, do: Bandera.Ecto.Migrations.down()
endThe table name is read at runtime from config :bandera, persistence: [ecto_table_name: ...]
(default "bandera_flags"), so it is never fixed at compile time.
Summary
Functions
Fixes boolean gate rows left by a FunWithFlags-to-Bandera migration.
Creates the flags table and its unique index (idempotently).
Add the schema-v2 value column to an existing flags table.
Functions
@spec down() :: :ok
Drops the flags table. Call from the down/0 of your own migration.
@spec fix_fun_with_flags_boolean_gates() :: :ok
Fixes boolean gate rows left by a FunWithFlags-to-Bandera migration.
FunWithFlags stored boolean gates with a legacy target value; Bandera uses
"_bandera_none". Because the Ecto adapter's upsert conflict target is
(flag_name, gate_type, target), toggling a flag via Bandera after migration
inserts a second boolean row rather than updating the legacy one. This leaves
two rows with contradictory enabled values, causing the dashboard toggle and
summary to disagree and making the toggle appear broken.
Run once from a migration after switching to Bandera:
defmodule MyApp.Repo.Migrations.FixFunWithFlagsBooleanGates do
use Ecto.Migration
def up, do: Bandera.Ecto.Migrations.fix_fun_with_flags_boolean_gates()
def down, do: :ok
endSafe to run on a database that has already been fully migrated — it will find
nothing to change. Not reversible (down should be a no-op).
@spec up() :: :ok
Creates the flags table and its unique index (idempotently).
Call from the up/0 of your own migration. The table name is read at runtime
from Bandera.Config.ecto_table_name/0.
@spec upgrade_v2() :: :ok
Add the schema-v2 value column to an existing flags table.
Call once from the up/0 of a versioned migration in an existing install:
defmodule MyApp.Repo.Migrations.UpgradeBanderaV2 do
use Ecto.Migration
def up, do: Bandera.Ecto.Migrations.upgrade_v2()
endUses a plain add/2 (not add_if_not_exists/2) so it works on adapters such as
SQLite3 that reject conditional column additions; migration versioning ensures it
runs only once.