Skip to content

Commit e95c6f6

Browse files
committed
Insert, Update & Having values argument now accepts dynamic, ExpandoObject & any implementation of IEnumerable<KeyValuePair<string, object>>
1 parent 26731a6 commit e95c6f6

File tree

6 files changed

+18
-18
lines changed

6 files changed

+18
-18
lines changed

QueryBuilder/Base.Where.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public Q Where(object constraints)
7777
return Where(dictionary);
7878
}
7979

80-
public Q Where(IReadOnlyDictionary<string, object> values)
80+
public Q Where(IEnumerable<KeyValuePair<string, object>> values)
8181
{
8282
var query = (Q)this;
8383
var orFlag = GetOr();

QueryBuilder/Query.Having.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public Query Having(object constraints)
7777
return Having(dictionary);
7878
}
7979

80-
public Query Having(IReadOnlyDictionary<string, object> values)
80+
public Query Having(IEnumerable<KeyValuePair<string, object>> values)
8181
{
8282
var query = this;
8383
var orFlag = GetOr();

QueryBuilder/Query.Insert.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public partial class Query
99
{
1010
public Query AsInsert(object data, bool returnId = false)
1111
{
12-
var dictionary = BuildDictionaryFromObject(data);
12+
var dictionary = BuildKeyValuePairsFromObject(data);
1313

1414
return AsInsert(dictionary, returnId);
1515
}
@@ -42,7 +42,7 @@ public Query AsInsert(IEnumerable<string> columns, IEnumerable<object> values)
4242

4343
public Query AsInsert(IEnumerable<KeyValuePair<string, object>> data, bool returnId = false)
4444
{
45-
if (data == null || data.Count == 0)
45+
if (data == null || data.Any() == false)
4646
{
4747
throw new InvalidOperationException("Values dictionary cannot be null or empty");
4848
}
@@ -51,8 +51,8 @@ public Query AsInsert(IEnumerable<KeyValuePair<string, object>> data, bool retur
5151

5252
ClearComponent("insert").AddComponent("insert", new InsertClause
5353
{
54-
Columns = data.Keys.ToList(),
55-
Values = data.Values.ToList(),
54+
Columns = data.Select(x=>x.Key).ToList(),
55+
Values = data.Select(x => x.Value).ToList(),
5656
ReturnId = returnId,
5757
});
5858

QueryBuilder/Query.Update.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public partial class Query
1111

1212
public Query AsUpdate(object data)
1313
{
14-
var dictionary = BuildDictionaryFromObject(data, considerKeys: true);
14+
var dictionary = BuildKeyValuePairsFromObject(data, considerKeys: true);
1515

1616
return AsUpdate(dictionary);
1717
}
@@ -40,10 +40,10 @@ public Query AsUpdate(IEnumerable<string> columns, IEnumerable<object> values)
4040
return this;
4141
}
4242

43-
public Query AsUpdate(IReadOnlyDictionary<string, object> data)
43+
public Query AsUpdate(IEnumerable<KeyValuePair<string, object>> data)
4444
{
4545

46-
if (data == null || data.Count == 0)
46+
if (data == null || data.Any() == false)
4747
{
4848
throw new InvalidOperationException("Values dictionary cannot be null or empty");
4949
}
@@ -52,8 +52,8 @@ public Query AsUpdate(IReadOnlyDictionary<string, object> data)
5252

5353
ClearComponent("update").AddComponent("update", new InsertClause
5454
{
55-
Columns = data.Keys.ToList(),
56-
Values = data.Values.ToList(),
55+
Columns = data.Select(x => x.Key).ToList(),
56+
Values = data.Select(x => x.Value).ToList(),
5757
});
5858

5959
return this;

QueryBuilder/Query.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ public object FindVariable(string variable)
353353
/// and add it automatically to the Where clause
354354
/// </param>
355355
/// <returns></returns>
356-
private Dictionary<string, object> BuildDictionaryFromObject(object data, bool considerKeys = false)
356+
private IEnumerable<KeyValuePair<string, object>> BuildKeyValuePairsFromObject(object data, bool considerKeys = false)
357357
{
358358

359359
var dictionary = new Dictionary<string, object>();

SqlKata.Execution/Query.Extensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,12 @@ public static async Task ChunkAsync(this Query query, int chunkSize, Action<IEnu
153153
await ChunkAsync<dynamic>(query, chunkSize, action, transaction, timeout);
154154
}
155155

156-
public static int Insert(this Query query, IReadOnlyDictionary<string, object> values, IDbTransaction transaction = null, int? timeout = null)
156+
public static int Insert(this Query query, IEnumerable<KeyValuePair<string, object>> values, IDbTransaction transaction = null, int? timeout = null)
157157
{
158158
return CreateQueryFactory(query).Execute(query.AsInsert(values), transaction, timeout);
159159
}
160160

161-
public static async Task<int> InsertAsync(this Query query, IReadOnlyDictionary<string, object> values, IDbTransaction transaction = null, int? timeout = null)
161+
public static async Task<int> InsertAsync(this Query query, IEnumerable<KeyValuePair<string, object>> values, IDbTransaction transaction = null, int? timeout = null)
162162
{
163163
return await CreateQueryFactory(query).ExecuteAsync(query.AsInsert(values), transaction, timeout);
164164
}
@@ -205,26 +205,26 @@ public static async Task<T> InsertGetIdAsync<T>(this Query query, object data, I
205205
return row.Id;
206206
}
207207

208-
public static T InsertGetId<T>(this Query query, IReadOnlyDictionary<string, object> data, IDbTransaction transaction = null, int? timeout = null)
208+
public static T InsertGetId<T>(this Query query, IEnumerable<KeyValuePair<string, object>> data, IDbTransaction transaction = null, int? timeout = null)
209209
{
210210
var row = CreateQueryFactory(query).First<InsertGetIdRow<T>>(query.AsInsert(data, true), transaction, timeout);
211211

212212
return row.Id;
213213
}
214214

215-
public static async Task<T> InsertGetIdAsync<T>(this Query query, IReadOnlyDictionary<string, object> data, IDbTransaction transaction = null, int? timeout = null)
215+
public static async Task<T> InsertGetIdAsync<T>(this Query query, IEnumerable<KeyValuePair<string, object>> data, IDbTransaction transaction = null, int? timeout = null)
216216
{
217217
var row = await CreateQueryFactory(query).FirstAsync<InsertGetIdRow<T>>(query.AsInsert(data, true), transaction, timeout);
218218

219219
return row.Id;
220220
}
221221

222-
public static int Update(this Query query, IReadOnlyDictionary<string, object> values, IDbTransaction transaction = null, int? timeout = null)
222+
public static int Update(this Query query, IEnumerable<KeyValuePair<string, object>> values, IDbTransaction transaction = null, int? timeout = null)
223223
{
224224
return CreateQueryFactory(query).Execute(query.AsUpdate(values), transaction, timeout);
225225
}
226226

227-
public static async Task<int> UpdateAsync(this Query query, IReadOnlyDictionary<string, object> values, IDbTransaction transaction = null, int? timeout = null)
227+
public static async Task<int> UpdateAsync(this Query query, IEnumerable<KeyValuePair<string, object>> values, IDbTransaction transaction = null, int? timeout = null)
228228
{
229229
return await CreateQueryFactory(query).ExecuteAsync(query.AsUpdate(values), transaction, timeout);
230230
}

0 commit comments

Comments
 (0)