Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
ceab01b
Addition - Execute DDLs
abhinavminhas Nov 9, 2024
643739b
Fix Oracle query
abhinavminhas Nov 9, 2024
e274099
Fix Oracle query
abhinavminhas Nov 9, 2024
a4e87b0
MySQL, Oracle, PostgreSQL - Create Comments
abhinavminhas Nov 14, 2024
33b166d
Fix Oracle query
abhinavminhas Nov 14, 2024
2e1d5d3
MSSQL - Create Comments
abhinavminhas Nov 14, 2024
42f2ffc
Update: Execute DDL -> Execute Command
abhinavminhas Dec 29, 2024
550b5f0
Updates: Execute Command DML rows afffected
abhinavminhas Dec 29, 2024
dea3902
Merge branch 'dev' of https://github.com/abhinavminhas/QueryDB.NET in…
abhinavminhas Jan 1, 2025
69136e8
Tests - Execute Command DML execution verifiction
abhinavminhas Jan 2, 2025
29d0cf6
Docker yml - Seed data path update
abhinavminhas Feb 2, 2025
e33523a
QueryDBException - Represents exceptions specific to QueryDB operations
abhinavminhas Feb 2, 2025
4e529ab
ExecuteCommand - Unsupported SELECT command
abhinavminhas Feb 2, 2025
b9bf0d9
Documentation updates
abhinavminhas Feb 2, 2025
97503eb
Documentation updates
abhinavminhas Feb 2, 2025
b7ba1db
Assertion argument correction
abhinavminhas Feb 2, 2025
628cebd
Code Quality Update - Change visibility to readonly
abhinavminhas Feb 2, 2025
d4a7aa9
Tests - Execute Command DCL execution verifiction (MSSQL/MySQL/Postgr…
abhinavminhas Feb 2, 2025
586826c
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
e108ab4
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
e9f1e93
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
10b7131
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
421c6cc
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
0edb949
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
9f3fbf0
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
9257594
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
c4b3d8f
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
f6ed000
(Oracle) connection string update
abhinavminhas Feb 2, 2025
584d363
(Oracle) connection string update
abhinavminhas Feb 2, 2025
5faaf2b
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
c9c890a
Tests - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
0bd2ddf
Disable Test - Execute Command DCL execution verifiction (Oracle)
abhinavminhas Feb 2, 2025
1130296
Addition - Execute Transaction
abhinavminhas Feb 8, 2025
8190055
Execute Command Oracle, open connection
abhinavminhas Feb 8, 2025
765ea3f
Codecov - Report main, dev branch
abhinavminhas Feb 9, 2025
10c0bec
Tests - Execute Transaction (MSSQL/MySQL/PostgreSQL)
abhinavminhas Feb 9, 2025
74433f8
Tests - Execute Transaction (Oracle)
abhinavminhas Feb 9, 2025
b954f77
Remove connection state check
abhinavminhas Feb 9, 2025
601a09b
Tests - Query DB Exception
abhinavminhas Feb 9, 2025
96c43ca
Tests - Unknow DB
abhinavminhas Feb 9, 2025
1a0e5c6
Code Quality - Remove or correct this assertion
abhinavminhas Feb 9, 2025
1b5f355
Code Quality - Methods and properties that don't access instance data…
abhinavminhas Feb 9, 2025
b7fe6ec
Code Quality - Methods and properties that don't access instance data…
abhinavminhas Feb 9, 2025
527a31b
Code Quality - Simplified loop using the Where LINQ method
abhinavminhas Feb 9, 2025
c195fc0
Code Quality - Simplified loop using the Any LINQ method
abhinavminhas Feb 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion QueryDB.Core.Tests/Docker/docker-compose-mssql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ services:
ports:
- "1433:1433"
volumes:
- ./QueryDB.Core.Tests/SeedData:/home
- ../SeedData:/home
healthcheck:
test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $$SA_PASSWORD -Q \"SELECT 'mssql' AS current_database;\""]
interval: 5s
Expand Down
2 changes: 1 addition & 1 deletion QueryDB.Core.Tests/Docker/docker-compose-mysql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ services:
ports:
- "3306:3306"
volumes:
- ./QueryDB.Core.Tests/SeedData:/home
- ../SeedData:/home
healthcheck:
test: ["CMD-SHELL", "mysql -uroot -p$$MYSQL_ROOT_PASSWORD -e 'SELECT DATABASE() AS current_database;'"]
interval: 5s
Expand Down
2 changes: 1 addition & 1 deletion QueryDB.Core.Tests/Docker/docker-compose-oracle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ services:
ports:
- "1521:1521"
volumes:
- ./QueryDB.Core.Tests/SeedData:/home
- ../SeedData:/home
shm_size: 4gb
healthcheck:
test: ["CMD-SHELL", "echo \"SELECT 'oracle' AS current_database FROM dual;\" | sqlplus -s sys/$$ORACLE_PWD@localhost:1521/XE as sysdba"]
Expand Down
2 changes: 1 addition & 1 deletion QueryDB.Core.Tests/Docker/docker-compose-postgres.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ services:
ports:
- "5432:5432"
volumes:
- ./QueryDB.Core.Tests/SeedData:/home
- ../SeedData:/home
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sys"]
interval: 5s
Expand Down
306 changes: 306 additions & 0 deletions QueryDB.Core.Tests/MSSQLTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using QueryDB.Exceptions;
using System;
using System.Collections.Generic;
using System.Linq;

namespace QueryDB.Core.Tests
Expand Down Expand Up @@ -308,6 +310,310 @@ public void Test_MSSQL_FetchData_Entity_Strict_Error_Check()

#endregion

#region Execute Command Tests - << int ExecuteCommand(string sqlStatement) >>

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteCommand_DDL_Queries()
{
var createTableSql = Queries.MSSQLQueries.TestDB.DDL.Create_Table;
var alterTableSql = Queries.MSSQLQueries.TestDB.DDL.Alter_Table;
var commentTableSql = Queries.MSSQLQueries.TestDB.DDL.Comment_Table;
var commentTableColumnSql = Queries.MSSQLQueries.TestDB.DDL.Comment_Table_Column;
var truncateTableSql = Queries.MSSQLQueries.TestDB.DDL.Truncate_Table;
var renameTableSql = Queries.MSSQLQueries.TestDB.DDL.Rename_Table;
var dropTableSql = Queries.MSSQLQueries.TestDB.DDL.Drop_Table;
var dDLExecutionCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Execute_check;
var dDLTableCommentCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Table_Comment_check;
var dDLTableColumnCommentCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Table_Column_Comment_check;

var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
dbContext.ExecuteCommand(createTableSql);
dbContext.ExecuteCommand(alterTableSql);
dbContext.ExecuteCommand(commentTableSql);
dbContext.ExecuteCommand(commentTableColumnSql);
dbContext.ExecuteCommand(truncateTableSql);

var tableCount = dbContext
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
var tableComment = dbContext
.FetchData(string.Format(dDLTableCommentCheckSql, "dbo", "Employee"));
Assert.AreEqual("This table stores employee records", tableComment[0].ReferenceData["Table_Comment"]);
var tableColumnComment = dbContext
.FetchData(string.Format(dDLTableColumnCommentCheckSql, "dbo", "Employee"));
Assert.AreEqual("This column stores employee middle name", tableColumnComment[0].ReferenceData["Table_Column_Comment"]);

dbContext.ExecuteCommand(renameTableSql);

tableCount = dbContext
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
tableCount = dbContext
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);

dbContext.ExecuteCommand(dropTableSql);

tableCount = dbContext
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
}

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteCommand_DML_Queries()
{
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
var deleteSql = Queries.MSSQLQueries.TestDB.DML.DeleteSql;
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;

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

// Insert
var rows = dbContext.ExecuteCommand(insertSql);
Assert.AreEqual(1, rows);
var data = dbContext.FetchData(verifyDMLExecution);
Assert.IsTrue(data.Count == 1);
var agent = data.FirstOrDefault();
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
Assert.AreEqual("0.11", agent.ReferenceData["Commission"]);
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
Assert.AreEqual("", agent.ReferenceData["Country"]);

// Update
rows = dbContext.ExecuteCommand(updateSql);
Assert.AreEqual(1, rows);
data = dbContext.FetchData(verifyDMLExecution);
Assert.IsTrue(data.Count == 1);
agent = data.FirstOrDefault();
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
Assert.AreEqual("", agent.ReferenceData["Country"]);

// Delete
rows = dbContext.ExecuteCommand(deleteSql);
Assert.AreEqual(1, rows);
data = dbContext.FetchData(verifyDMLExecution);
Assert.IsTrue(data.Count == 0);
}

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteCommand_DML_Unsupported_SELECT_Queries()
{
var selectSql = Queries.MSSQLQueries.TestDB.DML.SelectSql;

// Select
try
{
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
var rows = dbContext.ExecuteCommand(selectSql);
Assert.Fail("No Exception");
}
catch (QueryDBException ex)
{
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
Assert.AreEqual("'ExecuteCommand' doesn't support SELECT queries.", ex.AdditionalInfo);
}
}

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteCommand_DCL_Queries()
{
var login = "test_user";
var user = "test_user";
var password = "Test@1234";
var table = "agents";
var commands = "SELECT, UPDATE";
var checkCommand = "SELECT";

var createLogin = string.Format(Queries.MSSQLQueries.TestDB.DCL.CreateLoginSql_Login_Password, login, password);
var createUser = string.Format(Queries.MSSQLQueries.TestDB.DCL.CreateUserSql_User_Login, user, login);
var grantSql = string.Format(Queries.MSSQLQueries.TestDB.DCL.GrantSql_Command_Table_User, commands, table, user);
var revokeSql = string.Format(Queries.MSSQLQueries.TestDB.DCL.RevokeSql_Command_Table_User, commands, table, user);
var verifyPermissions = string.Format(Queries.MSSQLQueries.TestDB.DCL.VerifyPermission_User_Table_Command, user, table, checkCommand);
var removeUser = string.Format(Queries.MSSQLQueries.TestDB.DCL.RemoveUserSql_User, user);
var removeLogin = string.Format(Queries.MSSQLQueries.TestDB.DCL.RemoveLoginSql_Login, login);

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

// Create Login
var result = dbContext.ExecuteCommand(createLogin);
Assert.AreEqual(-1, result);

// Create User
result = dbContext.ExecuteCommand(createUser);
Assert.AreEqual(-1, result);

// Existing Permissions
var data = dbContext.FetchData(verifyPermissions).FirstOrDefault();
Assert.AreEqual("0", data.ReferenceData["HasPermission"]);

// Grant
result = dbContext.ExecuteCommand(grantSql);
Assert.AreEqual(-1, result);
data = dbContext.FetchData(verifyPermissions).FirstOrDefault();
Assert.AreEqual("1", data.ReferenceData["HasPermission"]);

// Revoke
result = dbContext.ExecuteCommand(revokeSql);
Assert.AreEqual(-1, result);
data = dbContext.FetchData(verifyPermissions).FirstOrDefault();
Assert.AreEqual("0", data.ReferenceData["HasPermission"]);

// Remove User
result = dbContext.ExecuteCommand(removeUser);
Assert.AreEqual(-1, result);

// Remove Login
result = dbContext.ExecuteCommand(removeLogin);
Assert.AreEqual(-1, result);
}

#endregion

#region Execute Transaction Tests - << bool ExecuteTransaction(List<string> sqlStatements) >>

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteTransaction_DDL_Multiple_Queries()
{
var createTableSql = Queries.MSSQLQueries.TestDB.DDL.Create_Table;
var alterTableSql = Queries.MSSQLQueries.TestDB.DDL.Alter_Table;
var truncateTableSql = Queries.MSSQLQueries.TestDB.DDL.Truncate_Table;
var renameTableSql = Queries.MSSQLQueries.TestDB.DDL.Rename_Table;
var dropTableSql = Queries.MSSQLQueries.TestDB.DDL.Drop_Table;
var dDLExecutionCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Execute_check;

// Create, Alter & Truncate
var statements = new List<string>
{
createTableSql,
alterTableSql,
truncateTableSql
};
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
var result = dbContext.ExecuteTransaction(statements);
Assert.IsTrue(result);

var tableCount = dbContext
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);

// Rename & Drop
statements = new List<string>
{
renameTableSql,
dropTableSql
};
result = dbContext.ExecuteTransaction(statements);
Assert.IsTrue(result);

tableCount = dbContext
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
}

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteTransaction_DML_Multiple_Queries()
{
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
var deleteSql = Queries.MSSQLQueries.TestDB.DML.DeleteSql;
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;

var statements = new List<string>
{
insertSql,
updateSql
};
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);

// Insert & Update
var result = dbContext.ExecuteTransaction(statements);
Assert.IsTrue(result);
var data = dbContext.FetchData(verifyDMLExecution);
Assert.IsTrue(data.Count == 1);
var agent = data.FirstOrDefault();
Assert.AreEqual("A020", agent.ReferenceData["Agent_Code"]);
Assert.AreEqual("John", agent.ReferenceData["Agent_Name"]);
Assert.AreEqual("Wick", agent.ReferenceData["Working_Area"]);
Assert.AreEqual("0.15", agent.ReferenceData["Commission"]);
Assert.AreEqual("010-44536178", agent.ReferenceData["Phone_No"]);
Assert.AreEqual("", agent.ReferenceData["Country"]);

// Delete
statements = new List<string>
{
deleteSql
};
result = dbContext.ExecuteTransaction(statements);
Assert.IsTrue(result);
data = dbContext.FetchData(verifyDMLExecution);
Assert.IsTrue(data.Count == 0);
}

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteTransaction_Incomplete_Transaction_Rollback_On_Error()
{
var insertSql = Queries.MSSQLQueries.TestDB.DML.InsertSql;
var updateSql = Queries.MSSQLQueries.TestDB.DML.UpdateSql;
var updateErrorSql = "UPDATE";
var verifyDMLExecution = Queries.MSSQLQueries.TestDB.DML.VerifyDMLExecution;

var statements = new List<string>
{
insertSql,
updateSql,
updateErrorSql
};
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);

// Insert & Update
var result = dbContext.ExecuteTransaction(statements);
Assert.IsFalse(result);
var data = dbContext.FetchData(verifyDMLExecution);
Assert.IsTrue(data.Count == 0);
}

[TestMethod]
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
public void Test_MSSQL_ExecuteTransaction_DML_Unsupported_SELECT_Queries()
{
var selectSql = Queries.MSSQLQueries.TestDB.DML.SelectSql;

// Select
try
{
var statements = new List<string>
{
selectSql
};
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
var result = dbContext.ExecuteTransaction(statements);
Assert.Fail("No Exception");
}
catch (QueryDBException ex)
{
Assert.AreEqual("SELECT queries are not supported here.", ex.Message);
Assert.AreEqual("UnsupportedCommand", ex.ErrorType);
Assert.AreEqual("'ExecuteTransaction' doesn't support SELECT queries.", ex.AdditionalInfo);
}
}

#endregion

#endregion

}
Expand Down
Loading