Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit c94dc11

Browse files
authored
Fix in InsertOnly for param greater than default length (#654)
* Fix in InsertOnly for param greater than default length * Fixes related to InsertOnly in Async and Legacy versions
1 parent c48fb6d commit c94dc11

File tree

8 files changed

+45
-9
lines changed

8 files changed

+45
-9
lines changed

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,7 @@ public override string ToInsertRowStatement(IDbCommand cmd, object objWithProper
161161
sbColumnNames.Append(GetQuotedColumnName(fieldDef.FieldName));
162162
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
163163

164-
var p = AddParameter(cmd, fieldDef);
165-
p.Value = GetFieldValue(fieldDef, fieldDef.GetValue(objWithProperties)) ?? DBNull.Value;
164+
AddParameter(cmd, fieldDef);
166165
}
167166
catch (Exception ex)
168167
{

src/ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,8 +361,7 @@ public override string ToInsertRowStatement(IDbCommand cmd, object objWithProper
361361
sbColumnNames.Append(GetQuotedColumnName(fieldDef.FieldName));
362362
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
363363

364-
var p = AddParameter(cmd, fieldDef);
365-
p.Value = GetFieldValue(fieldDef, fieldDef.GetValue(objWithProperties)) ?? DBNull.Value;
364+
AddParameter(cmd, fieldDef);
366365
}
367366
catch (Exception ex)
368367
{

src/ServiceStack.OrmLite/Async/WriteExpressionCommandExtensionsAsync.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,11 @@ internal static Task InsertOnlyAsync<T>(this IDbCommand dbCmd, T obj, string[] o
190190

191191
OrmLiteConfig.InsertFilter?.Invoke(dbCmd, obj);
192192

193-
var sql = dbCmd.GetDialectProvider().ToInsertRowStatement(dbCmd, obj, onlyFields);
193+
var dialectProvider = dbCmd.GetDialectProvider();
194+
var sql = dialectProvider.ToInsertRowStatement(dbCmd, obj, onlyFields);
195+
196+
dialectProvider.SetParameterValues<T>(dbCmd, obj);
197+
194198
return dbCmd.ExecuteSqlAsync(sql, token);
195199
}
196200

src/ServiceStack.OrmLite/Expressions/WriteExpressionCommandExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,8 @@ public static long InsertOnly<T>(this IDbCommand dbCmd, T obj, string[] onlyFiel
339339
var dialectProvider = dbCmd.GetDialectProvider();
340340
var sql = dialectProvider.ToInsertRowStatement(dbCmd, obj, onlyFields);
341341

342+
dialectProvider.SetParameterValues<T>(dbCmd, obj);
343+
342344
if (selectIdentity)
343345
return dbCmd.ExecLongScalar(sql + dialectProvider.GetLastInsertIdSqlSuffix<T>());
344346

src/ServiceStack.OrmLite/Legacy/WriteExpressionCommandExtensionsAsyncLegacy.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ internal static Task InsertOnlyAsync<T>(this IDbCommand dbCmd, T obj, SqlExpress
5555
if (OrmLiteConfig.InsertFilter != null)
5656
OrmLiteConfig.InsertFilter(dbCmd, obj);
5757

58-
var sql = dbCmd.GetDialectProvider().ToInsertRowStatement(dbCmd, obj, onlyFields.InsertFields);
58+
var dialectProvider = dbCmd.GetDialectProvider();
59+
var sql = dialectProvider.ToInsertRowStatement(dbCmd, obj, onlyFields.InsertFields);
60+
61+
dialectProvider.SetParameterValues<T>(dbCmd, obj);
62+
5963
return dbCmd.ExecuteSqlAsync(sql, token);
6064
}
6165
}

src/ServiceStack.OrmLite/Legacy/WriteExpressionCommandExtensionsLegacy.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,11 @@ public static void InsertOnly<T>(this IDbCommand dbCmd, T obj, SqlExpression<T>
9797
if (OrmLiteConfig.InsertFilter != null)
9898
OrmLiteConfig.InsertFilter(dbCmd, obj);
9999

100-
var sql = dbCmd.GetDialectProvider().ToInsertRowStatement(dbCmd, obj, onlyFields.InsertFields);
100+
var dialectProvider = dbCmd.GetDialectProvider();
101+
var sql = dialectProvider.ToInsertRowStatement(dbCmd, obj, onlyFields.InsertFields);
102+
103+
dialectProvider.SetParameterValues<T>(dbCmd, obj);
104+
101105
dbCmd.ExecuteSql(sql);
102106
}
103107
}

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,7 @@ public virtual string ToInsertRowStatement(IDbCommand cmd, object objWithPropert
623623
sbColumnNames.Append(GetQuotedColumnName(fieldDef.FieldName));
624624
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
625625

626-
var p = AddParameter(cmd, fieldDef);
627-
p.Value = GetFieldValue(fieldDef, fieldDef.GetValue(objWithProperties)) ?? DBNull.Value;
626+
AddParameter(cmd, fieldDef);
628627
}
629628
catch (Exception ex)
630629
{

tests/ServiceStack.OrmLite.SqlServer.Tests/Issues/StringLengthParamTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,30 @@ public void Can_select_param_greater_than_default_length()
4040

4141
OrmLiteConfig.DialectProvider.GetStringConverter().UseUnicode = hold;
4242
}
43+
44+
[Test]
45+
public void Can_insert_only_param_greater_than_default_length()
46+
{
47+
var hold = OrmLiteConfig.DialectProvider.GetStringConverter().UseUnicode;
48+
OrmLiteConfig.DialectProvider.GetStringConverter().UseUnicode = true;
49+
50+
using (var db = OpenDbConnection())
51+
{
52+
db.DropAndCreateTable<StringLengthParamTest>();
53+
54+
var name = "a" + new string('b', 8000) + "c";
55+
56+
db.InsertOnly(new StringLengthParamTest
57+
{
58+
Name = name
59+
}, s => s.Name);
60+
61+
var people = db.Select<StringLengthParamTest>(p => p.Name == name);
62+
63+
Assert.That(people.Count, Is.EqualTo(1));
64+
}
65+
66+
OrmLiteConfig.DialectProvider.GetStringConverter().UseUnicode = hold;
67+
}
4368
}
4469
}

0 commit comments

Comments
 (0)