Skip to content

Commit 6e7b5df

Browse files
committed
Fixing regressions and refuctoring :(
1 parent c532dc4 commit 6e7b5df

19 files changed

Lines changed: 187 additions & 71 deletions

Simple.Data.Ado/AdoAdapter.IAdapterWithFunctions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public IEnumerable<ResultSet> Execute(string functionName, IDictionary<string, o
2525
public IEnumerable<ResultSet> Execute(string functionName, IDictionary<string, object> parameters, IAdapterTransaction transaction)
2626
{
2727
var executor = _executors.GetOrAdd(functionName, f => _connectionProvider.GetProcedureExecutor(this, _schema.BuildObjectName(f)));
28-
return executor.Execute(parameters, ((AdoAdapterTransaction)transaction).Transaction);
28+
return executor.Execute(parameters, ((AdoAdapterTransaction)transaction).DbTransaction);
2929
}
3030
}
3131
}

Simple.Data.Ado/AdoAdapter.IAdapterWithTransactions.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public IEnumerable<IDictionary<string, object>> InsertMany(string tableName,
3535
IAdapterTransaction transaction,
3636
Func<IDictionary<string, object>, Exception, bool> onError, bool resultRequired)
3737
{
38-
return new AdoAdapterInserter(this, ((AdoAdapterTransaction)transaction).Transaction).InsertMany(
38+
return new AdoAdapterInserter(this, ((AdoAdapterTransaction)transaction).DbTransaction).InsertMany(
3939
tableName, data, onError, resultRequired);
4040
}
4141

@@ -44,15 +44,15 @@ public int UpdateMany(string tableName, IEnumerable<IDictionary<string, object>>
4444
{
4545
IBulkUpdater bulkUpdater = ProviderHelper.GetCustomProvider<IBulkUpdater>(ConnectionProvider) ??
4646
new BulkUpdater();
47-
return bulkUpdater.Update(this, tableName, data.ToList(), ((AdoAdapterTransaction)transaction).Transaction);
47+
return bulkUpdater.Update(this, tableName, data.ToList(), ((AdoAdapterTransaction)transaction).DbTransaction);
4848
}
4949

5050
public int UpdateMany(string tableName, IEnumerable<IDictionary<string, object>> data,
5151
IAdapterTransaction transaction, IList<string> keyFields)
5252
{
5353
IBulkUpdater bulkUpdater = ProviderHelper.GetCustomProvider<IBulkUpdater>(ConnectionProvider) ??
5454
new BulkUpdater();
55-
return bulkUpdater.Update(this, tableName, data.ToList(), ((AdoAdapterTransaction)transaction).Transaction);
55+
return bulkUpdater.Update(this, tableName, data.ToList(), ((AdoAdapterTransaction)transaction).DbTransaction);
5656
}
5757

5858
public int Update(string tableName, IDictionary<string, object> data, IAdapterTransaction adapterTransaction)
@@ -68,7 +68,7 @@ public int UpdateMany(string tableName, IList<IDictionary<string, object>> dataL
6868
IBulkUpdater bulkUpdater = ProviderHelper.GetCustomProvider<IBulkUpdater>(ConnectionProvider) ??
6969
new BulkUpdater();
7070
return bulkUpdater.Update(this, tableName, dataList, criteriaFieldNames,
71-
((AdoAdapterTransaction)adapterTransaction).Transaction);
71+
((AdoAdapterTransaction)adapterTransaction).DbTransaction);
7272
}
7373

7474
public IAdapterTransaction BeginTransaction()
@@ -93,20 +93,26 @@ public IAdapterTransaction BeginTransaction(string name)
9393

9494
public IDictionary<string,object> Get(string tableName, IAdapterTransaction transaction, params object[] parameterValues)
9595
{
96-
return new AdoAdapterGetter(this, ((AdoAdapterTransaction) transaction).Transaction).Get(tableName,
96+
return new AdoAdapterGetter(this, ((AdoAdapterTransaction) transaction).DbTransaction).Get(tableName,
9797
parameterValues);
9898
}
99+
100+
public IEnumerable<IDictionary<string, object>> RunQuery(SimpleQuery query, IAdapterTransaction transaction, out IEnumerable<SimpleQueryClauseBase> unhandledClauses)
101+
{
102+
return new AdoAdapterQueryRunner(this, (AdoAdapterTransaction)transaction).RunQuery(query, out unhandledClauses);
103+
}
104+
99105
public IEnumerable<IDictionary<string, object>> Find(string tableName, SimpleExpression criteria,
100106
IAdapterTransaction transaction)
101107
{
102-
return new AdoAdapterFinder(this, ((AdoAdapterTransaction)transaction).Transaction).Find(tableName,
108+
return new AdoAdapterFinder(this, ((AdoAdapterTransaction)transaction).DbTransaction).Find(tableName,
103109
criteria);
104110
}
105111

106112
public IDictionary<string, object> Insert(string tableName, IDictionary<string, object> data,
107113
IAdapterTransaction transaction, bool resultRequired)
108114
{
109-
return new AdoAdapterInserter(this, ((AdoAdapterTransaction)transaction).Transaction).Insert(tableName,
115+
return new AdoAdapterInserter(this, ((AdoAdapterTransaction)transaction).DbTransaction).Insert(tableName,
110116
data, resultRequired);
111117
}
112118

@@ -125,19 +131,19 @@ public int Delete(string tableName, SimpleExpression criteria, IAdapterTransacti
125131

126132
public override IDictionary<string, object> Upsert(string tableName, IDictionary<string, object> data, SimpleExpression criteria, bool resultRequired, IAdapterTransaction adapterTransaction)
127133
{
128-
var transaction = ((AdoAdapterTransaction) adapterTransaction).Transaction;
134+
var transaction = ((AdoAdapterTransaction) adapterTransaction).DbTransaction;
129135
return new AdoAdapterUpserter(this, transaction).Upsert(tableName, data, criteria, resultRequired);
130136
}
131137

132138
public override IEnumerable<IDictionary<string, object>> UpsertMany(string tableName, IList<IDictionary<string, object>> list, IAdapterTransaction adapterTransaction, bool isResultRequired, Func<IDictionary<string, object>, Exception, bool> errorCallback)
133139
{
134-
var transaction = ((AdoAdapterTransaction) adapterTransaction).Transaction;
140+
var transaction = ((AdoAdapterTransaction) adapterTransaction).DbTransaction;
135141
return new AdoAdapterUpserter(this, transaction).UpsertMany(tableName, list, isResultRequired, errorCallback);
136142
}
137143

138144
public override IEnumerable<IDictionary<string, object>> UpsertMany(string tableName, IList<IDictionary<string, object>> list, IEnumerable<string> keyFieldNames, IAdapterTransaction adapterTransaction, bool isResultRequired, Func<IDictionary<string, object>, Exception, bool> errorCallback)
139145
{
140-
var transaction = ((AdoAdapterTransaction) adapterTransaction).Transaction;
146+
var transaction = ((AdoAdapterTransaction) adapterTransaction).DbTransaction;
141147
return new AdoAdapterUpserter(this, transaction).UpsertMany(tableName, list, keyFieldNames.ToArray(), isResultRequired, errorCallback);
142148
}
143149
}

Simple.Data.Ado/AdoAdapter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ internal static int Execute(ICommandBuilder commandBuilder, IDbConnection connec
265265

266266
internal static int Execute(ICommandBuilder commandBuilder, IAdapterTransaction transaction)
267267
{
268-
IDbTransaction dbTransaction = ((AdoAdapterTransaction) transaction).Transaction;
268+
IDbTransaction dbTransaction = ((AdoAdapterTransaction) transaction).DbTransaction;
269269
return Execute(commandBuilder, dbTransaction);
270270
}
271271

Simple.Data.Ado/AdoAdapterQueryRunner.cs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@
99
internal class AdoAdapterQueryRunner
1010
{
1111
private readonly AdoAdapter _adapter;
12+
private readonly AdoAdapterTransaction _transaction;
1213

13-
public AdoAdapterQueryRunner(AdoAdapter adapter)
14+
public AdoAdapterQueryRunner(AdoAdapter adapter) : this(adapter, null)
15+
{
16+
}
17+
18+
public AdoAdapterQueryRunner(AdoAdapter adapter, AdoAdapterTransaction transaction)
1419
{
1520
_adapter = adapter;
21+
_transaction = transaction;
1622
}
1723

1824
public IEnumerable<IDictionary<string, object>> RunQuery(SimpleQuery query,
@@ -27,11 +33,21 @@ out IEnumerable<SimpleQueryClauseBase>
2733
IDbConnection connection = _adapter.CreateConnection();
2834
if (_adapter.ProviderSupportsCompoundStatements || commandBuilders.Length == 1)
2935
{
30-
result =
36+
var command =
3137
CommandBuilder.CreateCommand(
3238
_adapter.ProviderHelper.GetCustomProvider<IDbParameterFactory>(_adapter.SchemaProvider),
3339
commandBuilders,
34-
connection).ToEnumerable(_adapter.CreateConnection);
40+
connection);
41+
42+
if (_transaction != null)
43+
{
44+
command.Transaction = _transaction.DbTransaction;
45+
result = command.ToEnumerable(_transaction.DbTransaction);
46+
}
47+
else
48+
{
49+
result = command.ToEnumerable(_adapter.CreateConnection);
50+
}
3551
}
3652
else
3753
{
@@ -211,11 +227,23 @@ public IEnumerable<IEnumerable<IDictionary<string, object>>> RunQueries(SimpleQu
211227
commandBuilders.AddRange(GetQueryCommandBuilders(ref queries[i], i, out unhandledClausesForThisQuery));
212228
unhandledClauses.Add(unhandledClausesForThisQuery);
213229
}
214-
IDbConnection connection = _adapter.CreateConnection();
230+
IDbConnection connection;
231+
if (_transaction != null)
232+
{
233+
connection = _transaction.DbTransaction.Connection;
234+
}
235+
else
236+
{
237+
connection = _adapter.CreateConnection();
238+
}
215239
IDbCommand command =
216240
CommandBuilder.CreateCommand(
217241
_adapter.ProviderHelper.GetCustomProvider<IDbParameterFactory>(_adapter.SchemaProvider),
218242
commandBuilders.ToArray(), connection);
243+
if (_transaction != null)
244+
{
245+
command.Transaction = _transaction.DbTransaction;
246+
}
219247
foreach (var item in command.ToEnumerables(connection))
220248
{
221249
yield return item.ToList();

Simple.Data.Ado/AdoAdapterTransaction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public AdoAdapterTransaction(IDbTransaction dbTransaction, string name, bool sha
2626
_sharedConnection = sharedConnection;
2727
}
2828

29-
internal IDbTransaction Transaction
29+
internal IDbTransaction DbTransaction
3030
{
3131
get { return _dbTransaction; }
3232
}

Simple.Data.Ado/DataReaderEnumerable.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ internal class DataReaderEnumerable : IEnumerable<IDictionary<string, object>>
1515
private IEnumerable<IDictionary<string, object>> _cache;
1616
private IDictionary<string, int> _index;
1717
private readonly IDbCommand _command;
18+
private readonly IDbTransaction _transaction;
1819
private readonly Func<IDbConnection> _createConnection;
1920

2021
public DataReaderEnumerable(IDbCommand command, Func<IDbConnection> createConnection)
@@ -29,6 +30,11 @@ public DataReaderEnumerable(IDbCommand command, Func<IDbConnection> createConnec
2930
_index = index;
3031
}
3132

33+
public DataReaderEnumerable(IDbCommand command, IDbTransaction transaction, IDictionary<string, int> index) : this(command, () => transaction.Connection, index)
34+
{
35+
_transaction = transaction;
36+
}
37+
3238
public IEnumerator<IDictionary<string, object>> GetEnumerator()
3339
{
3440
if (_cache != null) return _cache.GetEnumerator();
@@ -40,6 +46,10 @@ public IEnumerator<IDictionary<string, object>> GetEnumerator()
4046
{
4147
command = (IDbCommand) clonable.Clone();
4248
command.Connection = _createConnection();
49+
if (_transaction != null)
50+
{
51+
command.Transaction = _transaction;
52+
}
4353
}
4454
else
4555
{

Simple.Data.Ado/DbCommandExtensions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@ public static void SetParameterValue(this IDbCommand command, int index, object
102102
{
103103
((IDbDataParameter) command.Parameters[index]).Value = CommandHelper.FixObjectType(value);
104104
}
105+
106+
public static IEnumerable<IDictionary<string, object>> ToEnumerable(this IDbCommand command, IDbTransaction transaction)
107+
{
108+
return ToEnumerable(command, transaction, null);
109+
}
110+
111+
public static IEnumerable<IDictionary<string, object>> ToEnumerable(this IDbCommand command, IDbTransaction transaction, IDictionary<string, int> index)
112+
{
113+
return new DataReaderEnumerable(command, transaction, index);
114+
}
105115
}
106116

107117
class EnumerableShim<T> : IEnumerable<T>

Simple.Data.SqlTest/BulkInsertTest.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@ public void Setup()
1616
public void BulkInsertUsesSchema()
1717
{
1818
var db = DatabaseHelper.Open();
19-
db.test.SchemaTable.DeleteAll();
20-
db.test.SchemaTable.Insert(GenerateItems());
19+
List<dynamic> list;
20+
Promise<int> count;
21+
using (var tx = db.BeginTransaction())
22+
{
23+
tx.test.SchemaTable.DeleteAll();
24+
tx.test.SchemaTable.Insert(GenerateItems());
2125

22-
var list = db.test.SchemaTable.All().ToList();
26+
list = tx.test.SchemaTable.All().WithTotalCount(out count).ToList();
27+
tx.Rollback();
28+
}
29+
Assert.AreEqual(1000, count.Value);
2330
Assert.AreEqual(1000, list.Count);
24-
25-
db.test.SchemaTable.DeleteAll();
2631
}
2732

2833
private static IEnumerable<SchemaItem> GenerateItems()

Simple.Data.SqlTest/FindTests.cs

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -122,19 +122,7 @@ public void TestImplicitEnumerableCast()
122122
}
123123
}
124124

125-
[Test]
126-
public void TestFindWithSchemaQualification()
127-
{
128-
var db = DatabaseHelper.Open();
129-
130-
var dboActual = db.dbo.SchemaTable.FindById(1);
131-
var testActual = db.test.SchemaTable.FindById(1);
132-
133-
Assert.IsNotNull(dboActual);
134-
Assert.AreEqual("Pass", dboActual.Description);
135-
Assert.IsNull(testActual);
136-
}
137-
125+
138126
[Test]
139127
public void TestFindWithCriteriaAndSchemaQualification()
140128
{
@@ -146,16 +134,6 @@ public void TestFindWithCriteriaAndSchemaQualification()
146134
Assert.AreEqual("Pass", dboActual.Description);
147135
}
148136

149-
[Test]
150-
public void TestFindAllByIdWithSchemaQualification()
151-
{
152-
var db = DatabaseHelper.Open();
153-
var dboCount = db.dbo.SchemaTable.FindAllById(1).ToList().Count;
154-
var testCount = db.test.SchemaTable.FindAllById(1).ToList().Count;
155-
Assert.AreEqual(1, dboCount);
156-
Assert.AreEqual(0, testCount);
157-
}
158-
159137
[Test]
160138
public void TestFindOnAView()
161139
{

Simple.Data.SqlTest/QueryTest.cs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -295,30 +295,7 @@ public void ToScalarOrDefault()
295295
Assert.AreEqual(0, max);
296296
}
297297

298-
[Test]
299-
public void QueryWithSchemaQualifiedTableName()
300-
{
301-
var db = DatabaseHelper.Open();
302-
var result = db.test.SchemaTable.QueryById(2)
303-
.Select(db.test.SchemaTable.Id,
304-
db.test.SchemaTable.Description)
305-
.Single();
306-
Assert.AreEqual(2, result.Id);
307-
Assert.AreEqual("Pass", result.Description);
308-
}
309-
310-
[Test]
311-
public void QueryWithSchemaQualifiedTableNameAndAliases()
312-
{
313-
var db = DatabaseHelper.Open();
314-
var result = db.test.SchemaTable.QueryById(2)
315-
.Select(db.test.SchemaTable.Id.As("This"),
316-
db.test.SchemaTable.Description.As("That"))
317-
.Single();
318-
Assert.AreEqual(2, result.This);
319-
Assert.AreEqual("Pass", result.That);
320-
}
321-
298+
322299
[Test]
323300
public void WithClauseShouldPreselectDetailTableAsCollection()
324301
{

0 commit comments

Comments
 (0)