diff --git a/README.md b/README.md index cd26449..32dc72c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ by adding `mssqlex` to your list of dependencies in `mix.exs`: ```elixir def deps do - [{:mssqlex, "~> 0.1.0"}] + [{:mssqlex, "~> 0.1"}] end ``` diff --git a/lib/mssqlex/protocol.ex b/lib/mssqlex/protocol.ex index 7fedf59..7e186bb 100644 --- a/lib/mssqlex/protocol.ex +++ b/lib/mssqlex/protocol.ex @@ -97,7 +97,13 @@ defmodule Mssqlex.Protocol do {:ok, result, state} | {:error | :disconnect, Exception.t, state} def handle_begin(_opts, state) do - {:ok, %Result{num_rows: 0}, Map.put(state, :mssql, :transaction)} + case state.mssql do + :idle -> {:ok, %Result{num_rows: 0}, %{state | mssql: :transaction}} + :transaction -> {:error, + %Mssqlex.Error{message: "Already in transaction"}} + :auto_commit -> {:error, + %Mssqlex.Error{message: "Transactions not allowed in autocommit mode"}} + end end @doc false @@ -106,7 +112,7 @@ defmodule Mssqlex.Protocol do {:error | :disconnect, Exception.t, state} def handle_commit(_opts, state = %{pid: pid}) do case ODBC.commit(pid) do - :ok -> {:ok, %Result{}, state} + :ok -> {:ok, %Result{}, %{state | mssql: :idle}} {:error, reason} -> {:error, reason, state} end end @@ -117,8 +123,8 @@ defmodule Mssqlex.Protocol do {:error | :disconnect, Exception.t, state} def handle_rollback(_opts, state = %{pid: pid}) do case ODBC.rollback(pid) do - :ok -> {:ok, %Result{}, state} - {:error, reason} -> {:error, reason. state} + :ok -> {:ok, %Result{}, %{state | mssql: :idle}} + {:error, reason} -> {:disconnect, reason. state} end end diff --git a/mix.exs b/mix.exs index 040b66b..a7ced93 100644 --- a/mix.exs +++ b/mix.exs @@ -3,7 +3,7 @@ defmodule Mssqlex.Mixfile do def project do [app: :mssqlex, - version: "0.1.0", + version: "0.1.1", description: "Adapter to Microsoft SQL Server. Using DBConnection and ODBC.", elixir: "~> 1.4", build_embedded: Mix.env == :prod,