File myxql-0.6.3-git.patch of Package myxql
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3bc2631..940eb72 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,6 +20,8 @@ jobs:
pair:
- elixir: 1.11.3
otp: 23.2.5
+ - elixir: 1.14.0
+ otp: 25.1.2
include:
- db: mysql:8.0
pair:
diff --git a/lib/myxql/connection.ex b/lib/myxql/connection.ex
index 86bd590..408cfa3 100644
--- a/lib/myxql/connection.ex
+++ b/lib/myxql/connection.ex
@@ -438,7 +438,12 @@ defmodule MyXQL.Connection do
{:ok, result, state}
other ->
- result(other, statement, state)
+ # We convert {:error, exception, state} to {:error, state}
+ # so that DBConnection will disconnect during handle_begin/handle_rollback
+ # and will attempt to rollback during handle_commit
+ with {:error, _exception, state} <- result(other, statement, state) do
+ {:error, state}
+ end
end
end
diff --git a/lib/myxql/protocol/server_error_codes.ex b/lib/myxql/protocol/server_error_codes.ex
index 1107111..35e1c27 100644
--- a/lib/myxql/protocol/server_error_codes.ex
+++ b/lib/myxql/protocol/server_error_codes.ex
@@ -1,7 +1,15 @@
defmodule MyXQL.Protocol.ServerErrorCodes do
@moduledoc false
- codes = [
+ # TODO: remove when we require Elixir v1.10+
+ codes_from_config =
+ if Version.match?(System.version(), ">= 1.10.0") do
+ Application.compile_env(:myxql, :extra_error_codes, [])
+ else
+ apply(Application, :get_env, [:myxql, :extra_error_codes, []])
+ end
+
+ default_codes = [
{1005, :ER_CANT_CREATE_TABLE},
{1006, :ER_CANT_CREATE_DB},
{1007, :ER_DB_CREATE_EXISTS},
@@ -23,8 +31,7 @@ defmodule MyXQL.Protocol.ServerErrorCodes do
{1836, :ER_READ_ONLY_MODE}
]
- # TODO: use Application.compile_env/3 when we require Elixir v1.10
- codes = codes ++ Application.get_env(:myxql, :extra_error_codes, [])
+ codes = default_codes ++ codes_from_config
for {code, name} <- Enum.uniq(codes) do
def name_to_code(unquote(name)), do: unquote(code)