///////////////////////////////////////////////////////////////////////////

    #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(
                String.Format(CultureInfo.InvariantCulture,
                "unsupported isolation level {0}", isolationLevel));
        }

        return defaultIsolationLevel;
    }
Exemple #2
0
        ///////////////////////////////////////////////////////////////////////////

        #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(
                          String.Format(CultureInfo.InvariantCulture,
                                        "unsupported isolation level {0}", isolationLevel));
            }

            return(defaultIsolationLevel);
        }