private TransactionParameterBuffer BuildTpb(FbTransactionOptions options) { TransactionParameterBuffer tpb = new TransactionParameterBuffer(); tpb.Append(IscCodes.isc_tpb_version3); if ((options & FbTransactionOptions.Consistency) == FbTransactionOptions.Consistency) { tpb.Append(IscCodes.isc_tpb_consistency); } if ((options & FbTransactionOptions.Concurrency) == FbTransactionOptions.Concurrency) { tpb.Append(IscCodes.isc_tpb_concurrency); } if ((options & FbTransactionOptions.Shared) == FbTransactionOptions.Shared) { tpb.Append(IscCodes.isc_tpb_shared); } if ((options & FbTransactionOptions.Protected) == FbTransactionOptions.Protected) { tpb.Append(IscCodes.isc_tpb_protected); } if ((options & FbTransactionOptions.Exclusive) == FbTransactionOptions.Exclusive) { tpb.Append(IscCodes.isc_tpb_exclusive); } if ((options & FbTransactionOptions.Wait) == FbTransactionOptions.Wait) { tpb.Append(IscCodes.isc_tpb_wait); } if ((options & FbTransactionOptions.NoWait) == FbTransactionOptions.NoWait) { tpb.Append(IscCodes.isc_tpb_nowait); } if ((options & FbTransactionOptions.Read) == FbTransactionOptions.Read) { tpb.Append(IscCodes.isc_tpb_read); } if ((options & FbTransactionOptions.Write) == FbTransactionOptions.Write) { tpb.Append(IscCodes.isc_tpb_write); } if ((options & FbTransactionOptions.LockRead) == FbTransactionOptions.LockRead) { tpb.Append(IscCodes.isc_tpb_lock_read); } if ((options & FbTransactionOptions.LockWrite) == FbTransactionOptions.LockWrite) { tpb.Append(IscCodes.isc_tpb_lock_write); } if ((options & FbTransactionOptions.ReadCommitted) == FbTransactionOptions.ReadCommitted) { tpb.Append(IscCodes.isc_tpb_read_committed); } if ((options & FbTransactionOptions.Autocommit) == FbTransactionOptions.Autocommit) { tpb.Append(IscCodes.isc_tpb_autocommit); } if ((options & FbTransactionOptions.RecVersion) == FbTransactionOptions.RecVersion) { tpb.Append(IscCodes.isc_tpb_rec_version); } if ((options & FbTransactionOptions.NoRecVersion) == FbTransactionOptions.NoRecVersion) { tpb.Append(IscCodes.isc_tpb_no_rec_version); } if ((options & FbTransactionOptions.RestartRequests) == FbTransactionOptions.RestartRequests) { tpb.Append(IscCodes.isc_tpb_restart_requests); } if ((options & FbTransactionOptions.NoAutoUndo) == FbTransactionOptions.NoAutoUndo) { tpb.Append(IscCodes.isc_tpb_no_auto_undo); } return tpb; }
private TransactionParameterBuffer BuildTpb(FbTransactionOptions options) { TransactionParameterBuffer tpb = new TransactionParameterBuffer(); tpb.Append(IscCodes.isc_tpb_version3); if ((options.TransactionBehavior & FbTransactionBehavior.Consistency) == FbTransactionBehavior.Consistency) { tpb.Append(IscCodes.isc_tpb_consistency); } if ((options.TransactionBehavior & FbTransactionBehavior.Concurrency) == FbTransactionBehavior.Concurrency) { tpb.Append(IscCodes.isc_tpb_concurrency); } if ((options.TransactionBehavior & FbTransactionBehavior.Wait) == FbTransactionBehavior.Wait) { tpb.Append(IscCodes.isc_tpb_wait); if (options.WaitTimeout.HasValue) { tpb.Append(IscCodes.isc_tpb_lock_timeout, (short)options.WaitTimeout); } } if ((options.TransactionBehavior & FbTransactionBehavior.NoWait) == FbTransactionBehavior.NoWait) { tpb.Append(IscCodes.isc_tpb_nowait); } if ((options.TransactionBehavior & FbTransactionBehavior.Read) == FbTransactionBehavior.Read) { tpb.Append(IscCodes.isc_tpb_read); } if ((options.TransactionBehavior & FbTransactionBehavior.Write) == FbTransactionBehavior.Write) { tpb.Append(IscCodes.isc_tpb_write); } foreach (var table in options.LockTables) { int lockType; if ((table.Value & FbTransactionBehavior.LockRead) == FbTransactionBehavior.LockRead) { lockType = IscCodes.isc_tpb_lock_read; } else if ((table.Value & FbTransactionBehavior.LockWrite) == FbTransactionBehavior.LockWrite) { lockType = IscCodes.isc_tpb_lock_write; } else { throw new ArgumentException("Must specify either LockRead or LockWrite."); } tpb.Append(lockType, table.Key); int? lockBehavior = null; if ((table.Value & FbTransactionBehavior.Exclusive) == FbTransactionBehavior.Exclusive) { lockBehavior = IscCodes.isc_tpb_exclusive; } else if ((table.Value & FbTransactionBehavior.Protected) == FbTransactionBehavior.Protected) { lockBehavior = IscCodes.isc_tpb_protected; } else if ((table.Value & FbTransactionBehavior.Shared) == FbTransactionBehavior.Shared) { lockBehavior = IscCodes.isc_tpb_shared; } if (lockBehavior.HasValue) tpb.Append((int)lockBehavior); } if ((options.TransactionBehavior & FbTransactionBehavior.ReadCommitted) == FbTransactionBehavior.ReadCommitted) { tpb.Append(IscCodes.isc_tpb_read_committed); } if ((options.TransactionBehavior & FbTransactionBehavior.Autocommit) == FbTransactionBehavior.Autocommit) { tpb.Append(IscCodes.isc_tpb_autocommit); } if ((options.TransactionBehavior & FbTransactionBehavior.RecVersion) == FbTransactionBehavior.RecVersion) { tpb.Append(IscCodes.isc_tpb_rec_version); } if ((options.TransactionBehavior & FbTransactionBehavior.NoRecVersion) == FbTransactionBehavior.NoRecVersion) { tpb.Append(IscCodes.isc_tpb_no_rec_version); } if ((options.TransactionBehavior & FbTransactionBehavior.RestartRequests) == FbTransactionBehavior.RestartRequests) { tpb.Append(IscCodes.isc_tpb_restart_requests); } if ((options.TransactionBehavior & FbTransactionBehavior.NoAutoUndo) == FbTransactionBehavior.NoAutoUndo) { tpb.Append(IscCodes.isc_tpb_no_auto_undo); } return tpb; }
private TransactionParameterBuffer BuildTpb(FbTransactionOptions options) { TransactionParameterBuffer tpb = new TransactionParameterBuffer(); tpb.Append(IscCodes.isc_tpb_version3); FbTransactionOptions[] o = (FbTransactionOptions[])Enum.GetValues(options.GetType()); for (int i = 0; i < o.Length; i++) { FbTransactionOptions option = ((FbTransactionOptions)(o[i])); if ((options & option) == option) { switch (option) { case FbTransactionOptions.Consistency: tpb.Append(IscCodes.isc_tpb_consistency); break; case FbTransactionOptions.Concurrency: tpb.Append(IscCodes.isc_tpb_concurrency); break; case FbTransactionOptions.Shared: tpb.Append(IscCodes.isc_tpb_shared); break; case FbTransactionOptions.Protected: tpb.Append(IscCodes.isc_tpb_protected); break; case FbTransactionOptions.Exclusive: tpb.Append(IscCodes.isc_tpb_exclusive); break; case FbTransactionOptions.Wait: tpb.Append(IscCodes.isc_tpb_wait); break; case FbTransactionOptions.NoWait: tpb.Append(IscCodes.isc_tpb_nowait); break; case FbTransactionOptions.Read: tpb.Append(IscCodes.isc_tpb_read); break; case FbTransactionOptions.Write: tpb.Append(IscCodes.isc_tpb_write); break; case FbTransactionOptions.LockRead: tpb.Append(IscCodes.isc_tpb_lock_read); break; case FbTransactionOptions.LockWrite: tpb.Append(IscCodes.isc_tpb_lock_write); break; case FbTransactionOptions.ReadCommitted: tpb.Append(IscCodes.isc_tpb_read_committed); break; case FbTransactionOptions.Autocommit: tpb.Append(IscCodes.isc_tpb_autocommit); break; case FbTransactionOptions.RecVersion: tpb.Append(IscCodes.isc_tpb_rec_version); break; case FbTransactionOptions.NoRecVersion: tpb.Append(IscCodes.isc_tpb_no_rec_version); break; case FbTransactionOptions.RestartRequests: tpb.Append(IscCodes.isc_tpb_restart_requests); break; case FbTransactionOptions.NoAutoUndo: tpb.Append(IscCodes.isc_tpb_no_auto_undo); break; } } } return tpb; }