Skip to content

Commit 07fd731

Browse files
committed
Addition - Fetch Data Async
1 parent 1e95f3d commit 07fd731

File tree

11 files changed

+1702
-68
lines changed

11 files changed

+1702
-68
lines changed

QueryDB.Core.Tests/MSSQLTests.cs

Lines changed: 283 additions & 3 deletions
Large diffs are not rendered by default.

QueryDB.Core.Tests/MySQLTests.cs

Lines changed: 263 additions & 3 deletions
Large diffs are not rendered by default.

QueryDB.Core.Tests/OracleTests.cs

Lines changed: 265 additions & 3 deletions
Large diffs are not rendered by default.

QueryDB.Core.Tests/PostgreSQLTests.cs

Lines changed: 257 additions & 3 deletions
Large diffs are not rendered by default.

QueryDB/DBContext.cs

Lines changed: 98 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Collections.Generic;
55
using System.Linq;
66
using System.Text.RegularExpressions;
7+
using System.Threading.Tasks;
78

89
namespace QueryDB
910
{
@@ -56,13 +57,13 @@ public DBContext(DB database, string connectionString)
5657
}
5758

5859
/// <summary>
59-
/// Retrieves records for 'Select' queries from the database.
60+
/// Executes and retrieves records for 'Select' queries from the database.
6061
/// Converts column names to keys holding values, with multiple database rows returned into a list.
6162
/// Note: Use aliases in query for similar column names.
6263
/// </summary>
6364
/// <param name="selectSql">'Select' query.</param>
64-
/// <param name="upperCaseKeys">Boolean parameter to return dictionary keys in uppercase. Default - 'false'.</param>
65-
/// <returns>List of data Dictionary with column names as keys holding values into a list for multiple rows of data.</returns>
65+
/// <param name="upperCaseKeys">Boolean parameter to return dictionary keys in uppercase. Default - <c>false</c>.</param>
66+
/// <returns>List of <see cref="DataDictionary"/> with column names as keys holding values into a list for multiple rows of data.</returns>
6667
public List<DataDictionary> FetchData(string selectSql, bool upperCaseKeys = false)
6768
{
6869
var dataList = new List<DataDictionary>();
@@ -102,12 +103,58 @@ public List<DataDictionary> FetchData(string selectSql, bool upperCaseKeys = fal
102103
}
103104

104105
/// <summary>
105-
/// Retrieves records for 'Select' queries from the database.
106+
/// Asynchronously executes and retrieves records for 'Select' queries from the database.
107+
/// Converts column names to keys holding values, with multiple database rows returned into a list.
108+
/// Note: Use aliases in query for similar column names.
109+
/// </summary>
110+
/// <param name="selectSql">'Select' query.</param>
111+
/// <param name="upperCaseKeys">Boolean parameter to return dictionary keys in uppercase. Default - <c>false</c>.</param>
112+
/// <returns>List of <see cref="DataDictionary"/> with column names as keys holding values into a list for multiple rows of data.</returns>
113+
public async Task<List<DataDictionary>> FetchDataAsync(string selectSql, bool upperCaseKeys = false)
114+
{
115+
var dataList = new List<DataDictionary>();
116+
if (Database.Equals(DB.MSSQL))
117+
{
118+
using (var msSqlDBConnection = GetSqlServerConnection())
119+
{
120+
var _systemAdapter = new MSSQL.Adapter();
121+
dataList = await _systemAdapter.FetchDataAsync(selectSql, msSqlDBConnection.SqlConnection, upperCaseKeys);
122+
}
123+
}
124+
else if (Database.Equals(DB.MySQL))
125+
{
126+
using (var mySqlDBConnection = GetMySqlConnection())
127+
{
128+
var _systemAdapter = new MySQL.Adapter();
129+
dataList = await _systemAdapter.FetchDataAsync(selectSql, mySqlDBConnection.MySqlConnection, upperCaseKeys);
130+
}
131+
}
132+
else if (Database.Equals(DB.Oracle))
133+
{
134+
using (var oracleDBConnection = GetOracleConnection())
135+
{
136+
var _systemAdapter = new Oracle.Adapter();
137+
dataList = await _systemAdapter.FetchDataAsync(selectSql, oracleDBConnection.OracleConnection, upperCaseKeys);
138+
}
139+
}
140+
else if (Database.Equals(DB.PostgreSQL))
141+
{
142+
using (var postgreSqlDBConnection = GetPostgreSqlConnection())
143+
{
144+
var _systemAdapter = new PostgreSQL.Adapter();
145+
dataList = await _systemAdapter.FetchDataAsync(selectSql, postgreSqlDBConnection.PostgreSQLConnection, upperCaseKeys);
146+
}
147+
}
148+
return dataList;
149+
}
150+
151+
/// <summary>
152+
/// Executes and retrieves records for 'Select' queries from the database.
106153
/// </summary>
107154
/// <typeparam name="T">Object entity to return data mapped into.</typeparam>
108155
/// <param name="selectSql">'Select' query.</param>
109-
/// <param name="strict">Enables fetch data only for object <T> properties existing in database query result. Default - 'false'.</param>
110-
/// <returns>List of data rows mapped into object entity into a list for multiple rows of data.</returns>
156+
/// <param name="strict">Enables fetch data only for object type <typeparamref name="T"/> properties existing in database query result. Default - <c>false</c>.</param>
157+
/// <returns>List of data rows mapped into object of type <typeparamref name="T"/>.</returns>
111158
public List<T> FetchData<T>(string selectSql, bool strict = false) where T : new()
112159
{
113160
var dataList = new List<T>();
@@ -146,6 +193,51 @@ public List<DataDictionary> FetchData(string selectSql, bool upperCaseKeys = fal
146193
return dataList;
147194
}
148195

196+
/// <summary>
197+
/// Asynchronously executes and retrieves records for 'Select' queries from the database.
198+
/// </summary>
199+
/// <typeparam name="T">Object entity to return data mapped into.</typeparam>
200+
/// <param name="selectSql">'Select' query.</param>
201+
/// <param name="strict">Enables fetch data only for object type <typeparamref name="T"/> properties existing in database query result. Default - <c>false</c>.</param>
202+
/// <returns>List of data rows mapped into object of type <typeparamref name="T"/>.</returns>
203+
public async Task<List<T>> FetchDataAsync<T>(string selectSql, bool strict = false) where T : new()
204+
{
205+
var dataList = new List<T>();
206+
if (Database.Equals(DB.MSSQL))
207+
{
208+
using (var msSqlDBConnection = GetSqlServerConnection())
209+
{
210+
var _systemAdapter = new MSSQL.Adapter();
211+
dataList = await _systemAdapter.FetchDataAsync<T>(selectSql, msSqlDBConnection.SqlConnection, strict);
212+
}
213+
}
214+
else if (Database.Equals(DB.MySQL))
215+
{
216+
using (var mySqlDBConnection = GetMySqlConnection())
217+
{
218+
var _systemAdapter = new MySQL.Adapter();
219+
dataList = await _systemAdapter.FetchDataAsync<T>(selectSql, mySqlDBConnection.MySqlConnection, strict);
220+
}
221+
}
222+
else if (Database.Equals(DB.Oracle))
223+
{
224+
using (var oracleDBConnection = GetOracleConnection())
225+
{
226+
var _systemAdapter = new Oracle.Adapter();
227+
dataList = await _systemAdapter.FetchDataAsync<T>(selectSql, oracleDBConnection.OracleConnection, strict);
228+
}
229+
}
230+
else if (Database.Equals(DB.PostgreSQL))
231+
{
232+
using (var postgreSqlDBConnection = GetPostgreSqlConnection())
233+
{
234+
var _systemAdapter = new PostgreSQL.Adapter();
235+
dataList = await _systemAdapter.FetchDataAsync<T>(selectSql, postgreSqlDBConnection.PostgreSQLConnection, strict);
236+
}
237+
}
238+
return dataList;
239+
}
240+
149241
/// <summary>
150242
/// Executes a SQL query and returns the result as a string.
151243
/// </summary>

QueryDB/IDBContext.cs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using QueryDB.Resources;
22
using System.Collections.Generic;
3+
using System.Threading.Tasks;
34

45
namespace QueryDB
56
{
@@ -9,22 +10,38 @@ namespace QueryDB
910
interface IDBContext
1011
{
1112
/// <summary>
12-
/// Retrieves records for 'Select' queries from the database.
13+
/// Executes and retrieves records for 'Select' queries from the database.
1314
/// </summary>
1415
/// <param name="selectSql">'Select' query.</param>
15-
/// <param name="upperCaseKeys">Boolean parameter to return dictionary keys in uppercase. Default - 'false'.</param>
16-
/// <returns>List of data Dictionary with column names as keys holding values into a list for multiple rows of data.</returns>
16+
/// <param name="upperCaseKeys">Boolean parameter to return dictionary keys in uppercase. Default - <c>false</c>.</param>
17+
/// <returns>List of <see cref="DataDictionary"/> with column names as keys holding values into a list for multiple rows of data.</returns>
1718
List<DataDictionary> FetchData(string selectSql, bool upperCaseKeys = false);
1819

1920
/// <summary>
20-
/// Retrieves records for 'Select' queries from the database.
21+
/// Asynchronously executes and retrieves records for 'Select' queries from the database.
22+
/// </summary>
23+
/// <param name="selectSql">'Select' query.</param>
24+
/// <param name="upperCaseKeys">Boolean parameter to return dictionary keys in uppercase. Default - <c>false</c>.</param>
25+
/// <returns>List of <see cref="DataDictionary"/> with column names as keys holding values into a list for multiple rows of data.</returns>
26+
Task<List<DataDictionary>> FetchDataAsync(string selectSql, bool upperCaseKeys = false);
27+
28+
/// <summary>
29+
/// Executes and retrieves records for 'Select' queries from the database.
2130
/// </summary>
2231
/// <typeparam name="T">Object entity to return data mapped into.</typeparam>
2332
/// <param name="selectSql">'Select' query.</param>
24-
/// <param name="strict">Enables fetch data only for object <T> properties existing in database query result. Default - 'false'.</param>
25-
/// <returns>List of data rows mapped into object entity into a list for multiple rows of data.</returns>
33+
/// <param name="strict">Enables fetch data only for object type <typeparamref name="T"/> properties existing in database query result. Default - <c>false</c>.</param>
34+
/// <returns>List of data rows mapped into object of type <typeparamref name="T"/>.</returns>
2635
List<T> FetchData<T>(string selectSql, bool strict = false) where T : new();
2736

37+
/// <summary>
38+
/// Asynchronously executes and retrieves records for 'Select' queries from the database.
39+
/// </summary>
40+
/// <typeparam name="T">Object entity to return data mapped into.</typeparam>
41+
/// <param name="selectSql">'Select' query.</param>
42+
/// <param name="strict">Enables fetch data only for object type <typeparamref name="T"/> properties existing in database query result. Default - <c>false</c>.</param>
43+
Task<List<T>> FetchDataAsync<T>(string selectSql, bool strict = false) where T : new();
44+
2845
/// <summary>
2946
/// Executes a SQL query and returns the result as a string.
3047
/// </summary>

0 commit comments

Comments
 (0)