Exemple #1
0
        public void TestRollback()
        {
            InsertValueInNewDb(false);

            var adapter = new MySQLCommandChannelFactory().Open(Credentials);

            Assert.AreEqual((long)0, adapter.FetchValue("SELECT COUNT(*) FROM test"));
        }
Exemple #2
0
        public void TestCommit()
        {
            InsertValueInNewDb(true);

            var adapter = new MySQLCommandChannelFactory().Open(Credentials);

            Assert.AreEqual("committed", adapter.FetchValue("SELECT reference FROM test LIMIT 1"));
        }
Exemple #3
0
        public void TestSuccessiveConnections()
        {
            var adapter = new MySQLCommandChannelFactory().Create(new CreationParameters <MySqlConnectionStringBuilder>(Credentials, "CREATE TABLE a (b TEXT)", true));

            adapter.Execute("INSERT INTO a VALUES ('c')");
            adapter = new MySQLCommandChannelFactory().Create(new CreationParameters <MySqlConnectionStringBuilder>(Credentials, "CREATE TABLE a (b TEXT)", true));
            Assert.AreEqual(0, adapter.FetchLines("SELECT * FROM a").Count);
        }
Exemple #4
0
        private void InsertValueInNewDb(bool commit)
        {
            var adapter = new MySQLCommandChannelFactory().Create(new CreationParameters <MySqlConnectionStringBuilder>(Credentials, Resources.TestCommitRollback, true));

            adapter.ExecuteInTransaction(scope =>
            {
                scope.Execute("INSERT INTO test (reference) VALUES (@value)", new Dictionary <string, IConvertible> {
                    { "@value", "committed" }
                });
                return(commit ? TransactionResult.Commit : TransactionResult.Rollback);
            });
        }
Exemple #5
0
        public void TestNestedTransactions()
        {
            var adapter = new MySQLCommandChannelFactory().Create(new CreationParameters <MySqlConnectionStringBuilder>(Credentials, Resources.TestCommitRollback, true));
            var table   = new Table("test", "reference");

            DoSomethingInsertAndCommit(adapter, table, "B",
                                       () => DoSomethingInsertAndRollback(adapter, table, "C",
                                                                          () => InsertDoSomethingAndCommit(adapter, table, "D",
                                                                                                           () => InsertDoSomethingAndRollback(adapter, table, "E", () => { })
                                                                                                           )
                                                                          )
                                       );

            Assert.AreEqual(1, GetCount(table, adapter));
        }
Exemple #6
0
        public void TestLastInsertedId()
        {
            var adapter = new MySQLCommandChannelFactory().Create(new CreationParameters <MySqlConnectionStringBuilder>(Credentials,
                                                                                                                        "CREATE TABLE example(colA INT PRIMARY KEY AUTO_INCREMENT, colB TEXT)", true));

            var notInserted = adapter.LastInsertedId;

            Assert.AreEqual((long)0, notInserted);

            var id = _table.Insert().Values(null, "b").ExecuteOnAndReturnRowId(adapter);

            var lastInserted = adapter.LastInsertedId;

            Assert.AreEqual(id, lastInserted);
        }
Exemple #7
0
        public void TestMultithreading()
        {
            var mainAdapter = new MySQLCommandChannelFactory().Create(new CreationParameters <MySqlConnectionStringBuilder>(Credentials, "CREATE TABLE a (b TEXT)", true));

            var t1 = new Thread(() =>
            {
                var adapter = new MySQLCommandChannelFactory().Open(Credentials);
                foreach (var _ in Enumerable.Repeat(0, 50))
                {
                    adapter.Execute("INSERT INTO a VALUES ('c')");
                }
            });

            var t2 = new Thread(() =>
            {
                var adapter = new MySQLCommandChannelFactory().Open(Credentials);
                foreach (var _ in Enumerable.Repeat(0, 50))
                {
                    adapter.Execute("INSERT INTO a VALUES ('c')");
                }
            });

            var t3 = new Thread(() =>
            {
                var adapter = new MySQLCommandChannelFactory().Open(Credentials);
                foreach (var _ in Enumerable.Repeat(0, 50))
                {
                    adapter.Execute("INSERT INTO a VALUES ('c')");
                }
            });

            t1.Start();
            t2.Start();
            t3.Start();

            t1.Join();
            t2.Join();
            t3.Join();

            Assert.AreEqual(150, mainAdapter.FetchLines("SELECT * FROM a").Count);
        }