Skip to content

Commit 67f9321

Browse files
committed
106: ParameterTemplates of Type "Other" break Parameter type inference
1 parent 030dcb9 commit 67f9321

7 files changed

Lines changed: 57 additions & 10 deletions

File tree

Simple.Data.Ado/CommandBuilder.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,20 @@ public static void SetBetweenInCommandText(IDbCommand command, string name)
255255

256256
private static IDbDataParameter CreateSingleParameter(IDbParameterFactory parameterFactory, object value, ParameterTemplate template)
257257
{
258-
if (template.Column != null) return CreateSingleParameter(parameterFactory, value, template.Name, template.Column);
258+
if (template.Column != null)
259+
{
260+
return CreateSingleParameter(parameterFactory, value, template.Name, template.Column);
261+
}
259262

260-
var parameter = parameterFactory.CreateParameter(template.Name, template.DbType, template.MaxLength);
263+
var parameter = default(IDbDataParameter);
264+
if (template.Type == ParameterType.NameOnly)
265+
{
266+
parameter = parameterFactory.CreateParameter(template.Name);
267+
}
268+
else
269+
{
270+
parameter = parameterFactory.CreateParameter(template.Name, template.DbType, template.MaxLength);
271+
}
261272
parameter.Value = CommandHelper.FixObjectType(value);
262273
return parameter;
263274
}

Simple.Data.Ado/CommandTemplate.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,21 @@ private static void RewriteSqlEqualityToInClause(IDbCommand command, ParameterTe
120120
private IDbDataParameter CreateParameter(IDbCommand command, ParameterTemplate parameterTemplate, object value, string suffix = "")
121121
{
122122
var factory = _createGetParameterFactoryFunc(command);
123-
var parameter = parameterTemplate.Column != null
124-
? factory.CreateParameter(parameterTemplate.Name + suffix,
125-
parameterTemplate.Column)
126-
: factory.CreateParameter(parameterTemplate.Name, parameterTemplate.DbType,
127-
parameterTemplate.MaxLength);
123+
var parameter = default(IDbDataParameter);
124+
if(parameterTemplate.Column != null)
125+
{
126+
parameter = factory.CreateParameter(parameterTemplate.Name + suffix,
127+
parameterTemplate.Column);
128+
}
129+
else if (parameterTemplate.Type == ParameterType.NameOnly)
130+
{
131+
parameter = factory.CreateParameter(parameterTemplate.Name);
132+
}
133+
else
134+
{
135+
parameter = factory.CreateParameter(parameterTemplate.Name, parameterTemplate.DbType,
136+
parameterTemplate.MaxLength);
137+
}
128138
parameter.Value = FixObjectType(value);
129139
return parameter;
130140
}

Simple.Data.Ado/GenericDbParameterFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ public GenericDbParameterFactory(IDbCommand command)
1414
_command = command;
1515
}
1616

17+
public IDbDataParameter CreateParameter(string name)
18+
{
19+
if (name == null) throw new ArgumentNullException("name");
20+
var parameter = _command.CreateParameter();
21+
parameter.ParameterName = name;
22+
return parameter;
23+
}
24+
1725
public IDbDataParameter CreateParameter(string name, Column column)
1826
{
1927
if (name == null) throw new ArgumentNullException("name");

Simple.Data.Ado/IDbParameterFactory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
public interface IDbParameterFactory
88
{
9+
IDbDataParameter CreateParameter(string name);
910
IDbDataParameter CreateParameter(string name, Column column);
1011
IDbDataParameter CreateParameter(string name, DbType dbType, int maxLength);
1112
}

Simple.Data.Ado/ParameterTemplate.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public ParameterTemplate(string name, Column column)
2727
_column = column;
2828
if (column == null)
2929
{
30-
_type = ParameterType.Other;
30+
_type = ParameterType.NameOnly;
3131
return;
3232
}
3333
_type = ParameterType.Column;
@@ -116,6 +116,7 @@ enum ParameterType
116116
{
117117
Column,
118118
FixedValue,
119-
Other
119+
Other,
120+
NameOnly
120121
}
121122
}

Simple.Data.SqlCe40/SqlCeDbParameterFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ public IDbDataParameter CreateParameter(string name, Column column)
1616
return new SqlCeParameter(name, sqlCeColumn.SqlDbType, 0, column.ActualName);
1717
}
1818

19+
public IDbDataParameter CreateParameter(string name)
20+
{
21+
return new SqlCeParameter
22+
{
23+
ParameterName = name
24+
};
25+
}
26+
1927
public IDbDataParameter CreateParameter(string name, DbType dbType, int maxLength)
2028
{
2129
IDbDataParameter parameter = new SqlCeParameter

Simple.Data.SqlServer/SqlCeDbParameterFactory.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,17 @@
99
[Export(typeof(IDbParameterFactory))]
1010
public class SqlDbParameterFactory : IDbParameterFactory
1111
{
12+
public IDbDataParameter CreateParameter(string name)
13+
{
14+
return new SqlParameter
15+
{
16+
ParameterName = name
17+
};
18+
}
19+
1220
public IDbDataParameter CreateParameter(string name, Column column)
1321
{
14-
var sqlColumn = (SqlColumn) column;
22+
var sqlColumn = (SqlColumn)column;
1523
return new SqlParameter(name, sqlColumn.SqlDbType, column.MaxLength, column.ActualName);
1624
}
1725

0 commit comments

Comments
 (0)