An Ecto SQLite3 adapter.
0

Configure Feed

Select the types of activity you want to include in your feed.

Handle support for both Jason and JSON

We will simply rescue the exception thrown by both libraries and return
a simple `:error` to keep the interface consistent. We will need to keep
an eye on upstream changes in Ecto as support for both `JSON` and `Jason`
evolve.

closes: #159

Matthew Johnston (Jan 9, 2025, 8:17 AM -0600) ed3787ee afe87eb1

+10 -6
+6 -2
lib/ecto/adapters/sqlite3/codec.ex
··· 10 10 def bool_decode(v), do: {:ok, v} 11 11 12 12 def json_decode(v) when is_binary(v) do 13 - Application.get_env(:ecto_sqlite3, :json_library, Jason).decode(v) 13 + {:ok, Application.get_env(:ecto_sqlite3, :json_library, Jason).decode!(v)} 14 + rescue 15 + _ -> :error 14 16 end 15 17 16 18 def json_decode(v), do: {:ok, v} ··· 89 91 def json_encode(value) when is_bitstring(value), do: {:ok, value} 90 92 91 93 def json_encode(value) do 92 - Application.get_env(:ecto_sqlite3, :json_library, Jason).encode(value) 94 + {:ok, Application.get_env(:ecto_sqlite3, :json_library, Jason).encode!(value)} 95 + rescue 96 + _err -> :error 93 97 end 94 98 95 99 def blob_encode(nil), do: {:ok, nil}
+4 -4
test/ecto/adapters/sqlite3/codec_test.exs
··· 35 35 end 36 36 37 37 test "handles malformed json" do 38 - {:error, _} = Codec.json_decode("") 39 - {:error, _} = Codec.json_decode(" ") 40 - {:error, _} = Codec.json_decode("{") 41 - {:error, _} = Codec.json_decode("[") 38 + :error = Codec.json_decode("") 39 + :error = Codec.json_decode(" ") 40 + :error = Codec.json_decode("{") 41 + :error = Codec.json_decode("[") 42 42 end 43 43 end 44 44