ad29b8f96d
So that one can search for 'bjorn' and find 'Bjørn'
276 lines
5.2 KiB
Elixir
276 lines
5.2 KiB
Elixir
defmodule MusicLibrary.Repo.Migrations.CreateUnaccentedSearchIndex do
|
|
use Ecto.Migration
|
|
|
|
def up do
|
|
execute "DROP TRIGGER IF EXISTS records_after_update"
|
|
execute "DROP TRIGGER IF EXISTS records_after_insert"
|
|
execute "DROP TABLE records_search_index"
|
|
|
|
flush()
|
|
|
|
execute """
|
|
CREATE VIRTUAL TABLE records_search_index USING fts5(
|
|
id UNINDEXED,
|
|
type,
|
|
format,
|
|
title,
|
|
normalized_title,
|
|
artists,
|
|
normalized_artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids UNINDEXED,
|
|
included_release_group_ids UNINDEXED,
|
|
cover_hash UNINDEXED,
|
|
purchased_at UNINDEXED,
|
|
release_date
|
|
);
|
|
"""
|
|
|
|
flush()
|
|
|
|
execute """
|
|
CREATE TRIGGER records_after_insert
|
|
AFTER INSERT ON records
|
|
BEGIN
|
|
INSERT INTO records_search_index(
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
normalized_title,
|
|
artists,
|
|
normalized_artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
) SELECT
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
unaccent(title),
|
|
artists,
|
|
unaccent(artists),
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
FROM records
|
|
WHERE NEW.id = records.id;
|
|
END;
|
|
"""
|
|
|
|
execute """
|
|
CREATE TRIGGER records_after_update
|
|
AFTER UPDATE ON records
|
|
BEGIN
|
|
INSERT INTO records_search_index(
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
normalized_title,
|
|
artists,
|
|
normalized_artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
) SELECT
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
unaccent(title),
|
|
artists,
|
|
unaccent(artists),
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
FROM records
|
|
WHERE NEW.id = records.id;
|
|
END;
|
|
"""
|
|
|
|
flush()
|
|
|
|
execute """
|
|
INSERT INTO records_search_index(
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
normalized_title,
|
|
artists,
|
|
normalized_artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
) SELECT
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
unaccent(title),
|
|
artists,
|
|
unaccent(artists),
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
FROM records;
|
|
"""
|
|
end
|
|
|
|
def down do
|
|
execute "DROP TRIGGER IF EXISTS records_after_update"
|
|
execute "DROP TRIGGER IF EXISTS records_after_insert"
|
|
execute "DROP TABLE records_search_index"
|
|
|
|
flush()
|
|
|
|
execute """
|
|
CREATE VIRTUAL TABLE records_search_index USING fts5(
|
|
id UNINDEXED,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids UNINDEXED,
|
|
included_release_group_ids UNINDEXED,
|
|
cover_hash UNINDEXED,
|
|
purchased_at UNINDEXED,
|
|
release_date
|
|
);
|
|
"""
|
|
|
|
flush()
|
|
|
|
execute """
|
|
CREATE TRIGGER records_after_insert
|
|
AFTER INSERT ON records
|
|
BEGIN
|
|
INSERT INTO records_search_index(
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
) SELECT
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
FROM records
|
|
WHERE NEW.id = records.id;
|
|
END;
|
|
"""
|
|
|
|
execute """
|
|
CREATE TRIGGER records_after_update
|
|
AFTER UPDATE ON records
|
|
BEGIN
|
|
INSERT INTO records_search_index(
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
) SELECT
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
FROM records
|
|
WHERE NEW.id = records.id;
|
|
END;
|
|
"""
|
|
|
|
flush()
|
|
|
|
execute """
|
|
INSERT INTO records_search_index(
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
) SELECT
|
|
id,
|
|
type,
|
|
format,
|
|
title,
|
|
artists,
|
|
genres,
|
|
musicbrainz_id,
|
|
release_ids,
|
|
included_release_group_ids,
|
|
cover_hash,
|
|
purchased_at,
|
|
release_date
|
|
FROM records;
|
|
"""
|
|
end
|
|
end
|