Skip to content

Commit 9ea10bc

Browse files
committed
Addition - Execute Transaction Async
1 parent 7d16e51 commit 9ea10bc

File tree

10 files changed

+799
-12
lines changed

10 files changed

+799
-12
lines changed

QueryDB.Core.Tests/MSSQLTests.cs

Lines changed: 136 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ public async Task Test_MSSQL_FetchDataAsync_Dictionary_SelectQuery_UpperCaseKeys
214214
public async Task Test_MSSQL_FetchDataAsync_Dictionary_SelectQuery_Joins()
215215
{
216216
var selectSql = Queries.MSSQLQueries.TestDB.SelectSql_Join;
217-
var data = await new DBContext(DB.MSSQL, MSSQLConnectionString).FetchDataAsync(selectSql);
217+
var data = await new DBContext(DB.MSSQL, MSSQLConnectionString).FetchDataAsync(selectSql);
218218
Assert.AreEqual(34, data.Count);
219219
var agent = data.FirstOrDefault(X => X.ReferenceData["Agent_Code"] == "A004" && X.ReferenceData["Cust_Code"] == "C00006");
220220
Assert.AreEqual("A004", agent.ReferenceData["Agent_Code"]);
@@ -250,7 +250,7 @@ public async Task Test_MSSQL_FetchDataAsync_Dictionary_SelectQuery_Joins_UpperCa
250250
public async Task Test_MSSQL_FetchDataAsync_Dictionary_SelectQuery_Aliases()
251251
{
252252
var selectSql = Queries.MSSQLQueries.TestDB.SelectSql_Alias;
253-
var data = await new DBContext(DB.MSSQL, MSSQLConnectionString).FetchDataAsync(selectSql);
253+
var data = await new DBContext(DB.MSSQL, MSSQLConnectionString).FetchDataAsync(selectSql);
254254
Assert.AreEqual(34, data.Count);
255255
var agent = data.FirstOrDefault(X => X.ReferenceData["Agent_Code"] == "A004" && X.ReferenceData["Cust_Code"] == "C00006");
256256
Assert.AreEqual("A004", agent.ReferenceData["Agent_Code"]);
@@ -716,7 +716,7 @@ public async Task Test_MSSQL_ExecuteScalarAsync_As_StringReturn_DefaultValue()
716716

717717
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
718718

719-
var result = await dbContext .ExecuteScalarAsync(noValueReturned);
719+
var result = await dbContext.ExecuteScalarAsync(noValueReturned);
720720
Assert.IsInstanceOfType<string>(result);
721721
Assert.AreEqual("", result);
722722

@@ -1572,6 +1572,139 @@ public void Test_MSSQL_ExecuteTransaction_DML_Unsupported_SELECT_Queries()
15721572

15731573
#endregion
15741574

1575+
#region Execute Transaction Async Tests - << Task<bool> ExecuteTransactionAsync(List<string> sqlStatements) >>
1576+
1577+
[TestMethod]
1578+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1579+
public async Task Test_MSSQL_ExecuteTransactionAsync_DDL_Multiple_Queries()
1580+
{
1581+
var createTableSql = Queries.MSSQLQueries.TestDB.DDL.Create_Table;
1582+
var alterTableSql = Queries.MSSQLQueries.TestDB.DDL.Alter_Table;
1583+
var truncateTableSql = Queries.MSSQLQueries.TestDB.DDL.Truncate_Table;
1584+
var renameTableSql = Queries.MSSQLQueries.TestDB.DDL.Rename_Table;
1585+
var dropTableSql = Queries.MSSQLQueries.TestDB.DDL.Drop_Table;
1586+
var dDLExecutionCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Execute_check;
1587+
1588+
// Create, Alter & Truncate
1589+
var statements = new List<string>
1590+
{
1591+
createTableSql,
1592+
alterTableSql,
1593+
truncateTableSql
1594+
};
1595+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1596+
var result = await dbContext.ExecuteTransactionAsync(statements);
1597+
Assert.IsTrue(result);
1598+
1599+
var tableCount = await dbContext
1600+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
1601+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
1602+
1603+
// Rename & Drop
1604+
statements = new List<string>
1605+
{
1606+
renameTableSql,
1607+
dropTableSql
1608+
};
1609+
result = await dbContext.ExecuteTransactionAsync(statements);
1610+
Assert.IsTrue(result);
1611+
1612+
tableCount = await dbContext
1613+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
1614+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
1615+
}
1616+
1617+
[TestMethod]
1618+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1619+
public async Task Test_MSSQL_ExecuteTransactionAsync_DML_Multiple_Queries()
1620+
{
1621+
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
1622+
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
1623+
var deleteSql = Queries.MSSQLQueries.TestDB.DML.DeleteSql;
1624+
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;
1625+
1626+
var statements = new List<string>
1627+
{
1628+
insertSql,
1629+
updateSql
1630+
};
1631+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1632+
1633+
// Insert & Update
1634+
var result = await dbContext.ExecuteTransactionAsync(statements);
1635+
Assert.IsTrue(result);
1636+
var data = await dbContext.FetchDataAsync(verifyDMLExecution);
1637+
Assert.AreEqual(1, data.Count);
1638+
var agent = data.FirstOrDefault();
1639+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
1640+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
1641+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
1642+
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
1643+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
1644+
Assert.AreEqual("", agent.ReferenceData["Country"]);
1645+
1646+
// Delete
1647+
statements = new List<string>
1648+
{
1649+
deleteSql
1650+
};
1651+
result = await dbContext.ExecuteTransactionAsync(statements);
1652+
Assert.IsTrue(result);
1653+
data = await dbContext.FetchDataAsync(verifyDMLExecution);
1654+
Assert.AreEqual(0, data.Count);
1655+
}
1656+
1657+
[TestMethod]
1658+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1659+
public async Task Test_MSSQL_ExecuteTransactionAsync_Incomplete_Transaction_Rollback_On_Error()
1660+
{
1661+
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
1662+
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
1663+
var updateErrorSql = "UPDATE";
1664+
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;
1665+
1666+
var statements = new List<string>
1667+
{
1668+
insertSql,
1669+
updateSql,
1670+
updateErrorSql
1671+
};
1672+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1673+
1674+
// Insert & Update
1675+
var result = await dbContext.ExecuteTransactionAsync(statements);
1676+
Assert.IsFalse(result);
1677+
var data = await dbContext.FetchDataAsync(verifyDMLExecution);
1678+
Assert.AreEqual(0, data.Count);
1679+
}
1680+
1681+
[TestMethod]
1682+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1683+
public async Task Test_MSSQL_ExecuteTransactionAsync_DML_Unsupported_SELECT_Queries()
1684+
{
1685+
var selectSql = Queries.MSSQLQueries.TestDB.DML.SelectSql;
1686+
1687+
// Select
1688+
try
1689+
{
1690+
var statements = new List<string>
1691+
{
1692+
selectSql
1693+
};
1694+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1695+
var result = await dbContext.ExecuteTransactionAsync(statements);
1696+
Assert.Fail("No Exception");
1697+
}
1698+
catch (QueryDBException ex)
1699+
{
1700+
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
1701+
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
1702+
Assert.AreEqual("'ExecuteTransaction' doesn't support SELECT queries.", ex.AdditionalInfo);
1703+
}
1704+
}
1705+
1706+
#endregion
1707+
15751708
#endregion
15761709

15771710
}

QueryDB.Core.Tests/MySQLTests.cs

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,6 +1513,139 @@ public void Test_MySQL_ExecuteTransaction_DML_Unsupported_SELECT_Queries()
15131513

15141514
#endregion
15151515

1516+
#region Execute Transaction Async Tests - << Task<bool> ExecuteTransactionAsync(List<string> sqlStatements) >>
1517+
1518+
[TestMethod]
1519+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1520+
public async Task Test_MySQL_ExecuteTransactionAsync_DDL_Multiple_Queries()
1521+
{
1522+
var createTableSql = Queries.MySQLQueries.TestDB.DDL.Create_Table;
1523+
var alterTableSql = Queries.MySQLQueries.TestDB.DDL.Alter_Table;
1524+
var truncateTableSql = Queries.MySQLQueries.TestDB.DDL.Truncate_Table;
1525+
var renameTableSql = Queries.MySQLQueries.TestDB.DDL.Rename_Table;
1526+
var dropTableSql = Queries.MySQLQueries.TestDB.DDL.Drop_Table;
1527+
var dDLExecutionCheckSql = Queries.MySQLQueries.TestDB.DDL.DDL_Execute_check;
1528+
1529+
// Create, Alter & Truncate
1530+
var statements = new List<string>
1531+
{
1532+
createTableSql,
1533+
alterTableSql,
1534+
truncateTableSql
1535+
};
1536+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1537+
var result = await dbContext.ExecuteTransactionAsync(statements);
1538+
Assert.IsTrue(result);
1539+
1540+
var tableCount = await dbContext
1541+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "mysql", "Employee"));
1542+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
1543+
1544+
// Rename & Drop
1545+
statements = new List<string>
1546+
{
1547+
renameTableSql,
1548+
dropTableSql
1549+
};
1550+
result = await dbContext.ExecuteTransactionAsync(statements);
1551+
Assert.IsTrue(result);
1552+
1553+
tableCount = await dbContext
1554+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "mysql", "Employees"));
1555+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
1556+
}
1557+
1558+
[TestMethod]
1559+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1560+
public async Task Test_MySQL_ExecuteTransactionAsync_DML_Multiple_Queries()
1561+
{
1562+
var insertSql = Queries.MySQLQueries.TestDB.DML.InsertSql;
1563+
var updateSql = Queries.MySQLQueries.TestDB.DML.UpdateSql;
1564+
var deleteSql = Queries.MySQLQueries.TestDB.DML.DeleteSql;
1565+
var verifyDMLExecution = Queries.MySQLQueries.TestDB.DML.VerifyDMLExecution;
1566+
1567+
var statements = new List<string>
1568+
{
1569+
insertSql,
1570+
updateSql
1571+
};
1572+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1573+
1574+
// Insert & Update
1575+
var result = await dbContext.ExecuteTransactionAsync(statements);
1576+
Assert.IsTrue(result);
1577+
var data = await dbContext.FetchDataAsync(verifyDMLExecution);
1578+
Assert.AreEqual(1, data.Count);
1579+
var agent = data.FirstOrDefault();
1580+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
1581+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
1582+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
1583+
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
1584+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
1585+
Assert.AreEqual("", agent.ReferenceData["Country"]);
1586+
1587+
// Delete
1588+
statements = new List<string>
1589+
{
1590+
deleteSql
1591+
};
1592+
result = await dbContext.ExecuteTransactionAsync(statements);
1593+
Assert.IsTrue(result);
1594+
data = await dbContext.FetchDataAsync(verifyDMLExecution);
1595+
Assert.AreEqual(0, data.Count);
1596+
}
1597+
1598+
[TestMethod]
1599+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1600+
public async Task Test_MySQL_ExecuteTransactionAsync_Incomplete_Transaction_Rollback_On_Error()
1601+
{
1602+
var insertSql = Queries.MySQLQueries.TestDB.DML.InsertSql;
1603+
var updateSql = Queries.MySQLQueries.TestDB.DML.UpdateSql;
1604+
var updateErrorSql = "UPDATE";
1605+
var verifyDMLExecution = Queries.MySQLQueries.TestDB.DML.VerifyDMLExecution;
1606+
1607+
var statements = new List<string>
1608+
{
1609+
insertSql,
1610+
updateSql,
1611+
updateErrorSql
1612+
};
1613+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1614+
1615+
// Insert & Update
1616+
var result = await dbContext.ExecuteTransactionAsync(statements);
1617+
Assert.IsFalse(result);
1618+
var data = await dbContext.FetchDataAsync(verifyDMLExecution);
1619+
Assert.AreEqual(0, data.Count);
1620+
}
1621+
1622+
[TestMethod]
1623+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1624+
public async Task Test_MySQL_ExecuteTransactionAsync_DML_Unsupported_SELECT_Queries()
1625+
{
1626+
var selectSql = Queries.MySQLQueries.TestDB.DML.SelectSql;
1627+
1628+
// Select
1629+
try
1630+
{
1631+
var statements = new List<string>
1632+
{
1633+
selectSql
1634+
};
1635+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1636+
var result = await dbContext.ExecuteTransactionAsync(statements);
1637+
Assert.Fail("No Exception");
1638+
}
1639+
catch (QueryDBException ex)
1640+
{
1641+
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
1642+
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
1643+
Assert.AreEqual("'ExecuteTransaction' doesn't support SELECT queries.", ex.AdditionalInfo);
1644+
}
1645+
}
1646+
1647+
#endregion
1648+
15161649
#endregion
15171650

15181651
}

0 commit comments

Comments
 (0)