public void TestRollback() { InsertValueInNewDb(false); var adapter = new MySQLCommandChannelFactory().Open(Credentials); Assert.AreEqual((long)0, adapter.FetchValue("SELECT COUNT(*) FROM test")); }
public void TestCommit() { InsertValueInNewDb(true); var adapter = new MySQLCommandChannelFactory().Open(Credentials); Assert.AreEqual("committed", adapter.FetchValue("SELECT reference FROM test LIMIT 1")); }
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); }
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); }); }
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)); }
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); }
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); }