@@ -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 ]
0 commit comments