Skip to content

Commit cadf402

Browse files
committed
Merged 0.16.2.2
2 parents 5312785 + 02866af commit cadf402

25 files changed

Lines changed: 241 additions & 86 deletions

CommonAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
// COM, set the ComVisible attribute to true on that type.
2020
[assembly: ComVisible(false)]
2121

22-
[assembly: AssemblyVersion("0.16.1.1")]
23-
[assembly: AssemblyFileVersion("0.16.1.1")]
22+
[assembly: AssemblyVersion("0.16.2.2")]
23+
[assembly: AssemblyFileVersion("0.16.2.2")]
2424

PerformanceTestConsole/app.config

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<connectionStrings>
4+
<add name="Test" connectionString="data source=.;initial catalog=simpletest;integrated security=true" />
5+
</connectionStrings>
6+
<runtime>
7+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
8+
<dependentAssembly>
9+
<assemblyIdentity name="MongoDB.Bson" publicKeyToken="f686731cfb9cc103" culture="neutral" />
10+
<bindingRedirect oldVersion="0.0.0.0-1.3.1.4349" newVersion="1.3.1.4349" />
11+
</dependentAssembly>
12+
<dependentAssembly>
13+
<assemblyIdentity name="MongoDB.Driver" publicKeyToken="f686731cfb9cc103" culture="neutral" />
14+
<bindingRedirect oldVersion="0.0.0.0-1.3.1.4349" newVersion="1.3.1.4349" />
15+
</dependentAssembly>
16+
</assemblyBinding>
17+
</runtime>
18+
</configuration>

Simple.Data.Ado/AdoAdapterFinder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,15 @@ private IEnumerable<IDictionary<string, object>> FindAll(ObjectName tableName)
113113
private IEnumerable<IDictionary<string, object>> ExecuteQuery(CommandTemplate commandTemplate, IEnumerable<object> parameterValues)
114114
{
115115
var connection = _connection ?? _adapter.CreateConnection();
116-
var command = commandTemplate.GetDbCommand(connection, parameterValues);
116+
var command = commandTemplate.GetDbCommand(_adapter, connection, parameterValues);
117117
command.Transaction = _transaction;
118118
return TryExecuteQuery(connection, command, commandTemplate.Index);
119119
}
120120

121121
private IDictionary<string, object> ExecuteSingletonQuery(CommandTemplate commandTemplate, IEnumerable<object> parameterValues)
122122
{
123123
var connection = _connection ?? _adapter.CreateConnection();
124-
var command = commandTemplate.GetDbCommand(connection, parameterValues);
124+
var command = commandTemplate.GetDbCommand(_adapter, connection, parameterValues);
125125
command.Transaction = _transaction;
126126
return TryExecuteSingletonQuery(connection, command, commandTemplate.Index);
127127
}

Simple.Data.Ado/AdoAdapterGetter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private IDictionary<string, object> ExecuteSingletonQuery(IDbCommand command, ob
7070
private IDictionary<string, object> ExecuteSingletonQuery(CommandTemplate commandTemplate, IEnumerable<object> parameterValues)
7171
{
7272
var connection = _connection ?? _adapter.CreateConnection();
73-
var command = commandTemplate.GetDbCommand(connection, parameterValues);
73+
var command = commandTemplate.GetDbCommand(_adapter, connection, parameterValues);
7474
command.Transaction = _transaction;
7575
return TryExecuteSingletonQuery(connection, command, commandTemplate.Index);
7676
}

Simple.Data.Ado/AdoAdapterQueryRunner.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ out IEnumerable<SimpleQueryClauseBase>
3434
if (_adapter.ProviderSupportsCompoundStatements || commandBuilders.Length == 1)
3535
{
3636
var command =
37-
CommandBuilder.CreateCommand(
37+
new CommandBuilder(_adapter.GetSchema()).CreateCommand(
3838
_adapter.ProviderHelper.GetCustomProvider<IDbParameterFactory>(_adapter.SchemaProvider),
3939
commandBuilders,
4040
connection);
@@ -237,7 +237,7 @@ public IEnumerable<IEnumerable<IDictionary<string, object>>> RunQueries(SimpleQu
237237
connection = _adapter.CreateConnection();
238238
}
239239
IDbCommand command =
240-
CommandBuilder.CreateCommand(
240+
new CommandBuilder(_adapter.GetSchema()).CreateCommand(
241241
_adapter.ProviderHelper.GetCustomProvider<IDbParameterFactory>(_adapter.SchemaProvider),
242242
commandBuilders.ToArray(), connection);
243243
if (_transaction != null)

Simple.Data.Ado/CommandBuilder.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class CommandBuilder : ICommandBuilder
1313
{
1414
private int _number;
1515
private Func<IDbCommand, IDbParameterFactory> _getParameterFactory;
16+
private readonly DatabaseSchema _schema;
1617
private readonly ISchemaProvider _schemaProvider;
1718
private readonly Dictionary<ParameterTemplate, object> _parameters = new Dictionary<ParameterTemplate, object>();
1819
private readonly StringBuilder _text;
@@ -28,6 +29,7 @@ public CommandBuilder(DatabaseSchema schema) : this(schema, -1)
2829
public CommandBuilder(DatabaseSchema schema, int bulkIndex)
2930
{
3031
_text = new StringBuilder();
32+
_schema = schema;
3133
_schemaProvider = schema.SchemaProvider;
3234
_customInterfaceProvider = schema.ProviderHelper;
3335
_parameterSuffix = (bulkIndex >= 0) ? "_c" + bulkIndex : string.Empty;
@@ -36,6 +38,7 @@ public CommandBuilder(DatabaseSchema schema, int bulkIndex)
3638
public CommandBuilder(string text, DatabaseSchema schema, int bulkIndex)
3739
{
3840
_text = new StringBuilder(text);
41+
_schema = schema;
3942
_schemaProvider = schema.SchemaProvider;
4043
_customInterfaceProvider = schema.ProviderHelper;
4144
_parameterSuffix = (bulkIndex >= 0) ? "_c" + bulkIndex : string.Empty;
@@ -166,7 +169,7 @@ private void SetParameters(IDbCommand command, IEnumerable<KeyValuePair<Paramete
166169
SetParameters(parameterFactory, command, parameters);
167170
}
168171

169-
private static void SetParameters(IDbParameterFactory parameterFactory, IDbCommand command, IEnumerable<KeyValuePair<ParameterTemplate, object>> parameters)
172+
private void SetParameters(IDbParameterFactory parameterFactory, IDbCommand command, IEnumerable<KeyValuePair<ParameterTemplate, object>> parameters)
170173
{
171174
var parameterList = parameters.ToList();
172175
if (parameterList.Any(kvp => kvp.Value is IRange) ||
@@ -189,7 +192,7 @@ private static void SetParameters(IDbParameterFactory parameterFactory, IDbComma
189192
}
190193
}
191194

192-
private static IEnumerable<IDbDataParameter> CreateParameterComplex(IDbParameterFactory parameterFactory, ParameterTemplate template, object value, IDbCommand command)
195+
private IEnumerable<IDbDataParameter> CreateParameterComplex(IDbParameterFactory parameterFactory, ParameterTemplate template, object value, IDbCommand command)
193196
{
194197
if (template.Column != null && template.Column.IsBinary)
195198
{
@@ -228,13 +231,13 @@ private static IEnumerable<IDbDataParameter> CreateParameterComplex(IDbParameter
228231
if (command.CommandText.Contains("!= " + template.Name))
229232
{
230233
command.CommandText = command.CommandText.Replace("!= " + template.Name,
231-
"NOT IN (" +
234+
_schema.Operators.NotIn + " (" +
232235
builder.ToString().Substring(1) + ")");
233236
}
234237
else
235238
{
236239
command.CommandText = command.CommandText.Replace("= " + template.Name,
237-
"IN (" +
240+
_schema.Operators.In + " (" +
238241
builder.ToString().Substring(1) +
239242
")");
240243
}
@@ -248,17 +251,17 @@ private static IEnumerable<IDbDataParameter> CreateParameterComplex(IDbParameter
248251
}
249252
}
250253

251-
public static void SetBetweenInCommandText(IDbCommand command, string name)
254+
public void SetBetweenInCommandText(IDbCommand command, string name)
252255
{
253256
if (command.CommandText.Contains("!= " + name))
254257
{
255258
command.CommandText = command.CommandText.Replace("!= " + name,
256-
string.Format("NOT BETWEEN {0}_start AND {0}_end", name));
259+
string.Format("{0} {1}_start AND {1}_end", _schema.Operators.NotBetween, name));
257260
}
258261
else
259262
{
260263
command.CommandText = command.CommandText.Replace("= " + name,
261-
string.Format("BETWEEN {0}_start AND {0}_end", name));
264+
string.Format("{0} {1}_start AND {1}_end", _schema.Operators.Between, name));
262265
}
263266
}
264267

@@ -289,7 +292,7 @@ private static IDbDataParameter CreateSingleParameter(IDbParameterFactory parame
289292
return parameter;
290293
}
291294

292-
internal static IDbCommand CreateCommand(IDbParameterFactory parameterFactory, ICommandBuilder[] commandBuilders, IDbConnection connection)
295+
internal IDbCommand CreateCommand(IDbParameterFactory parameterFactory, ICommandBuilder[] commandBuilders, IDbConnection connection)
293296
{
294297
var command = connection.CreateCommand();
295298
parameterFactory = parameterFactory ?? new GenericDbParameterFactory(command);

Simple.Data.Ado/CommandTemplate.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ public Dictionary<string, int> Index
2929
get { return _index; }
3030
}
3131

32-
public IDbCommand GetDbCommand(IDbConnection connection, IEnumerable<object> parameterValues)
32+
public IDbCommand GetDbCommand(AdoAdapter adapter, IDbConnection connection, IEnumerable<object> parameterValues)
3333
{
3434
var command = connection.CreateCommand();
3535
command.CommandText = _commandText;
3636

37-
foreach (var parameter in CreateParameters(command, parameterValues))
37+
foreach (var parameter in CreateParameters(adapter.GetSchema(), command, parameterValues))
3838
{
3939
command.Parameters.Add(parameter);
4040
}
4141
return command;
4242
}
4343

44-
private IEnumerable<IDbDataParameter> CreateParameters(IDbCommand command, IEnumerable<object> parameterValues)
44+
private IEnumerable<IDbDataParameter> CreateParameters(DatabaseSchema schema, IDbCommand command, IEnumerable<object> parameterValues)
4545
{
4646
var fixedParameters = _parameters.Where(pt => pt.Type == ParameterType.FixedValue).ToArray();
4747
if ((!parameterValues.Any(pv => pv != null)) && fixedParameters.Length == 0) yield break;
@@ -55,14 +55,14 @@ private IEnumerable<IDbDataParameter> CreateParameters(IDbCommand command, IEnum
5555
var columnParameters = _parameters.Where(pt => pt.Type != ParameterType.FixedValue).ToArray();
5656

5757
foreach (var parameter in parameterValues.Any(o => o is IEnumerable && !(o is string)) || parameterValues.Any(o => o is IRange)
58-
? parameterValues.SelectMany((v, i) => CreateParameters(command, columnParameters[i], v))
58+
? parameterValues.SelectMany((v, i) => CreateParameters(schema, command, columnParameters[i], v))
5959
: parameterValues.Select((v, i) => CreateParameter(command, columnParameters[i], v)))
6060
{
6161
yield return parameter;
6262
}
6363
}
6464

65-
private IEnumerable<IDbDataParameter> CreateParameters(IDbCommand command, ParameterTemplate parameterTemplate, object value)
65+
private IEnumerable<IDbDataParameter> CreateParameters(DatabaseSchema schema, IDbCommand command, ParameterTemplate parameterTemplate, object value)
6666
{
6767
if (value == null || TypeHelper.IsKnownType(value.GetType()) || parameterTemplate.DbType == DbType.Binary)
6868
{
@@ -75,7 +75,7 @@ private IEnumerable<IDbDataParameter> CreateParameters(IDbCommand command, Param
7575
{
7676
yield return CreateParameter(command, parameterTemplate, range.Start, "_start");
7777
yield return CreateParameter(command, parameterTemplate, range.End, "_end");
78-
CommandBuilder.SetBetweenInCommandText(command, parameterTemplate.Name);
78+
new CommandBuilder(schema).SetBetweenInCommandText(command, parameterTemplate.Name);
7979
}
8080
else
8181
{
@@ -89,7 +89,7 @@ private IEnumerable<IDbDataParameter> CreateParameters(IDbCommand command, Param
8989
builder.AppendFormat(",{0}_{1}", parameterTemplate.Name, i);
9090
yield return CreateParameter(command, parameterTemplate, array[i], "_" + i);
9191
}
92-
RewriteSqlEqualityToInClause(command, parameterTemplate, builder);
92+
RewriteSqlEqualityToInClause(schema, command, parameterTemplate, builder);
9393
}
9494
else
9595
{
@@ -99,19 +99,19 @@ private IEnumerable<IDbDataParameter> CreateParameters(IDbCommand command, Param
9999
}
100100
}
101101

102-
private static void RewriteSqlEqualityToInClause(IDbCommand command, ParameterTemplate parameterTemplate, StringBuilder builder)
102+
private static void RewriteSqlEqualityToInClause(DatabaseSchema schema, IDbCommand command, ParameterTemplate parameterTemplate, StringBuilder builder)
103103
{
104104
if (command.CommandText.Contains("!= " + parameterTemplate.Name))
105105
{
106106
command.CommandText = command.CommandText.Replace("!= " + parameterTemplate.Name,
107-
"NOT IN (" +
107+
schema.Operators.NotIn + " (" +
108108
builder.ToString().Substring(1) +
109109
")");
110110
}
111111
else
112112
{
113113
command.CommandText = command.CommandText.Replace("= " + parameterTemplate.Name,
114-
"IN (" +
114+
schema.Operators.In + " (" +
115115
builder.ToString().Substring(1) +
116116
")");
117117
}

Simple.Data.Ado/EagerLoadingEnumerable.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,10 @@ private Dictionary<IDictionary<string, object>, IDictionary<string, WithContaine
8383
{
8484
var withContainer = new WithContainer();
8585
withContainer.SetSingle(tuple.Item2);
86-
withContainers.Add(tuple.Item1, withContainer);
86+
if (!ReferenceEquals(withContainer.Single, null))
87+
{
88+
withContainers.Add(tuple.Item1, withContainer);
89+
}
8790
}
8891
}
8992

@@ -107,12 +110,14 @@ private class WithContainer
107110

108111
public void AddToCollection(IDictionary<string,object> row)
109112
{
113+
if (row.All(kvp => ReferenceEquals(null, kvp.Value))) return;
110114
if (Collection == null) Collection = new HashSet<IDictionary<string, object>>(new DictionaryEqualityComparer());
111115
Collection.Add(row);
112116
}
113117

114118
public void SetSingle(IDictionary<string,object> row)
115119
{
120+
if (row.All(kvp => ReferenceEquals(null, kvp.Value))) return;
116121
Single = row;
117122
}
118123
}

Simple.Data.Ado/ExpressionFormatter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class ExpressionFormatter : ExpressionFormatterBase
1111
private readonly DatabaseSchema _schema;
1212
private readonly SimpleReferenceFormatter _simpleReferenceFormatter;
1313

14-
public ExpressionFormatter(ICommandBuilder commandBuilder, DatabaseSchema schema)
14+
public ExpressionFormatter(ICommandBuilder commandBuilder, DatabaseSchema schema) : base(() => schema.Operators)
1515
{
1616
_commandBuilder = commandBuilder;
1717
_schema = schema;

0 commit comments

Comments
 (0)