From 9cee8944fa38f92cc2e000048fff232b8f5a1f75 Mon Sep 17 00:00:00 2001 From: Steven Blowers Date: Thu, 24 Aug 2017 09:27:20 +0100 Subject: [PATCH] doing update for savepoints --- lib/mssqlex/protocol.ex | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/lib/mssqlex/protocol.ex b/lib/mssqlex/protocol.ex index 43bbd4c..eaaad64 100644 --- a/lib/mssqlex/protocol.ex +++ b/lib/mssqlex/protocol.ex @@ -191,23 +191,34 @@ defmodule Mssqlex.Protocol do end defp handle_savepoint(:begin, opts, state) do - if state.mssql == :autocommit do - {:error, - %Mssqlex.Error{message: "savepoint not allowed in autocommit mode"}, - state} - else - handle_execute( - %Mssqlex.Query{name: "", statement: "SAVE TRANSACTION mssqlex_savepoint"}, - [], opts, state) + case state.mssql do + :idle -> + handle_execute(%Mssqlex.Query{name: "", statement: "SAVE TRANSACTION mssqlex_savepoint"}, [], opts, state) # Because everything is a transaction with ODBC + :transaction -> + handle_execute(%Mssqlex.Query{name: "", statement: "SAVE TRANSACTION mssqlex_savepoint"}, [], opts, state) + :autocommit -> + {:error, %Mssqlex.Error{message: "savepoint not allowed in autocommit mode"}, state} end end defp handle_savepoint(:commit, _opts, state) do - {:ok, %Result{}, state} + case state.mssql do + :idle -> + {:ok, %Result{}, state} + :transaction -> + {:ok, %Result{}, state} + :autocommit -> + {:error, %Mssqlex.Error{message: "savepoint not allowed in autocommit mode"}, state} + end end defp handle_savepoint(:rollback, opts, state) do - handle_execute( - %Mssqlex.Query{name: "", statement: "ROLLBACK TRANSACTION mssqlex_savepoint"}, - [], opts, state) + case state.mssql do + :idle -> + handle_execute(%Mssqlex.Query{name: "", statement: "ROLLBACK TRANSACTION mssqlex_savepoint"}, [], opts, state) # Because everything is a transaction with ODBC + :transaction -> + handle_execute(%Mssqlex.Query{name: "", statement: "ROLLBACK TRANSACTION mssqlex_savepoint"}, [], opts, state) + :autocommit -> + {:error, %Mssqlex.Error{message: "savepoint not allowed in autocommit mode"}, state} + end end @doc false