Skip to content

Commit 585b355

Browse files
committed
modified files for CustomQueryBuilder
1 parent 17337cb commit 585b355

11 files changed

Lines changed: 113 additions & 365 deletions

File tree

Simple.Data.Ado/AdoAdapterQueryRunner.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ out IEnumerable<SimpleQueryClauseBase>
9494
.ClearTake()
9595
.ClearOrderBy()
9696
.ClearWith()
97+
.ClearForUpdate()
9798
.ReplaceSelect(new CountSpecialReference());
9899
var unhandledClausesList = new List<IEnumerable<SimpleQueryClauseBase>>
99100
{

Simple.Data.Ado/CommandBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace Simple.Data.Ado
1111
{
12-
class CommandBuilder : ICommandBuilder
12+
public class CommandBuilder : ICommandBuilder
1313
{
1414
private int _number;
1515
private Func<IDbCommand, IDbParameterFactory> _getParameterFactory;

Simple.Data.Ado/Joiner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Simple.Data.Ado
1010
{
11-
class Joiner
11+
public class Joiner
1212
{
1313
private readonly JoinType _joinType;
1414
private readonly DatabaseSchema _schema;

Simple.Data.Ado/QueryBuilder.cs

Lines changed: 13 additions & 360 deletions
Large diffs are not rendered by default.

Simple.Data.Ado/Simple.Data.Ado.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
<Compile Include="ICommandBuilder.cs" />
9999
<Compile Include="IConnectionProvider.cs" />
100100
<Compile Include="ICustomInserter.cs" />
101+
<Compile Include="ICustomQueryBuilder.cs" />
101102
<Compile Include="IDbParameterFactory.cs" />
102103
<Compile Include="IExpressionFormatter.cs" />
103104
<Compile Include="IFunctionNameConverter.cs" />
@@ -121,6 +122,7 @@
121122
</Compile>
122123
<Compile Include="ProviderHelper.cs" />
123124
<Compile Include="QueryBuilder.cs" />
125+
<Compile Include="QueryBuilderBase.cs" />
124126
<Compile Include="SimpleReferenceFormatter.cs" />
125127
<Compile Include="SchemaResolutionException.cs" />
126128
<Compile Include="Schema\AmbiguousObjectNameException.cs" />

Simple.Data.Ado/SimpleReferenceFormatter.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,22 @@ namespace Simple.Data.Ado
55
using System.Text;
66
using Schema;
77

8-
class SimpleReferenceFormatter
8+
public class SimpleReferenceFormatter
99
{
10-
private readonly IFunctionNameConverter _functionNameConverter = new FunctionNameConverter();
10+
private readonly IFunctionNameConverter _functionNameConverter;
1111
private readonly DatabaseSchema _schema;
1212
private readonly ICommandBuilder _commandBuilder;
1313

14-
public SimpleReferenceFormatter(DatabaseSchema schema, ICommandBuilder commandBuilder)
14+
public SimpleReferenceFormatter(DatabaseSchema schema, ICommandBuilder commandBuilder) : this(schema, commandBuilder, null)
15+
{
16+
17+
}
18+
19+
public SimpleReferenceFormatter(DatabaseSchema schema, ICommandBuilder commandBuilder, IFunctionNameConverter functionNameConverter)
1520
{
1621
_schema = schema;
1722
_commandBuilder = commandBuilder;
23+
_functionNameConverter = functionNameConverter ?? new FunctionNameConverter();
1824
}
1925

2026
public string FormatColumnClause(SimpleReference reference)

Simple.Data.SqlServer/Simple.Data.SqlServer.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@
5959
<DependentUpon>Resources.resx</DependentUpon>
6060
</Compile>
6161
<Compile Include="SqlBulkInserter.cs" />
62+
<Compile Include="SqlCustomQueryBuilder.cs" />
6263
<Compile Include="SqlDbParameterFactory.cs" />
6364
<Compile Include="SqlColumn.cs" />
6465
<Compile Include="SqlCommandOptimizer.cs" />
6566
<Compile Include="SqlConnectionProvider.cs" />
6667
<Compile Include="SqlDbTypeEx.cs" />
6768
<Compile Include="SqlObservableQueryRunner.cs" />
69+
<Compile Include="SqlQueryBuilder.cs" />
6870
<Compile Include="SqlQueryPager.cs" />
6971
<Compile Include="SqlSchemaProvider.cs" />
7072
<Compile Include="SqlTypeResolver.cs" />

Simple.Data.SqlTest/QueryTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,5 +431,21 @@ public void CanFetchMoreThanOneHundredRows()
431431

432432
Assert.GreaterOrEqual(customers.Count, 200);
433433
}
434+
435+
[Test]
436+
public void QueryWithForUpdateFalseShouldReturnCorrectResult()
437+
{
438+
var db = DatabaseHelper.Open();
439+
var actual = db.Users.QueryById(1).Select(db.Users.Name).ForUpdate(false).First();
440+
Assert.AreEqual("Bob", actual.Name);
441+
}
442+
443+
[Test]
444+
public void QueryWithForUpdateTrueShouldReturnCorrectResult()
445+
{
446+
var db = DatabaseHelper.Open();
447+
var actual = db.Users.QueryById(1).Select(db.Users.Name).ForUpdate(true).First();
448+
Assert.AreEqual("Bob", actual.Name);
449+
}
434450
}
435451
}

Simple.Data.UnitTest/SimpleQueryTest.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,5 +168,45 @@ public void JoinOnShouldSetAJoin()
168168
Assert.AreEqual(quux.foo_id, join.JoinExpression.RightOperand);
169169
Assert.AreEqual(SimpleExpressionType.Equal, join.JoinExpression.Type);
170170
}
171+
172+
[Test]
173+
[ExpectedException(typeof(InvalidOperationException))]
174+
public void ForUpdateWithoutSelectShouldThrow()
175+
{
176+
new SimpleQuery(null, "foo").ForUpdate(false);
177+
}
178+
179+
[Test]
180+
public void ForUpdateShouldAddAClause()
181+
{
182+
var query = new SimpleQuery(null, "foo").Select(new AllColumnsSpecialReference()).ForUpdate(true);
183+
Assert.AreEqual(1, query.Clauses.OfType<ForUpdateClause>().Count());
184+
var forUpdate = query.Clauses.OfType<ForUpdateClause>().Single();
185+
Assert.IsTrue(forUpdate.SkipLockedRows);
186+
}
187+
188+
[Test]
189+
public void SubsequentCallsToForUpdateShouldReplaceClause()
190+
{
191+
var query = new SimpleQuery(null, "foo").Select(new AllColumnsSpecialReference()).ForUpdate(false);
192+
Assert.AreEqual(1, query.Clauses.OfType<ForUpdateClause>().Count());
193+
var forUpdate = query.Clauses.OfType<ForUpdateClause>().Single();
194+
Assert.IsFalse(forUpdate.SkipLockedRows);
195+
query = query.ForUpdate(true);
196+
Assert.AreEqual(1, query.Clauses.OfType<ForUpdateClause>().Count());
197+
forUpdate = query.Clauses.OfType<ForUpdateClause>().Single();
198+
Assert.IsTrue(forUpdate.SkipLockedRows);
199+
}
200+
201+
[Test]
202+
public void ClearForUpdateRemovesClause()
203+
{
204+
var query = new SimpleQuery(null, "foo").Select(new AllColumnsSpecialReference()).ForUpdate(false);
205+
Assert.AreEqual(1, query.Clauses.OfType<ForUpdateClause>().Count());
206+
var forUpdate = query.Clauses.OfType<ForUpdateClause>().Single();
207+
Assert.IsFalse(forUpdate.SkipLockedRows);
208+
query = query.ClearForUpdate();
209+
Assert.AreEqual(0, query.Clauses.OfType<ForUpdateClause>().Count());
210+
}
171211
}
172212
}

Simple.Data/Simple.Data.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
<Compile Include="DatabaseRunner.cs" />
8989
<Compile Include="DictionaryCloner.cs" />
9090
<Compile Include="ErrorCallback.cs" />
91+
<Compile Include="ForUpdateClause.cs" />
9192
<Compile Include="FunctionSignature.cs" />
9293
<Compile Include="InMemoryAdapter.cs" />
9394
<Compile Include="InMemoryAdapterIAdapterWithTransactions.cs" />

0 commit comments

Comments
 (0)