Skip to content

Commit ceab01b

Browse files
committed
Addition - Execute DDLs
1 parent d5a0ab3 commit ceab01b

File tree

11 files changed

+298
-1
lines changed

11 files changed

+298
-1
lines changed

QueryDB.Core.Tests/MSSQLTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,46 @@ public void Test_MSSQL_FetchData_Entity_Strict_Error_Check()
308308

309309
#endregion
310310

311+
#region Execute DDL Tests - << void ExecuteDDL(string ddlStatement) >>
312+
313+
[TestMethod]
314+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
315+
public void Test_MSSQL_ExecuteDDL_Queries()
316+
{
317+
var createTableSql = Queries.MSSQLQueries.TestDB.DDL.Create_Table;
318+
var alterTableSql = Queries.MSSQLQueries.TestDB.DDL.Alter_Table;
319+
var truncateTableSql = Queries.MSSQLQueries.TestDB.DDL.Truncate_Table;
320+
var renameTableSql = Queries.MSSQLQueries.TestDB.DDL.Rename_Table;
321+
var dropTableSql = Queries.MSSQLQueries.TestDB.DDL.Drop_Table;
322+
var dDLExecutionCheckSql = Queries.MSSQLQueries.TestDB.DDL.DDL_Execute_check;
323+
324+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
325+
dbContext.ExecuteDDL(createTableSql);
326+
dbContext.ExecuteDDL(alterTableSql);
327+
dbContext.ExecuteDDL(truncateTableSql);
328+
329+
var tableCount = dbContext
330+
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
331+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
332+
333+
dbContext.ExecuteDDL(renameTableSql);
334+
335+
tableCount = dbContext
336+
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employee"));
337+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
338+
tableCount = dbContext
339+
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
340+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
341+
342+
dbContext.ExecuteDDL(dropTableSql);
343+
344+
tableCount = dbContext
345+
.FetchData(string.Format(dDLExecutionCheckSql, "dbo", "Employees"));
346+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
347+
}
348+
349+
#endregion
350+
311351
#endregion
312352

313353
}

QueryDB.Core.Tests/MySQLTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,46 @@ public void Test_MySQL_FetchData_Entity_Strict_Error_Check()
288288

289289
#endregion
290290

291+
#region Execute DDL Tests - << void ExecuteDDL(string ddlStatement) >>
292+
293+
[TestMethod]
294+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
295+
public void Test_MySQL_ExecuteDDL_Queries()
296+
{
297+
var createTableSql = Queries.MySQLQueries.TestDB.DDL.Create_Table;
298+
var alterTableSql = Queries.MySQLQueries.TestDB.DDL.Alter_Table;
299+
var truncateTableSql = Queries.MySQLQueries.TestDB.DDL.Truncate_Table;
300+
var renameTableSql = Queries.MySQLQueries.TestDB.DDL.Rename_Table;
301+
var dropTableSql = Queries.MySQLQueries.TestDB.DDL.Drop_Table;
302+
var dDLExecutionCheckSql = Queries.MySQLQueries.TestDB.DDL.DDL_Execute_check;
303+
304+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
305+
dbContext.ExecuteDDL(createTableSql);
306+
dbContext.ExecuteDDL(alterTableSql);
307+
dbContext.ExecuteDDL(truncateTableSql);
308+
309+
var tableCount = dbContext
310+
.FetchData(string.Format(dDLExecutionCheckSql, "mysql", "Employee"));
311+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
312+
313+
dbContext.ExecuteDDL(renameTableSql);
314+
315+
tableCount = dbContext
316+
.FetchData(string.Format(dDLExecutionCheckSql, "mysql", "Employee"));
317+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
318+
tableCount = dbContext
319+
.FetchData(string.Format(dDLExecutionCheckSql, "mysql", "Employees"));
320+
Assert.AreEqual("1", tableCount[0].ReferenceData["Table_Count"]);
321+
322+
dbContext.ExecuteDDL(dropTableSql);
323+
324+
tableCount = dbContext
325+
.FetchData(string.Format(dDLExecutionCheckSql, "mysql", "Employees"));
326+
Assert.AreEqual("0", tableCount[0].ReferenceData["Table_Count"]);
327+
}
328+
329+
#endregion
330+
291331
#endregion
292332

293333
}

QueryDB.Core.Tests/OracleTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,46 @@ public void Test_Oracle_FetchData_Entity_Strict_Error_Check()
290290

291291
#endregion
292292

293+
#region Execute DDL Tests - << void ExecuteDDL(string ddlStatement) >>
294+
295+
[TestMethod]
296+
[TestCategory(DB_TESTS), TestCategory(ORACLE_TESTS)]
297+
public void Test_PostgreSQL_ExecuteDDL_Queries()
298+
{
299+
var createTableSql = Queries.OracleQueries.TestDB.DDL.Create_Table;
300+
var alterTableSql = Queries.OracleQueries.TestDB.DDL.Alter_Table;
301+
var truncateTableSql = Queries.OracleQueries.TestDB.DDL.Truncate_Table;
302+
var renameTableSql = Queries.OracleQueries.TestDB.DDL.Rename_Table;
303+
var dropTableSql = Queries.OracleQueries.TestDB.DDL.Drop_Table;
304+
var dDLExecutionCheckSql = Queries.OracleQueries.TestDB.DDL.DDL_Execute_check;
305+
306+
var dbContext = new DBContext(DB.Oracle, OracleConnectionString);
307+
dbContext.ExecuteDDL(createTableSql);
308+
dbContext.ExecuteDDL(alterTableSql);
309+
dbContext.ExecuteDDL(truncateTableSql);
310+
311+
var tableCount = dbContext
312+
.FetchData(string.Format(dDLExecutionCheckSql, "Employee"));
313+
Assert.AreEqual("1", tableCount[0].ReferenceData["TABLE_COUNT"]);
314+
315+
dbContext.ExecuteDDL(renameTableSql);
316+
317+
tableCount = dbContext
318+
.FetchData(string.Format(dDLExecutionCheckSql, "Employee"));
319+
Assert.AreEqual("0", tableCount[0].ReferenceData["TABLE_COUNT"]);
320+
tableCount = dbContext
321+
.FetchData(string.Format(dDLExecutionCheckSql, "Employees"));
322+
Assert.AreEqual("1", tableCount[0].ReferenceData["TABLE_COUNT"]);
323+
324+
dbContext.ExecuteDDL(dropTableSql);
325+
326+
tableCount = dbContext
327+
.FetchData(string.Format(dDLExecutionCheckSql, "Employees"));
328+
Assert.AreEqual("0", tableCount[0].ReferenceData["TABLE_COUNT"]);
329+
}
330+
331+
#endregion
332+
293333
#endregion
294334

295335
}

QueryDB.Core.Tests/PostgreSQLTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,46 @@ public void Test_PostgreSQL_FetchData_Entity_Strict_Error_Check()
282282

283283
#endregion
284284

285+
#region Execute DDL Tests - << void ExecuteDDL(string ddlStatement) >>
286+
287+
[TestMethod]
288+
[TestCategory(DB_TESTS), TestCategory(POSTGRESQL_TESTS)]
289+
public void Test_PostgreSQL_ExecuteDDL_Queries()
290+
{
291+
var createTableSql = Queries.PostgreSQLQueries.TestDB.DDL.Create_Table;
292+
var alterTableSql = Queries.PostgreSQLQueries.TestDB.DDL.Alter_Table;
293+
var truncateTableSql = Queries.PostgreSQLQueries.TestDB.DDL.Truncate_Table;
294+
var renameTableSql = Queries.PostgreSQLQueries.TestDB.DDL.Rename_Table;
295+
var dropTableSql = Queries.PostgreSQLQueries.TestDB.DDL.Drop_Table;
296+
var dDLExecutionCheckSql = Queries.PostgreSQLQueries.TestDB.DDL.DDL_Execute_check;
297+
298+
var dbContext = new DBContext(DB.PostgreSQL, PostgreSQLConnectionString);
299+
dbContext.ExecuteDDL(createTableSql);
300+
dbContext.ExecuteDDL(alterTableSql);
301+
dbContext.ExecuteDDL(truncateTableSql);
302+
303+
var tableCount = dbContext
304+
.FetchData(string.Format(dDLExecutionCheckSql, "public", "Employee"));
305+
Assert.AreEqual("1", tableCount[0].ReferenceData["table_count"]);
306+
307+
dbContext.ExecuteDDL(renameTableSql);
308+
309+
tableCount = dbContext
310+
.FetchData(string.Format(dDLExecutionCheckSql, "public", "Employee"));
311+
Assert.AreEqual("0", tableCount[0].ReferenceData["table_count"]);
312+
tableCount = dbContext
313+
.FetchData(string.Format(dDLExecutionCheckSql, "public", "Employees"));
314+
Assert.AreEqual("1", tableCount[0].ReferenceData["table_count"]);
315+
316+
dbContext.ExecuteDDL(dropTableSql);
317+
318+
tableCount = dbContext
319+
.FetchData(string.Format(dDLExecutionCheckSql, "public", "Employees"));
320+
Assert.AreEqual("0", tableCount[0].ReferenceData["table_count"]);
321+
}
322+
323+
#endregion
324+
285325
#endregion
286326

287327
}

QueryDB.Core.Tests/Queries.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ internal static class TestDB
2121
public static string SelectSql_Strict = @"SELECT A.Agent_Code, A.Agent_Name AS Agent, C.Cust_Code, C.Cust_Name AS Customer, O.Ord_Num, O.Ord_Amount FROM Agents A INNER JOIN
2222
Customer C ON C.Agent_Code = A.Agent_Code INNER JOIN
2323
Orders O ON O.Cust_Code = C.Cust_Code AND O.Agent_Code = A.Agent_Code";
24+
internal static class DDL
25+
{
26+
public static string Create_Table = @"CREATE TABLE Employee (EmployeeID INT PRIMARY KEY, FirstName NVARCHAR(50), LastName NVARCHAR(50))";
27+
public static string Alter_Table = @"ALTER TABLE Employee ADD MiddleName VARCHAR(50)";
28+
public static string Truncate_Table = @"TRUNCATE TABLE Employee";
29+
public static string Rename_Table = @"EXEC SP_RENAME Employee, Employees";
30+
public static string Drop_Table = @"DROP TABLE Employees";
31+
public static string DDL_Execute_check = @"SELECT COUNT(*) AS Table_Count FROM Information_Schema.Tables WHERE LOWER(Table_Schema) = LOWER('{0}') AND LOWER(Table_Name) = LOWER('{1}')";
32+
}
2433
}
2534
}
2635

@@ -43,6 +52,15 @@ internal static class TestDB
4352
public static string SelectSql_Strict = @"SELECT A.Agent_Code, A.Agent_Name AS Agent, C.Cust_Code, C.Cust_Name AS Customer, O.Ord_Num, O.Ord_Amount FROM Agents A INNER JOIN
4453
Customer C ON C.Agent_Code = A.Agent_Code INNER JOIN
4554
Orders O ON O.Cust_Code = C.Cust_Code AND O.Agent_Code = A.Agent_Code";
55+
internal static class DDL
56+
{
57+
public static string Create_Table = @"CREATE TABLE Employee (EmployeeID INT PRIMARY KEY, FirstName NVARCHAR(50), LastName NVARCHAR(50))";
58+
public static string Alter_Table = @"ALTER TABLE Employee ADD MiddleName VARCHAR(50)";
59+
public static string Truncate_Table = @"TRUNCATE TABLE Employee";
60+
public static string Rename_Table = @"ALTER TABLE Employee RENAME TO Employees";
61+
public static string Drop_Table = @"DROP TABLE Employees";
62+
public static string DDL_Execute_check = @"SELECT COUNT(*) AS Table_Count FROM Information_Schema.Tables WHERE LOWER(Table_Schema) = LOWER('{0}') AND LOWER(Table_Name) = LOWER('{1}')";
63+
}
4664
}
4765
}
4866

@@ -65,6 +83,15 @@ internal static class TestDB
6583
public static string SelectSql_Strict = @"SELECT A.Agent_Code, A.Agent_Name AS Agent, C.Cust_Code, C.Cust_Name AS Customer, O.Ord_Num, O.Ord_Amount FROM Agents A INNER JOIN
6684
Customer C ON C.Agent_Code = A.Agent_Code INNER JOIN
6785
Orders O ON O.Cust_Code = C.Cust_Code AND O.Agent_Code = A.Agent_Code";
86+
internal static class DDL
87+
{
88+
public static string Create_Table = @"CREATE TABLE Employee (EmployeeID NUMBER PRIMARY KEY, FirstName NVARCHAR2(50), LastName NVARCHAR2(50))";
89+
public static string Alter_Table = @"ALTER TABLE Employee ADD MiddleName VARCHAR(50)";
90+
public static string Truncate_Table = @"TRUNCATE TABLE Employee";
91+
public static string Rename_Table = @"RENAME Employee TO Employees";
92+
public static string Drop_Table = @"DROP TABLE Employees";
93+
public static string DDL_Execute_check = @"SELECT COUNT(*) FROM user_tables WHERE LOWER(table_Name) = LOWER('{0}');";
94+
}
6895
}
6996
}
7097

@@ -87,6 +114,15 @@ internal static class TestDB
87114
public static string SelectSql_Strict = @"SELECT A.Agent_Code, A.Agent_Name AS Agent, C.Cust_Code, C.Cust_Name AS Customer, O.Ord_Num, O.Ord_Amount FROM Agents A INNER JOIN
88115
Customer C ON C.Agent_Code = A.Agent_Code INNER JOIN
89116
Orders O ON O.Cust_Code = C.Cust_Code AND O.Agent_Code = A.Agent_Code";
117+
internal static class DDL
118+
{
119+
public static string Create_Table = @"CREATE TABLE Employee (EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50))";
120+
public static string Alter_Table = @"ALTER TABLE Employee ADD MiddleName VARCHAR(50)";
121+
public static string Truncate_Table = @"TRUNCATE TABLE Employee";
122+
public static string Rename_Table = @"ALTER TABLE Employee RENAME TO Employees";
123+
public static string Drop_Table = @"DROP TABLE Employees";
124+
public static string DDL_Execute_check = @"SELECT COUNT(*) AS Table_Count FROM Information_Schema.Tables WHERE LOWER(Table_Schema) = LOWER('{0}') AND LOWER(Table_Name) = LOWER('{1}')";
125+
}
90126
}
91127
}
92128
}

QueryDB/DBContext.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,42 @@ public List<DataDictionary> FetchData(string selectSql, bool upperCaseKeys = fal
142142
return dataList;
143143
}
144144

145+
public void ExecuteDDL(string ddlStatement)
146+
{
147+
if (Database.Equals(DB.MSSQL))
148+
{
149+
using (var msSqlDBConnection = GetSqlServerConnection())
150+
{
151+
var _systemAdapter = new MSSQL.Adapter();
152+
_systemAdapter.ExecuteDDL(ddlStatement, msSqlDBConnection.SqlConnection);
153+
}
154+
}
155+
else if (Database.Equals(DB.MySQL))
156+
{
157+
using (var mySqlDBConnection = GetMySqlConnection())
158+
{
159+
var _systemAdapter = new MySQL.Adapter();
160+
_systemAdapter.ExecuteDDL(ddlStatement, mySqlDBConnection.MySqlConnection);
161+
}
162+
}
163+
else if (Database.Equals(DB.Oracle))
164+
{
165+
using (var oracleDBConnection = GetOracleConnection())
166+
{
167+
var _systemAdapter = new Oracle.Adapter();
168+
_systemAdapter.ExecuteDDL(ddlStatement, oracleDBConnection.OracleConnection);
169+
}
170+
}
171+
else if (Database.Equals(DB.PostgreSQL))
172+
{
173+
using (var postgreSqlDBConnection = GetPostgreSqlConnection())
174+
{
175+
var _systemAdapter = new PostgreSQL.Adapter();
176+
_systemAdapter.ExecuteDDL(ddlStatement, postgreSqlDBConnection.PostgreSQLConnection);
177+
}
178+
}
179+
}
180+
145181
/// <summary>
146182
/// Gets 'SQL Server' connection.
147183
/// </summary>

QueryDB/IDBContext.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,11 @@ interface IDBContext
2424
/// <param name="strict">Enables fetch data only for object <T> properties existing in database query result. Default - 'false'.</param>
2525
/// <returns>List of data rows mapped into object entity into a list for multiple rows of data.</returns>
2626
List<T> FetchData<T>(string selectSql, bool strict = false) where T : new();
27+
28+
/// <summary>
29+
/// Executes 'Data Definition Language' commands.
30+
/// </summary>
31+
/// <param name="ddlStatement">DDL statement as command.</param>
32+
void ExecuteDDL(string ddlStatement);
2733
}
2834
}

QueryDB/MSSQL/Adapter.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ internal SqlDataReader GetSqlReader(string cmdText, SqlConnection connection, Co
2727
}
2828
}
2929

30+
internal SqlCommand GetSqlCommand(string cmdText, SqlConnection connection, CommandType commandType)
31+
{
32+
connection.Open();
33+
var sqlCommand = new SqlCommand(cmdText, connection) { CommandType = commandType };
34+
return sqlCommand;
35+
}
36+
3037
/// <summary>
3138
/// Retrieves records for 'Select' queries from the database.
3239
/// Converts column names to keys holding values, with multiple database rows returned into a list.
@@ -84,6 +91,13 @@ internal List<DataDictionary> FetchData(string selectSql, SqlConnection connecti
8491
}
8592
return dataList;
8693
}
87-
94+
95+
internal void ExecuteDDL(string ddlStatement, SqlConnection connection)
96+
{
97+
using(var sqlCommand = GetSqlCommand(ddlStatement, connection, CommandType.Text))
98+
{
99+
sqlCommand.ExecuteNonQuery();
100+
}
101+
}
88102
}
89103
}

QueryDB/MySQL/Adapter.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ internal MySqlDataReader GetMySqlReader(string cmdText, MySqlConnection connecti
2727
}
2828
}
2929

30+
internal MySqlCommand GetMySqlCommand(string cmdText, MySqlConnection connection, CommandType commandType)
31+
{
32+
connection.Open();
33+
var sqlCommand = new MySqlCommand(cmdText, connection) { CommandType = commandType };
34+
return sqlCommand;
35+
}
36+
3037
/// <summary>
3138
/// Retrieves records for 'Select' queries from the database.
3239
/// Converts column names to keys holding values, with multiple database rows returned into a list.
@@ -84,5 +91,13 @@ internal List<DataDictionary> FetchData(string selectSql, MySqlConnection connec
8491
}
8592
return dataList;
8693
}
94+
95+
internal void ExecuteDDL(string ddlStatement, MySqlConnection connection)
96+
{
97+
using (var sqlCommand = GetMySqlCommand(ddlStatement, connection, CommandType.Text))
98+
{
99+
sqlCommand.ExecuteNonQuery();
100+
}
101+
}
87102
}
88103
}

QueryDB/Oracle/Adapter.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ internal OracleDataReader GetOracleReader(string cmdText, OracleConnection conne
2727
}
2828
}
2929

30+
internal OracleCommand GetOracleCommand(string cmdText, OracleConnection connection, CommandType commandType)
31+
{
32+
connection.Open();
33+
var sqlCommand = new OracleCommand(cmdText, connection) { CommandType = commandType };
34+
return sqlCommand;
35+
}
36+
3037
/// <summary>
3138
/// Retrieves records for 'Select' queries from the database.
3239
/// Converts column names to keys holding values, with multiple database rows returned into a list.
@@ -91,5 +98,13 @@ internal List<DataDictionary> FetchData(string selectSql, OracleConnection conne
9198
}
9299
return dataList;
93100
}
101+
102+
internal void ExecuteDDL(string ddlStatement, OracleConnection connection)
103+
{
104+
using (var sqlCommand = GetOracleCommand(ddlStatement, connection, CommandType.Text))
105+
{
106+
sqlCommand.ExecuteNonQuery();
107+
}
108+
}
94109
}
95110
}

0 commit comments

Comments
 (0)