コード例 #1
0
 public void Rollback()
 {
     var connectionString = ConnectionString + ";enlist=true";
     using (var scope = new TransactionScope())
     using (var conn = new NpgsqlConnection(connectionString))
     {
         conn.Open();
         Assert.That(conn.ExecuteNonQuery(@"INSERT INTO data (name) VALUES('test')"), Is.EqualTo(1));
         // No commit
     }
     AssertNoPreparedTransactions();
     using (var conn = OpenConnection())
         Assert.That(conn.ExecuteScalar(@"SELECT COUNT(*) FROM data"), Is.EqualTo(0));
 }
コード例 #2
0
 public void ExplicitEnlist()
 {
     using (var conn = new NpgsqlConnection(ConnectionString))
     using (var scope = new TransactionScope())
     {
         conn.Open();
         conn.EnlistTransaction(Transaction.Current);
         Assert.That(conn.ExecuteNonQuery(@"INSERT INTO data (name) VALUES('test')"), Is.EqualTo(1));
         scope.Complete();
     }
     AssertNoPreparedTransactions();
     using (var conn = OpenConnection())
         Assert.That(conn.ExecuteScalar(@"SELECT COUNT(*) FROM data"), Is.EqualTo(1));
 }
コード例 #3
0
        public void OneTimeSetUp()
        {
            using (new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                try
                {
                    Transaction.Current.EnlistPromotableSinglePhase(new FakePromotableSinglePhaseNotification());
                }
                catch (NotImplementedException)
                {
                    Assert.Ignore("Promotable single phase transactions aren't supported (mono < 3.0.0?)");
                }
            }

            // All tests in this fixture should have totally access to the database they're running on.
            // If we run these tests in parallel (i.e. two builds in parallel) they will interfere.
            // Solve this by taking a PostgreSQL advisory lock for the lifetime of the fixture.
            _controlConn = OpenConnection();
            _controlConn.ExecuteNonQuery("SELECT pg_advisory_lock(666)");
        }
コード例 #4
0
 /// <summary>
 /// Execute NonQuery
 /// </summary>
 /// <param name="conn"></param>
 /// <param name="cmdText"></param>
 /// <param name="parameters"></param>
 public static void ExecuteNonQuery(this NpgsqlConnection conn, string cmdText, NpgsqlParameter[] parameters)
 {
     conn.CheckNull(nameof(conn));
     conn.ExecuteNonQuery(cmdText, parameters, CommandType.Text, null);
 }
コード例 #5
0
 /// <summary>
 /// Execute NonQuery
 /// </summary>
 /// <param name="conn"></param>
 /// <param name="cmdText"></param>
 /// <param name="commandType"></param>
 /// <param name="transaction"></param>
 public static void ExecuteNonQuery(this NpgsqlConnection conn, string cmdText, CommandType commandType, NpgsqlTransaction transaction)
 {
     conn.CheckNull(nameof(conn));
     conn.ExecuteNonQuery(cmdText, null, commandType, transaction);
 }
コード例 #6
0
ファイル: EnumTests.cs プロジェクト: ArsenShnurkov/npgsql
 public void ReadUnmappedEnumsAsString()
 {
     using (var conn = new NpgsqlConnection(ConnectionString))
     {
         conn.Open();
         conn.ExecuteNonQuery("CREATE TYPE pg_temp.mood7 AS ENUM ('Sad', 'Ok', 'Happy')");
         conn.ReloadTypes();
         using (var cmd = new NpgsqlCommand("SELECT 'Sad'::MOOD7, ARRAY['Ok', 'Happy']::MOOD7[]", conn))
         using (var reader = cmd.ExecuteReader())
         {
             reader.Read();
             Assert.That(reader[0], Is.EqualTo("Sad"));
             Assert.That(reader.GetDataTypeName(0), Does.StartWith("pg_temp").And.EndsWith("mood7"));
             Assert.That(reader[1], Is.EqualTo(new[] { "Ok", "Happy" }));
         }
     }
 }
コード例 #7
0
 public void Setup(NpgsqlConnection conn)
 {
     conn.ExecuteNonQuery("CREATE TEMP TABLE data (" +
                          "field_pk SERIAL PRIMARY KEY," +
                          "field_serial SERIAL," +
                          "field_int2 SMALLINT," +
                          "field_int4 INTEGER," +
                          "field_numeric NUMERIC," +
                          "field_timestamp TIMESTAMP" +
                          ")");
 }
コード例 #8
0
        public void PrependedRollbackWhileStartingNewTransaction()
        {
            var connString = new NpgsqlConnectionStringBuilder(ConnectionString) {
                CommandTimeout = 600,
                InternalCommandTimeout = 30
            };

            int backendId;
            using (var conn = new NpgsqlConnection(connString))
            {
                conn.Open();
                backendId = conn.Connector.BackendProcessId;
                conn.BeginTransaction();
                conn.ExecuteNonQuery("SELECT 1");
            }
            // Connector is back in the pool with a queued ROLLBACK
            using (var conn = new NpgsqlConnection(connString))
            {
                conn.Open();
                Assert.That(conn.Connector.BackendProcessId, Is.EqualTo(backendId));
                var tx = conn.BeginTransaction();
                // We've captured the transaction instance, a new begin transaction is now enqueued after the rollback
                conn.ExecuteNonQuery("SELECT 1");
                Assert.That(tx.Connection, Is.SameAs(conn));
                Assert.That(conn.Connector.Transaction, Is.SameAs(tx));
            }
        }