internal void ExecuteTransactionYukon(SqlInternalConnection.TransactionRequest transactionRequest, string transactionName, System.Data.IsolationLevel iso, SqlInternalTransaction internalTransaction, bool isDelegateControlRequest)
{
TdsEnums.TransactionManagerRequestType begin = TdsEnums.TransactionManagerRequestType.Begin;
TdsEnums.TransactionManagerIsolationLevel readCommitted = TdsEnums.TransactionManagerIsolationLevel.ReadCommitted;
switch (iso)
{
case System.Data.IsolationLevel.Unspecified:
readCommitted = TdsEnums.TransactionManagerIsolationLevel.Unspecified;
break;
case System.Data.IsolationLevel.Chaos:
throw SQL.NotSupportedIsolationLevel(iso);
case System.Data.IsolationLevel.ReadUncommitted:
readCommitted = TdsEnums.TransactionManagerIsolationLevel.ReadUncommitted;
break;
case System.Data.IsolationLevel.Serializable:
readCommitted = TdsEnums.TransactionManagerIsolationLevel.Serializable;
break;
case System.Data.IsolationLevel.Snapshot:
readCommitted = TdsEnums.TransactionManagerIsolationLevel.Snapshot;
break;
case System.Data.IsolationLevel.ReadCommitted:
readCommitted = TdsEnums.TransactionManagerIsolationLevel.ReadCommitted;
break;
case System.Data.IsolationLevel.RepeatableRead:
readCommitted = TdsEnums.TransactionManagerIsolationLevel.RepeatableRead;
break;
default:
throw ADP.InvalidIsolationLevel(iso);
}
TdsParserStateObject session = this._parser._physicalStateObj;
TdsParser parser = this._parser;
bool flag = false;
bool lockTaken = false;
try
{
switch (transactionRequest)
{
case SqlInternalConnection.TransactionRequest.Begin:
begin = TdsEnums.TransactionManagerRequestType.Begin;
break;
case SqlInternalConnection.TransactionRequest.Promote:
begin = TdsEnums.TransactionManagerRequestType.Promote;
break;
case SqlInternalConnection.TransactionRequest.Commit:
begin = TdsEnums.TransactionManagerRequestType.Commit;
break;
case SqlInternalConnection.TransactionRequest.Rollback:
case SqlInternalConnection.TransactionRequest.IfRollback:
begin = TdsEnums.TransactionManagerRequestType.Rollback;
break;
case SqlInternalConnection.TransactionRequest.Save:
begin = TdsEnums.TransactionManagerRequestType.Save;
break;
}
if ((internalTransaction != null) && internalTransaction.IsDelegated)
{
if (!this._parser.MARSOn)
{
if (internalTransaction.OpenResultsCount != 0)
{
throw SQL.CannotCompleteDelegatedTransactionWithOpenResults();
}
Monitor.Enter(session, ref lockTaken);
if (internalTransaction.OpenResultsCount != 0)
{
throw SQL.CannotCompleteDelegatedTransactionWithOpenResults();
}
}
else
{
session = this._parser.GetSession(this);
flag = true;
}
}
this._parser.TdsExecuteTransactionManagerRequest(null, begin, transactionName, readCommitted, base.ConnectionOptions.ConnectTimeout, internalTransaction, session, isDelegateControlRequest);
}
finally
{
if (flag)
{
parser.PutSession(session);
}
if (lockTaken)
{
Monitor.Exit(session);
}
}
}