From 9b98232cfa6c1da74678656a75637b2e9cef3b00 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 4 Oct 2023 13:47:29 -0400 Subject: [PATCH 1/3] raise if using an in memory database with pool_size != 1 --- CHANGELOG.md | 2 ++ lib/ecto/adapters/sqlite3.ex | 6 ++++++ test/ecto/adapters/sqlite3_test.exs | 14 ++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de11682..31b9d1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ project adheres to [Semantic Versioning][semver]. ## Unreleased +- changed: raise if an in memory database is opened with a pool_size > 1 + ## v0.11.0 - added: Support for DDL transactions. diff --git a/lib/ecto/adapters/sqlite3.ex b/lib/ecto/adapters/sqlite3.ex index 9365d36..69c065a 100644 --- a/lib/ecto/adapters/sqlite3.ex +++ b/lib/ecto/adapters/sqlite3.ex @@ -210,6 +210,7 @@ defmodule Ecto.Adapters.SQLite3 do @impl Ecto.Adapter.Storage def storage_up(options) do database = Keyword.get(options, :database) + pool_size = Keyword.get(options, :pool_size) cond do is_nil(database) -> @@ -226,6 +227,11 @@ defmodule Ecto.Adapters.SQLite3 do File.exists?(database) -> {:error, :already_up} + database == ":memory:" && pool_size != 1 -> + raise ArgumentError, """ + In memory databases must have a pool_size of 1 + """ + true -> {:ok, state} = Exqlite.Connection.connect(options) :ok = Exqlite.Connection.disconnect(:normal, state) diff --git a/test/ecto/adapters/sqlite3_test.exs b/test/ecto/adapters/sqlite3_test.exs index 20b0b1a..cae8f05 100644 --- a/test/ecto/adapters/sqlite3_test.exs +++ b/test/ecto/adapters/sqlite3_test.exs @@ -47,6 +47,20 @@ defmodule Ecto.Adapters.SQLite3ConnTest do fn -> SQLite3.storage_up(mumble: "no database here") == :ok end ) end + + test "can create an in memory database" do + assert SQLite3.storage_up(database: ":memory:", pool_size: 1) == :ok + end + + test "fails if in memory database does not have a pool size of 1" do + assert_raise( + ArgumentError, + """ + In memory databases must have a pool_size of 1 + """, + fn -> SQLite3.storage_up(database: ":memory:", pool_size: 2) == :ok end + ) + end end describe ".storage_down/2" do From 40cd45952b57a781fea95c70f09479e173e1e11a Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 4 Oct 2023 13:55:14 -0400 Subject: [PATCH 2/3] fix changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31b9d1b..dcd3538 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ project adheres to [Semantic Versioning][semver]. ## Unreleased -- changed: raise if an in memory database is opened with a pool_size > 1 +- changed: raise if an in memory database is opened with a pool_size != 1 ## v0.11.0 From 83b9a7ce8d083ea9bb389901a853d38571778b9e Mon Sep 17 00:00:00 2001 From: mdwaud Date: Thu, 5 Oct 2023 10:13:32 -0400 Subject: [PATCH 3/3] Update test/ecto/adapters/sqlite3_test.exs Co-authored-by: Matthew Johnston --- test/ecto/adapters/sqlite3_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ecto/adapters/sqlite3_test.exs b/test/ecto/adapters/sqlite3_test.exs index cae8f05..087eb0c 100644 --- a/test/ecto/adapters/sqlite3_test.exs +++ b/test/ecto/adapters/sqlite3_test.exs @@ -58,7 +58,7 @@ defmodule Ecto.Adapters.SQLite3ConnTest do """ In memory databases must have a pool_size of 1 """, - fn -> SQLite3.storage_up(database: ":memory:", pool_size: 2) == :ok end + fn -> SQLite3.storage_up(database: ":memory:", pool_size: 2) end ) end end