private static T Execute <T>(WrappedConnection wrappedConnection, string sql, Func <IDbCommand, T> query)
        {
            Check.NotNull(wrappedConnection, nameof(wrappedConnection));
            Check.NotNullOrEmpty(sql, nameof(sql));
            Check.NotNull(query, nameof(query));

            bool wasClosed = wrappedConnection.DbConnection.State == ConnectionState.Closed;

            try
            {
                if (wasClosed)
                {
                    wrappedConnection.Open();
                }

                using (IDbCommand cmd = wrappedConnection.DbConnection.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Transaction = wrappedConnection.CurrentTx;

                    return(query(cmd));
                }
            }
            catch (Exception ex)
            {
                throw new EvolveSqlException(sql, ex);
            }
            finally
            {
                if (wasClosed)
                {
                    wrappedConnection.Close();
                }
            }
        }
Beispiel #2
0
        public void When_opened_multiple_times_a_single_call_to_close_is_not_enought()
        {
            var cnn = _pgContainer.CreateDbConnection();

            using (var wrappedConnection = new WrappedConnection(cnn))
            {
                wrappedConnection.Open();
                wrappedConnection.Open();
                wrappedConnection.Open();

                wrappedConnection.Close();

                Assert.True(wrappedConnection.DbConnection.State == ConnectionState.Open);
            }

            Assert.True(cnn.State == ConnectionState.Closed);
        }
        public void When_opened_multiple_times_a_single_call_to_close_is_not_enought()
        {
            var cnn = new SqliteConnection("Data Source=:memory:");

            using (var wrappedConnection = new WrappedConnection(cnn))
            {
                wrappedConnection.Open();
                wrappedConnection.Open();
                wrappedConnection.Open();

                wrappedConnection.Close();

                Assert.True(wrappedConnection.DbConnection.State == ConnectionState.Open);
            }

            Assert.True(cnn.State == ConnectionState.Closed);
        }
Beispiel #4
0
        static SQLiteSchema LoadChinookDatabase(WrappedConnection cnn)
        {
            cnn.Open();
            using var command   = cnn.DbConnection.CreateCommand();
            command.CommandText = TestContext.SQLite.ChinookScript;
            command.ExecuteNonQuery();

            return(new SQLiteSchema(cnn));
        }
        public void When_disposed_inner_dbconnection_is_closed()
        {
            var cnn = new SqliteConnection("Data Source=:memory:");

            using (var wrappedConnection = new WrappedConnection(cnn))
            {
                wrappedConnection.Open();
            }

            Assert.True(cnn.State == ConnectionState.Closed);
        }
Beispiel #6
0
        public void When_disposed_inner_dbconnection_is_closed()
        {
            var cnn = _pgContainer.CreateDbConnection();

            using (var wrappedConnection = new WrappedConnection(cnn))
            {
                wrappedConnection.Open();
            }

            Assert.True(cnn.State == ConnectionState.Closed);
        }
Beispiel #7
0
        public static SQLiteSchema LoadChinookDatabase(WrappedConnection connection)
        {
            connection.Open();
            using (var command = connection.DbConnection.CreateCommand())
            {
                command.CommandText = File.ReadAllText(TestContext.ChinookScriptPath);
                command.ExecuteNonQuery();
            }

            return(new SQLiteSchema(connection));
        }
Beispiel #8
0
 public override void Open()
 {
     _catalogHelpers = null;
     WrappedConnection.Open();
     ExecSql("SET LOCKMODE session WHERE readlock=nolock");
     if (JoinOPGreedy)
     {
         ExecSql("SET JOINOP GREEDY");
     }
     if (JoinOPTimeout > 0)
     {
         ExecSql("SET JOINOP TIMEOUT " + JoinOPTimeout.ToString());
     }
 }
Beispiel #9
0
        /// <inheritdoc cref="DbConnection.Open()" />
        public override void Open()
        {
            if (Profiler == null || !Profiler.IsEnabled)
            {
                WrappedConnection.Open();

                return;
            }

            Profiler.OnOpening(this);

            WrappedConnection.Open();

            Profiler.OnOpened(this);
        }
Beispiel #10
0
        private static T Execute <T>(WrappedConnection wrappedConnection, string sql, Func <IDbCommand, T> query, Action <IDbCommand>?setupDbCommand = null)
        {
            Check.NotNull(wrappedConnection, nameof(wrappedConnection));
            Check.NotNullOrEmpty(sql, nameof(sql));
            Check.NotNull(query, nameof(query));

            try
            {
                wrappedConnection.Open();
                using var cmd   = wrappedConnection.DbConnection.CreateCommand();
                cmd.CommandText = sql;
                cmd.Transaction = wrappedConnection.CurrentTx;
                setupDbCommand?.Invoke(cmd);

                // Do not close the connection since it will release the database
                // lock used to prevent concurrent execution of Evolve.

                return(query(cmd));
            }
            catch (Exception ex)
            {
                throw new EvolveSqlException(sql, ex);
            }
        }