diff --git a/lib/music_library/repo.ex b/lib/music_library/repo.ex index 8251777c..ce6174f6 100644 --- a/lib/music_library/repo.ex +++ b/lib/music_library/repo.ex @@ -2,4 +2,38 @@ defmodule MusicLibrary.Repo do use Ecto.Repo, otp_app: :music_library, adapter: Ecto.Adapters.SQLite3 + + def init(_context, config) do + {:ok, + Keyword.put(config, :load_extensions, [ + extension_path("unicode") + ])} + end + + def extension_path(name) do + [arch | _rest] = :erlang.system_info(:system_architecture) + |> List.to_string() + |> String.split("-") + + {_, os} = :os.type() + + platform = case {os, arch} do + {:darwin, "x86_64"} -> "darwin-amd64" + {:darwin, "aarch64"} -> "darwin-aarch64" + {:linux, "x86_64"} -> "linux-amd64" + _other -> raise "Unsupported OS or platform" + end + + extension = case os do + :darwin -> "dylib" + :linux -> "so" + end + + Path.join([ + :code.priv_dir(:music_library), + "sqlite_extensions", + platform, + "#{name}.#{extension}" + ]) + end end diff --git a/priv/sqlite_extensions/README.md b/priv/sqlite_extensions/README.md new file mode 100644 index 00000000..863c9bf8 --- /dev/null +++ b/priv/sqlite_extensions/README.md @@ -0,0 +1,3 @@ +# SQLite extensions + +Lifted from , original files under MIT license. diff --git a/priv/sqlite_extensions/darwin-aarch64/unicode.dylib b/priv/sqlite_extensions/darwin-aarch64/unicode.dylib new file mode 100755 index 00000000..6a7a2b74 Binary files /dev/null and b/priv/sqlite_extensions/darwin-aarch64/unicode.dylib differ diff --git a/priv/sqlite_extensions/darwin-amd64/unicode.dylib b/priv/sqlite_extensions/darwin-amd64/unicode.dylib new file mode 100755 index 00000000..3f4d282b Binary files /dev/null and b/priv/sqlite_extensions/darwin-amd64/unicode.dylib differ diff --git a/priv/sqlite_extensions/linux-amd64/unicode.so b/priv/sqlite_extensions/linux-amd64/unicode.so new file mode 100755 index 00000000..1afc1f4c Binary files /dev/null and b/priv/sqlite_extensions/linux-amd64/unicode.so differ