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)
openSUSE Build Service is sponsored by