Skip to content

Commit e59a1be

Browse files
committed
Addition - Execute Command Async
1 parent 9c2dc74 commit e59a1be

File tree

10 files changed

+802
-22
lines changed

10 files changed

+802
-22
lines changed

QueryDB.Core.Tests/MSSQLTests.cs

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,180 @@ public void Test_MSSQL_ExecuteCommand_DCL_Queries()
12651265

12661266
#endregion
12671267

1268+
#region Execute Command Async Tests - << Task<int> ExecuteCommandAsync(string sqlStatement) >>
1269+
1270+
[TestMethod]
1271+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1272+
public async Task Test_MSSQL_ExecuteCommandAsync_DDL_Queries()
1273+
{
1274+
var createTableSql = Queries.MSSQLQueries.TestDB.DDL.Create_Table;
1275+
var alterTableSql = Queries.MSSQLQueries.TestDB.DDL.Alter_Table;
1276+
var commentTableSql = Queries.MSSQLQueries.TestDB.DDL.Comment_Table;
1277+
var commentTableColumnSql = Queries.MSSQLQueries.TestDB.DDL.Comment_Table_Column;
1278+
var truncateTableSql = Queries.MSSQLQueries.TestDB.DDL.Truncate_Table;
1279+
var renameTableSql = Queries.MSSQLQueries.TestDB.DDL.Rename_Table;
1280+
var dropTableSql = Queries.MSSQLQueries.TestDB.DDL.Drop_Table;
1281+
var dDLExecutionCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Execute_check;
1282+
var dDLTableCommentCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Table_Comment_check;
1283+
var dDLTableColumnCommentCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Table_Column_Comment_check;
1284+
1285+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1286+
await dbContext.ExecuteCommandAsync(createTableSql);
1287+
await dbContext.ExecuteCommandAsync(alterTableSql);
1288+
await dbContext.ExecuteCommandAsync(commentTableSql);
1289+
await dbContext.ExecuteCommandAsync(commentTableColumnSql);
1290+
await dbContext.ExecuteCommandAsync(truncateTableSql);
1291+
1292+
var tableCount = await dbContext
1293+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
1294+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
1295+
var tableComment = await dbContext
1296+
.FetchDataAsync(string.Format(dDLTableCommentCheckSql, "dbo", "Employee"));
1297+
Assert.AreEqual("This table stores employee records", tableComment[0].ReferenceData["Table_Comment"]);
1298+
var tableColumnComment = await dbContext
1299+
.FetchDataAsync(string.Format(dDLTableColumnCommentCheckSql, "dbo", "Employee"));
1300+
Assert.AreEqual("This column stores employee middle name", tableColumnComment[0].ReferenceData["Table_Column_Comment"]);
1301+
1302+
await dbContext.ExecuteCommandAsync(renameTableSql);
1303+
1304+
tableCount = await dbContext
1305+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
1306+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
1307+
tableCount = await dbContext
1308+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
1309+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
1310+
1311+
await dbContext.ExecuteCommandAsync(dropTableSql);
1312+
1313+
tableCount = await dbContext
1314+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
1315+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
1316+
}
1317+
1318+
[TestMethod]
1319+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1320+
public async Task Test_MSSQL_ExecuteCommandAsync_DML_Queries()
1321+
{
1322+
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
1323+
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
1324+
var deleteSql = Queries.MSSQLQueries.TestDB.DML.DeleteSql;
1325+
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;
1326+
1327+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1328+
1329+
// Insert
1330+
var rows = await dbContext.ExecuteCommandAsync(insertSql);
1331+
Assert.AreEqual(1, rows);
1332+
var data = await dbContext.FetchDataAsync(verifyDMLExecution);
1333+
Assert.AreEqual(1, data.Count);
1334+
var agent = data.FirstOrDefault();
1335+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
1336+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
1337+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
1338+
Assert.AreEqual("0.11", agent.ReferenceData["Commission"]);
1339+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
1340+
Assert.AreEqual("", agent.ReferenceData["Country"]);
1341+
1342+
// Update
1343+
rows = await dbContext.ExecuteCommandAsync(updateSql);
1344+
Assert.AreEqual(1, rows);
1345+
data = await dbContext.FetchDataAsync(verifyDMLExecution);
1346+
Assert.AreEqual(1, data.Count);
1347+
agent = data.FirstOrDefault();
1348+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
1349+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
1350+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
1351+
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
1352+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
1353+
Assert.AreEqual("", agent.ReferenceData["Country"]);
1354+
1355+
// Delete
1356+
rows = await dbContext.ExecuteCommandAsync(deleteSql);
1357+
Assert.AreEqual(1, rows);
1358+
data = await dbContext.FetchDataAsync(verifyDMLExecution);
1359+
Assert.AreEqual(0, data.Count);
1360+
}
1361+
1362+
[TestMethod]
1363+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1364+
public async Task Test_MSSQL_ExecuteCommandAsync_DML_Unsupported_SELECT_Queries()
1365+
{
1366+
var selectSql = Queries.MSSQLQueries.TestDB.DML.SelectSql;
1367+
1368+
// Select
1369+
try
1370+
{
1371+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1372+
var rows = await dbContext.ExecuteCommandAsync(selectSql);
1373+
Assert.Fail("No Exception");
1374+
}
1375+
catch (QueryDBException ex)
1376+
{
1377+
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
1378+
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
1379+
Assert.AreEqual("'ExecuteCommand' doesn't support SELECT queries.", ex.AdditionalInfo);
1380+
}
1381+
}
1382+
1383+
[TestMethod]
1384+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
1385+
public async Task Test_MSSQL_ExecuteCommandAsync_DCL_Queries()
1386+
{
1387+
var login = "test_user";
1388+
var user = "test_user";
1389+
var password = "Test@1234";
1390+
var table = "agents";
1391+
var commands = "SELECT, UPDATE";
1392+
var checkCommand = "SELECT";
1393+
1394+
var createLogin = string.Format(Queries.MSSQLQueries.TestDB.DCL.CreateLoginSql_Login_Password, login, password);
1395+
var createUser = string.Format(Queries.MSSQLQueries.TestDB.DCL.CreateUserSql_User_Login, user, login);
1396+
var grantSql = string.Format(Queries.MSSQLQueries.TestDB.DCL.GrantSql_Command_Table_User, commands, table, user);
1397+
var revokeSql = string.Format(Queries.MSSQLQueries.TestDB.DCL.RevokeSql_Command_Table_User, commands, table, user);
1398+
var verifyPermissions = string.Format(Queries.MSSQLQueries.TestDB.DCL.VerifyPermission_User_Table_Command, user, table, checkCommand);
1399+
var removeUser = string.Format(Queries.MSSQLQueries.TestDB.DCL.RemoveUserSql_User, user);
1400+
var removeLogin = string.Format(Queries.MSSQLQueries.TestDB.DCL.RemoveLoginSql_Login, login);
1401+
1402+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
1403+
1404+
// Create Login
1405+
var result = await dbContext.ExecuteCommandAsync(createLogin);
1406+
Assert.AreEqual(-1, result);
1407+
1408+
// Create User
1409+
result = await dbContext.ExecuteCommandAsync(createUser);
1410+
Assert.AreEqual(-1, result);
1411+
1412+
// Existing Permissions
1413+
var data = await dbContext.FetchDataAsync(verifyPermissions);
1414+
var dataRow = data.FirstOrDefault();
1415+
Assert.AreEqual("0", dataRow.ReferenceData["HasPermission"]);
1416+
1417+
// Grant
1418+
result = await dbContext.ExecuteCommandAsync(grantSql);
1419+
Assert.AreEqual(-1, result);
1420+
data = await dbContext.FetchDataAsync(verifyPermissions);
1421+
dataRow = data.FirstOrDefault();
1422+
Assert.AreEqual("1", dataRow.ReferenceData["HasPermission"]);
1423+
1424+
// Revoke
1425+
result = await dbContext.ExecuteCommandAsync(revokeSql);
1426+
Assert.AreEqual(-1, result);
1427+
data = await dbContext.FetchDataAsync(verifyPermissions);
1428+
dataRow = data.FirstOrDefault();
1429+
Assert.AreEqual("0", dataRow.ReferenceData["HasPermission"]);
1430+
1431+
// Remove User
1432+
result = await dbContext.ExecuteCommandAsync(removeUser);
1433+
Assert.AreEqual(-1, result);
1434+
1435+
// Remove Login
1436+
result = await dbContext.ExecuteCommandAsync(removeLogin);
1437+
Assert.AreEqual(-1, result);
1438+
}
1439+
1440+
#endregion
1441+
12681442
#region Execute Transaction Tests - << bool ExecuteTransaction(List<string> sqlStatements) >>
12691443

12701444
[TestMethod]

QueryDB.Core.Tests/MySQLTests.cs

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,6 +1217,169 @@ public void Test_MySQL_ExecuteCommand_DCL_Queries()
12171217

12181218
#endregion
12191219

1220+
#region Execute Command Async Tests - << Task<int> ExecuteCommandAsync(string sqlStatement) >>
1221+
1222+
[TestMethod]
1223+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1224+
public async Task Test_MySQL_ExecuteCommandAsync_DDL_Queries()
1225+
{
1226+
var createTableSql = Queries.MySQLQueries.TestDB.DDL.Create_Table;
1227+
var alterTableSql = Queries.MySQLQueries.TestDB.DDL.Alter_Table;
1228+
var commentTableSql = Queries.MySQLQueries.TestDB.DDL.Comment_Table;
1229+
var commentTableColumnSql = Queries.MySQLQueries.TestDB.DDL.Comment_Table_Column;
1230+
var truncateTableSql = Queries.MySQLQueries.TestDB.DDL.Truncate_Table;
1231+
var renameTableSql = Queries.MySQLQueries.TestDB.DDL.Rename_Table;
1232+
var dropTableSql = Queries.MySQLQueries.TestDB.DDL.Drop_Table;
1233+
var dDLExecutionCheckSql = Queries.MySQLQueries.TestDB.DDL.DDL_Execute_check;
1234+
var dDLTableCommentCheckSql = Queries.MySQLQueries.TestDB.DDL.DDL_Table_Comment_check;
1235+
var dDLTableColumnCommentCheckSql = Queries.MySQLQueries.TestDB.DDL.DDL_Table_Column_Comment_check;
1236+
1237+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1238+
await dbContext.ExecuteCommandAsync(createTableSql);
1239+
await dbContext.ExecuteCommandAsync(alterTableSql);
1240+
await dbContext.ExecuteCommandAsync(commentTableSql);
1241+
await dbContext.ExecuteCommandAsync(commentTableColumnSql);
1242+
await dbContext.ExecuteCommandAsync(truncateTableSql);
1243+
1244+
var tableCount = await dbContext
1245+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "mysql", "Employee"));
1246+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
1247+
var tableComment = await dbContext
1248+
.FetchDataAsync(string.Format(dDLTableCommentCheckSql, "mysql", "Employee"));
1249+
Assert.AreEqual("This table stores employee records", tableComment[0].ReferenceData["Table_Comment"]);
1250+
var tableColumnComment = await dbContext
1251+
.FetchDataAsync(string.Format(dDLTableColumnCommentCheckSql, "mysql", "Employee"));
1252+
Assert.AreEqual("This column stores employee middle name", tableColumnComment[3].ReferenceData["Table_Column_Comment"]);
1253+
1254+
await dbContext.ExecuteCommandAsync(renameTableSql);
1255+
1256+
tableCount = await dbContext
1257+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "mysql", "Employee"));
1258+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
1259+
tableCount = await dbContext
1260+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "mysql", "Employees"));
1261+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
1262+
1263+
await dbContext.ExecuteCommandAsync(dropTableSql);
1264+
1265+
tableCount = await dbContext
1266+
.FetchDataAsync(string.Format(dDLExecutionCheckSql, "mysql", "Employees"));
1267+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
1268+
}
1269+
1270+
[TestMethod]
1271+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1272+
public async Task Test_MySQL_ExecuteCommandAsync_DML_Queries()
1273+
{
1274+
var insertSql = Queries.MySQLQueries.TestDB.DML.InsertSql;
1275+
var updateSql = Queries.MySQLQueries.TestDB.DML.UpdateSql;
1276+
var deleteSql = Queries.MySQLQueries.TestDB.DML.DeleteSql;
1277+
var verifyDMLExecution = Queries.MySQLQueries.TestDB.DML.VerifyDMLExecution;
1278+
1279+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1280+
1281+
// Insert
1282+
var rows = await dbContext.ExecuteCommandAsync(insertSql);
1283+
Assert.AreEqual(1, rows);
1284+
var data = await dbContext.FetchDataAsync(verifyDMLExecution);
1285+
Assert.AreEqual(1, data.Count);
1286+
var agent = data.FirstOrDefault();
1287+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
1288+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
1289+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
1290+
Assert.AreEqual("0.11", agent.ReferenceData["Commission"]);
1291+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
1292+
Assert.AreEqual("", agent.ReferenceData["Country"]);
1293+
1294+
// Update
1295+
rows = await dbContext.ExecuteCommandAsync(updateSql);
1296+
Assert.AreEqual(1, rows);
1297+
data = await dbContext.FetchDataAsync(verifyDMLExecution);
1298+
Assert.AreEqual(1, data.Count);
1299+
agent = data.FirstOrDefault();
1300+
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
1301+
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
1302+
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
1303+
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
1304+
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
1305+
Assert.AreEqual("", agent.ReferenceData["Country"]);
1306+
1307+
// Delete
1308+
rows = await dbContext.ExecuteCommandAsync(deleteSql);
1309+
Assert.AreEqual(1, rows);
1310+
data = await dbContext.FetchDataAsync(verifyDMLExecution);
1311+
Assert.AreEqual(0, data.Count);
1312+
}
1313+
1314+
[TestMethod]
1315+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1316+
public async Task Test_MySQL_ExecuteCommandAsync_DML_Unsupported_SELECT_Queries()
1317+
{
1318+
var selectSql = Queries.MySQLQueries.TestDB.DML.SelectSql;
1319+
1320+
// Select
1321+
try
1322+
{
1323+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1324+
var rows = await dbContext.ExecuteCommandAsync(selectSql);
1325+
Assert.Fail("No Exception");
1326+
}
1327+
catch (QueryDBException ex)
1328+
{
1329+
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
1330+
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
1331+
Assert.AreEqual("'ExecuteCommand' doesn't support SELECT queries.", ex.AdditionalInfo);
1332+
}
1333+
}
1334+
1335+
[TestMethod]
1336+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
1337+
public async Task Test_MySQL_ExecuteCommandAsync_DCL_Queries()
1338+
{
1339+
var user = "test_user";
1340+
var password = "Test@1234";
1341+
var table = "Agents";
1342+
var commands = "SELECT, UPDATE";
1343+
var checkCommand = "SELECT";
1344+
1345+
var createUser = string.Format(Queries.MySQLQueries.TestDB.DCL.CreateUserSql_User_Password, user, password);
1346+
var grantSql = string.Format(Queries.MySQLQueries.TestDB.DCL.GrantSql_Command_Table_User, commands, table, user);
1347+
var revokeSql = string.Format(Queries.MySQLQueries.TestDB.DCL.RevokeSql_Command_Table_User, commands, table, user);
1348+
var verifyPermissions = string.Format(Queries.MySQLQueries.TestDB.DCL.VerifyPermission_User, user);
1349+
var removeUser = string.Format(Queries.MySQLQueries.TestDB.DCL.RemoveUserSql_User, user);
1350+
1351+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
1352+
1353+
// Create User
1354+
var result = await dbContext.ExecuteCommandAsync(createUser);
1355+
Assert.AreEqual(0, result);
1356+
1357+
// Existing Permissions
1358+
var data = await dbContext.FetchDataAsync(verifyPermissions);
1359+
Assert.AreEqual(1, data.Count);
1360+
Assert.IsFalse(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
1361+
1362+
// Grant
1363+
result = await dbContext.ExecuteCommandAsync(grantSql);
1364+
Assert.AreEqual(0, result);
1365+
data = await dbContext.FetchDataAsync(verifyPermissions);
1366+
Assert.AreEqual(2, data.Count);
1367+
Assert.IsTrue(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
1368+
1369+
// Revoke
1370+
result = await dbContext.ExecuteCommandAsync(revokeSql);
1371+
Assert.AreEqual(0, result);
1372+
data = await dbContext.FetchDataAsync(verifyPermissions);
1373+
Assert.AreEqual(1, data.Count);
1374+
Assert.IsFalse(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
1375+
1376+
//Remove User
1377+
result = await dbContext.ExecuteCommandAsync(removeUser);
1378+
Assert.AreEqual(0, result);
1379+
}
1380+
1381+
#endregion
1382+
12201383
#region Execute Transaction Tests - << bool ExecuteTransaction(List<string> sqlStatements) >>
12211384

12221385
[TestMethod]

0 commit comments

Comments
 (0)