Skip to content

Commit

Permalink
fix and improvements in SqlDb.QueryMany
Browse files Browse the repository at this point in the history
  • Loading branch information
acattaneo-bitagora committed Feb 10, 2023
1 parent 777b31b commit 98ea778
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 23 deletions.
21 changes: 6 additions & 15 deletions ACUtils.SqlDb.Utils/DBModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,32 +55,23 @@ public static IEnumerable<T> Idrate(IDataReader reader)
{
while (reader.Read())
{
foreach (var o in _returnIdrate(reader))
{
yield return o;
}
yield return _returnIdrate(reader);
}
}

public async static IAsyncEnumerable<T> IdrateAsync(SqlDataReader reader)
{
while (await reader.ReadAsync())
{
foreach (var o in _returnIdrate(reader))
{
yield return o;
}
yield return _returnIdrate(reader);
}
}

private static IEnumerable<T> _returnIdrate(IDataReader reader)
private static T _returnIdrate(IDataReader reader)
{
for (int i = 0; i < reader.FieldCount; i++)
{
var obj = new T();
obj.idrate(reader);
yield return obj;
}
var obj = new T();
obj.idrate(reader);
return obj;
}


Expand Down
19 changes: 13 additions & 6 deletions ACUtils.SqlDb/SqlDb_QueryMany.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;

namespace ACUtils
{
Expand All @@ -17,13 +18,13 @@ public static class SqlDb_QueryMany
#region static with simple params
public static List<T> QueryMany<T>(SqlConnection connection, string queryString, params KeyValuePair<string, object>[] queryParams) where T : ACUtils.DBModel<T>, new()
{
return _return<T>(SqlDb_QueryDataTable.QueryDataTable(connection, queryString, queryParams));
return _return<T>(SqlDb_QueryManyAsync.QueryManyAsync<T>(connection, queryString, queryParams)).Result;
}
#endregion
#region static with typed params
public static List<T> QueryMany<T>(SqlConnection connection, string queryString, params KeyValuePair<string, KeyValuePair<SqlDbType, object>>[] queryParams) where T : ACUtils.DBModel<T>, new()
{
return _return<T>(SqlDb_QueryDataTable.QueryDataTable(connection: connection, queryString: queryString, queryParams: queryParams));
return _return<T>(SqlDb_QueryManyAsync.QueryManyAsync<T>(connection: connection, queryString: queryString, queryParams: queryParams)).Result;
}
#endregion

Expand All @@ -36,19 +37,25 @@ public static class SqlDb_QueryMany
#region with simple params
public static List<T> QueryMany<T>(this SqlDb self, string queryString, params KeyValuePair<string, object>[] queryParams) where T : ACUtils.DBModel<T>, new()
{
return _return<T>(self.QueryDataTable(queryString: queryString, queryParams: queryParams));
return _return<T>(SqlDb_QueryManyAsync.QueryManyAsync<T>(self, queryString: queryString, queryParams: queryParams)).Result;
}
#endregion
#region whit typed params
public static List<T> QueryMany<T>(this SqlDb self, string queryString, params KeyValuePair<string, KeyValuePair<SqlDbType, object>>[] queryParams) where T : ACUtils.DBModel<T>, new()
{
return _return<T>(self.QueryDataTable(queryString: queryString, queryParams: queryParams));
return _return<T>(SqlDb_QueryManyAsync.QueryManyAsync<T>(self, queryString: queryString, queryParams: queryParams)).Result;
}
#endregion

private static List<T> _return<T>(DataTable dt) where T : ACUtils.DBModel<T>, new()
private static async Task<List<T>> _return<T>(IAsyncEnumerable<T> asyncReturn) where T : ACUtils.DBModel<T>, new()
{
return ACUtils.DBModel<T>.Idrate(dt);

var list = new List<T>();
await foreach(var el in asyncReturn)
{
list.Add(el);
}
return list;
}
}
}
1 change: 0 additions & 1 deletion Tests/FileUtilsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,6 @@ private bool _hasSomePermissions(string filePath, string accountName)
}

[Test]
[TestCase(@"ANDREA-C-2021-1\test")]
[TestCase(@"NT AUTHORITY\NETWORK")]
[Parallelizable(ParallelScope.All)]
public void FixAclTest(string identityUPN)
Expand Down
22 changes: 21 additions & 1 deletion Tests/SqlDbTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class SqlDbTest
{
private TransactionScope scope;
private SqlDb db;
private string CONNECTION_STRING => System.Environment.GetEnvironmentVariable("ACUTILS_TEST_CONNECTION_STRING") ?? "Data Source=(local);Initial Catalog=master;Integrated Security=SSPI;";
private string CONNECTION_STRING => System.Environment.GetEnvironmentVariable("ACUTILS_TEST_CONNECTION_STRING") ?? "Data Source=(local);Initial Catalog=AdventureWorks2019;Integrated Security=SSPI;";

[SetUp]
public void Setup()
Expand Down Expand Up @@ -155,5 +155,25 @@ public void TestQueryDictionary()
Assert.AreEqual(result[8722], "Sara Blue");
}


class DbPerson: ACUtils.DBModel<DbPerson>
{
public int BusinessEntityID { get; set; }
public string PersonType { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}


[Test]
public void TestQueryMany()
{
var count = db.QuerySingleValue<int>("SELECT COUNT(*) FROM Person.Person");
var allPersons = db.QueryMany<DbPerson>("SELECT * FROM Person.Person");
Assert.AreEqual(count, allPersons.ToList().Count);
}

}
}

0 comments on commit 98ea778

Please sign in to comment.