/////////////////////////////////////////////////////////////////////////// #region Private Methods private System.Data.IsolationLevel GetSystemDataIsolationLevel( SQLiteConnection connection, Transaction transaction ) { if (transaction == null) { // // TODO: Perhaps throw an exception here if the connection // is null? // return((connection != null) ? connection.GetDefaultIsolationLevel() : SQLiteConnection.GetFallbackDefaultIsolationLevel()); } System.Transactions.IsolationLevel isolationLevel = transaction.IsolationLevel; // // TODO: Are these isolation level mappings actually correct? // switch (isolationLevel) { case IsolationLevel.Chaos: return(System.Data.IsolationLevel.Chaos); case IsolationLevel.ReadCommitted: return(System.Data.IsolationLevel.ReadCommitted); case IsolationLevel.ReadUncommitted: return(System.Data.IsolationLevel.ReadUncommitted); case IsolationLevel.RepeatableRead: return(System.Data.IsolationLevel.RepeatableRead); case IsolationLevel.Serializable: return(System.Data.IsolationLevel.Serializable); case IsolationLevel.Snapshot: return(System.Data.IsolationLevel.Snapshot); case IsolationLevel.Unspecified: return(System.Data.IsolationLevel.Unspecified); } // // TODO: Perhaps throw an exception here? // return(SQLiteConnection.GetFallbackDefaultIsolationLevel()); }
/////////////////////////////////////////////////////////////////////////// #region Private Methods private System.Data.IsolationLevel GetSystemDataIsolationLevel( SQLiteConnection connection, Transaction transaction, System.Data.IsolationLevel defaultIsolationLevel, bool throwOnUnavailable, bool throwOnUnsupported ) { if (transaction == null) { // // NOTE: If neither the transaction nor connection isolation // level is available, throw an exception if instructed // by the caller. // if (connection != null) { return(connection.GetDefaultIsolationLevel()); } if (throwOnUnavailable) { throw new InvalidOperationException( "isolation level is unavailable"); } return(defaultIsolationLevel); } IsolationLevel isolationLevel = transaction.IsolationLevel; // // TODO: Are these isolation level mappings actually correct? // switch (isolationLevel) { case IsolationLevel.Unspecified: return(System.Data.IsolationLevel.Unspecified); case IsolationLevel.Chaos: return(System.Data.IsolationLevel.Chaos); case IsolationLevel.ReadUncommitted: return(System.Data.IsolationLevel.ReadUncommitted); case IsolationLevel.ReadCommitted: return(System.Data.IsolationLevel.ReadCommitted); case IsolationLevel.RepeatableRead: return(System.Data.IsolationLevel.RepeatableRead); case IsolationLevel.Serializable: return(System.Data.IsolationLevel.Serializable); case IsolationLevel.Snapshot: return(System.Data.IsolationLevel.Snapshot); } // // NOTE: When in "strict" mode, throw an exception if the isolation // level is not recognized; otherwise, fallback to the default // isolation level specified by the caller. // if (throwOnUnsupported) { throw new InvalidOperationException( HelperMethods.StringFormat(CultureInfo.CurrentCulture, "unsupported isolation level {0}", isolationLevel)); } return(defaultIsolationLevel); }
/////////////////////////////////////////////////////////////////////////// #region Private Methods private System.Data.IsolationLevel GetSystemDataIsolationLevel( SQLiteConnection connection, Transaction transaction, System.Data.IsolationLevel defaultIsolationLevel, bool throwOnUnavailable, bool throwOnUnsupported ) { if (transaction == null) { // // NOTE: If neither the transaction nor connection isolation // level is available, throw an exception if instructed // by the caller. // if (connection != null) return connection.GetDefaultIsolationLevel(); if (throwOnUnavailable) { throw new InvalidOperationException( "isolation level is unavailable"); } return defaultIsolationLevel; } System.Transactions.IsolationLevel isolationLevel = transaction.IsolationLevel; // // TODO: Are these isolation level mappings actually correct? // switch (isolationLevel) { case IsolationLevel.Unspecified: return System.Data.IsolationLevel.Unspecified; case IsolationLevel.Chaos: return System.Data.IsolationLevel.Chaos; case IsolationLevel.ReadUncommitted: return System.Data.IsolationLevel.ReadUncommitted; case IsolationLevel.ReadCommitted: return System.Data.IsolationLevel.ReadCommitted; case IsolationLevel.RepeatableRead: return System.Data.IsolationLevel.RepeatableRead; case IsolationLevel.Serializable: return System.Data.IsolationLevel.Serializable; case IsolationLevel.Snapshot: return System.Data.IsolationLevel.Snapshot; } // // NOTE: When in "strict" mode, throw an exception if the isolation // level is not recognized; otherwise, fallback to the default // isolation level specified by the caller. // if (throwOnUnsupported) { throw new InvalidOperationException( UnsafeNativeMethods.StringFormat(CultureInfo.CurrentCulture, "unsupported isolation level {0}", isolationLevel)); } return defaultIsolationLevel; }