Improved index to respect nulls
This commit is contained in:
@@ -107,7 +107,7 @@ defmodule Pinchflat.Sources.Source do
|
|||||||
|> dynamic_default(:uuid, fn _ -> Ecto.UUID.generate() end)
|
|> dynamic_default(:uuid, fn _ -> Ecto.UUID.generate() end)
|
||||||
|> validate_required(required_fields)
|
|> validate_required(required_fields)
|
||||||
|> cast_assoc(:metadata, with: &SourceMetadata.changeset/2, required: false)
|
|> cast_assoc(:metadata, with: &SourceMetadata.changeset/2, required: false)
|
||||||
|> unique_constraint([:collection_id, :media_profile_id, :title_filter_regex])
|
|> unique_constraint([:collection_id, :media_profile_id, :title_filter_regex], error_key: :original_url)
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc false
|
@doc false
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
defmodule Pinchflat.Repo.Migrations.ReReAddSourceUniquenessIndex do
|
defmodule Pinchflat.Repo.Migrations.ReReAddSourceUniquenessIndex do
|
||||||
use Ecto.Migration
|
use Ecto.Migration
|
||||||
|
|
||||||
def change do
|
def up do
|
||||||
create unique_index(:sources, [:collection_id, :media_profile_id, :title_filter_regex])
|
execute """
|
||||||
|
CREATE UNIQUE INDEX sources_collection_id_media_profile_id_title_filter_regex_index ON sources (
|
||||||
|
collection_id,
|
||||||
|
media_profile_id,
|
||||||
|
IFNULL(title_filter_regex, '')
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
execute """
|
||||||
|
DROP INDEX sources_collection_id_media_profile_id_title_filter_regex_index;
|
||||||
|
"""
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ defmodule Pinchflat.SourcesTest do
|
|||||||
valid_once_attrs = %{
|
valid_once_attrs = %{
|
||||||
media_profile_id: media_profile_fixture().id,
|
media_profile_id: media_profile_fixture().id,
|
||||||
original_url: "https://www.youtube.com/channel/abc123",
|
original_url: "https://www.youtube.com/channel/abc123",
|
||||||
title_filter_regex: "TEST"
|
title_filter_regex: nil
|
||||||
}
|
}
|
||||||
|
|
||||||
assert {:ok, %Source{}} = Sources.create_source(valid_once_attrs)
|
assert {:ok, %Source{}} = Sources.create_source(valid_once_attrs)
|
||||||
|
|||||||
Reference in New Issue
Block a user